diff -Naur ns-3.23/AUTHORS ns-3.24/AUTHORS
--- ns-3.23/AUTHORS	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/AUTHORS	2015-09-15 11:18:44.000000000 -0700
@@ -82,6 +82,7 @@
 Joe Kopena (tjkopena@cs.drexel.edu)
 Christopher Kosecki (christopher.l.kosecki.ctr@mail.mil)
 Aleksey Kovalenko (kovalenko@iitp.ru)
+Alexander Krotov (ilabdsf@yandex.ru)
 Mathieu Lacage (mathieu.lacage@inria.fr)
 Emmanuelle Laprise (emmmanuelle.laprise@bluekazoo.ca)
 Kristijan LenkoviÄ‡ (k.lenkovic@me.com)
@@ -100,6 +101,7 @@
 Jonathan McCrohan (jmccroha@tcd.ie)
 Andrew McGregor (andrewmcgr@gmail.com)
 Vedran MiletiÄ‡ (rivanvx@gmail.com)
+Saswat Mishra (clicksaswat@gmail.com)
 Jens Mittag (jens.mittag@kit.edu)
 Marco Miozzo (mmiozzo@cttc.es)
 Faker Moatamri (faker.moatamri@inria.fr)
@@ -111,6 +113,7 @@
 Hemanth Narra (hemanth@ittc.ku.edu)
 Roman Naumann (naumann@informatik.hu-berlin.de)
 Ben Newton (bn@cs.unc.edu)
+Cecchi NiccolÃ² (insa@igeek.it)
 Andreas Nilsson (andrnils@gmail.com)
 Jaume Nin (jnin@cttc.es)
 Michael Nowatkowski (nowatkom@gmail.com)
@@ -127,6 +130,7 @@
 Colin Perkins (csp@csperkins.org) 
 Giuseppe Piro (g.piro@poliba.it)
 Yana Podkosova (yanapdk@rambler.ru)
+Ovidiu Poncea (ovidiu.poncea@cs.pub.ro)
 Vikas Pushkar (vikaskupushkar@gmail.com)
 Andrea Ranieri (andreran@uno.it)
 Bruno Ranieri (Yrrsinn@googlemail.com)
@@ -143,6 +147,7 @@
 Lynne Salameh (l.salameh@cs.ucl.ac.uk)
 Providence Salumu Munga (Providence.Salumu@gmail.com, Providence.Salumu_Munga@it-sudparis.eu)
 Francisco Javier SÃ¡nchez-Roselly (fnavarro@ujaen.es)
+Siddharth Santurkar (siddharth.santurkar@ieee.org)
 Florian Schmidt (Florian.Schmidt@cs.rwth-aachen.de)
 Guillaume Seguin (guillaume.seguin@inria.fr)
 Ioannis Selinis (selinis.g@gmail.com)
@@ -159,6 +164,7 @@
 YunQiang Su (wzssyqa@gmail.com)
 Brian Swenson (bswenson3@gatech.edu)
 Lalith Suresh  (suresh.lalith@gmail.com)
+Mohit P. Tahiliani (tahiliani.nitk@gmail.com)
 Dave Taht (dave.taht@bufferbloat.net)
 Marcos Talau (talau@users.sourceforge.net)
 Adrian S. W. Tam (adrian.sw.tam@gmail.com)
diff -Naur ns-3.23/bindings/python/wscript ns-3.24/bindings/python/wscript
--- ns-3.23/bindings/python/wscript	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/bindings/python/wscript	2015-09-15 11:18:44.000000000 -0700
@@ -1,4 +1,5 @@
 ## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
+from __future__ import print_function
 import types
 import re
 import os
@@ -12,12 +13,25 @@
 # feature  = TaskGen.feature
 # after = TaskGen.after
 
-## https://launchpad.net/pybindgen/
-REQUIRED_PYBINDGEN_VERSION = (0, 17, 0, 886)
+# https://github.com/gjcarneiro/pybindgen
+REQUIRED_PYBINDGEN_VERSION = '0.17.0.post41+ngd10fa60'
 REQUIRED_PYGCCXML_VERSION = (0, 9, 5)
 
 RUN_ME=-3
 
+# return types of some APIs differ in Python 2/3 (type string vs class bytes)
+# This method will decode('utf-8') a byte object in Python 3,
+# and do nothing in Python 2
+def maybe_decode(input):
+    if sys.version_info < (3,):
+        return input
+    else:
+        try: 
+            return input.decode('utf-8')
+        except:
+            sys.exc_clear()
+            return input
+
 def add_to_python_path(path):
     if os.environ.get('PYTHONPATH', ''):
         os.environ['PYTHONPATH'] = path + os.pathsep + os.environ.get('PYTHONPATH')
@@ -88,19 +102,19 @@
 
     try:
         conf.load('python')
-    except Errors.ConfigurationError, ex:
+    except Errors.ConfigurationError as ex:
         conf.report_optional_feature("python", "Python Bindings", False,
                                      "The python interpreter was not found")
         return
     try:
         conf.check_python_version((2,3))
-    except Errors.ConfigurationError, ex:
+    except Errors.ConfigurationError as ex:
         conf.report_optional_feature("python", "Python Bindings", False,
                                      "The python found version is too low (2.3 required)")
         return
     try:
         conf.check_python_headers()
-    except Errors.ConfigurationError, ex:
+    except Errors.ConfigurationError as ex:
         conf.report_optional_feature("python", "Python Bindings", False,
                                      "Python library or headers missing")
         return
@@ -165,15 +179,13 @@
     else:
         out = subprocess.Popen([conf.env['PYTHON'][0], "-c",
                                 "import pybindgen.version; "
-                                "print('.'.join([str(x) for x in pybindgen.version.__version__]))"],
+                                "print(pybindgen.__version__)"],
                                 stdout=subprocess.PIPE).communicate()[0]
-        pybindgen_version_str = out.strip()
-        pybindgen_version = tuple([int(x) for x in pybindgen_version_str.split('.')])
-        conf.msg('Checking for pybindgen version', pybindgen_version_str)
+        pybindgen_version = maybe_decode(out.strip())
+        conf.msg('Checking for pybindgen version', pybindgen_version)
         if not (pybindgen_version == REQUIRED_PYBINDGEN_VERSION):
-            Logs.warn("pybindgen (found %s), (need %s)" %
-                    (pybindgen_version_str,
-                     '.'.join([str(x) for x in REQUIRED_PYBINDGEN_VERSION])))
+            Logs.warn("pybindgen (found %r), (need %r)" %
+                      (pybindgen_version, REQUIRED_PYBINDGEN_VERSION))
             conf.report_optional_feature("python", "Python Bindings", False,
                                          "PyBindGen version not correct and newer version could not be retrieved")
             return
@@ -192,13 +204,11 @@
 ''' % dict(type1=t1, type2=t2)
 
         try:
-            ret = conf.run_c_code(code=test_program,
-                                  env=conf.env.derive(), compile_filename='test.cc',
-                                  features='cxx cprogram', execute=False)
+            ret = conf.check(compiler='cxx', fragment=test_program, features='cxx')
         except Errors.ConfigurationError:
-            ret = 1
+            ret = False
         conf.msg('Checking for types %s and %s equivalence' % (t1, t2), (ret and 'no' or 'yes'))
-        return not ret
+        return ret
 
     uint64_is_long = test("uint64_t", "unsigned long")
     uint64_is_long_long = test("uint64_t", "unsigned long long")
@@ -280,13 +290,17 @@
                                      "gccxml missing")
         return
 
-    gccxml_version_line = os.popen(gccxml + " --version").readline().strip()
+    gccxml_version_line = os.popen(gccxml[0] + " --version").readline().strip()
     m = re.match( "^GCC-XML version (\d\.\d(\.\d)?)$", gccxml_version_line)
-    gccxml_version = m.group(1)
-    gccxml_version_ok = ([int(s) for s in gccxml_version.split('.')] >= [0, 9])
+    try:
+        gccxml_version = m.group(1)
+        gccxml_version_ok = ([int(s) for s in gccxml_version.split('.')] >= [0, 9])
+    except AttributeError:
+        gccxml_version = gccxml_version_line
+        gccxml_version_ok = False
     conf.msg('Checking for gccxml version', gccxml_version)
     if not gccxml_version_ok:
-        Logs.warn("gccxml too old, need version >= 0.9; automatic scanning of API definitions will not be possible")
+        Logs.warn("gccxml version unknown or too old, need version >= 0.9; automatic scanning of API definitions will not be possible")
         conf.report_optional_feature("pygccxml", "Python API Scanning Support", False,
                                      "gccxml too old")
         return
@@ -414,13 +428,13 @@
 
     def run(self):
         assert len(self.outputs) == 1
-        outfile = file(self.outputs[0].abspath(), "w")
-        print >> outfile, "import warnings"
-        print >> outfile, 'warnings.warn("the ns3 module is a compatibility layer '\
-            'and should not be used in newly written code", DeprecationWarning, stacklevel=2)'
-        print >> outfile
+        outfile = open(self.outputs[0].abspath(), "w")
+        print("import warnings", file=outfile)
+        print('warnings.warn("the ns3 module is a compatibility layer '\
+            'and should not be used in newly written code", DeprecationWarning, stacklevel=2)', file=outfile)
+        print(file=outfile)
         for module in self.bld.env['PYTHON_MODULES_BUILT']:
-            print >> outfile, "from ns.%s import *" % (module.replace('-', '_'))
+            print("from ns.%s import *" % (module.replace('-', '_')), file=outfile)
         outfile.close()
         return 0
 
@@ -466,7 +480,7 @@
                     scan_modules.append(mod.name.split('ns3-')[1])
         else:
             scan_modules = Options.options.apiscan.split(',')
-        print "Modules to scan: ", scan_modules
+        print("Modules to scan: ", scan_modules)
         for target, cflags in scan_targets:
             group = bld.get_group(bld.current_group)
             for module in scan_modules:
@@ -488,4 +502,3 @@
 
     # note: the actual build commands for the python bindings are in
     # src/wscript, not here.
-
diff -Naur ns-3.23/CHANGES.html ns-3.24/CHANGES.html
--- ns-3.23/CHANGES.html	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/CHANGES.html	2015-09-15 11:18:44.000000000 -0700
@@ -51,6 +51,47 @@
 us a note on ns-developers mailing list.</p>
 
 <hr>
+<h1>Changes from ns-3.23 to ns-3.24</h1>
+<h2>New API:</h2>
+<ul>
+  <li>In 'src/wifi', several changes were made to enable partial 802.11ac support:
+    <ul>
+      <li>A new helper (VhtWifiMacHelper) was added to set up a Very high throughput (VHT) MAC entity.</li>
+      <li>A new standard value has been added that enables the new 11ac data rates.</li>
+      <li>A new 11ac preamble has been added.</li>
+      <li>A new information element has been added:  VhtCapabilities. This information element is added to the MAC frame header if the node is a VHT node. This VhtCapabilites information element is used to advertise the VHT capabilites of the node to other nodes in the network.</li>
+    </ul>
+  </li>
+  <li>The ArpCache API was extended to allow the manual removal of ArpCache entries and the addition of permanent (static) entries for IPv4.
+  </li>
+  <li> The SimpleChannel in the 'network' module now allows per-NetDevice blacklists, in order to do hidden terminal testcases.
+  </li>
+</ul>
+<h2>Changes to existing API:</h2>
+<ul>
+  <li> The signatures on several TcpHeader methods were changed to take const arguments.</li>
+  <li> class TcpL4Protocol replaces Send() methods with SendPacket(), and adds new methods to AddSocket() and RemoveSocket() from a node.  Also, a new PacketReceived() method was introduced to get the TCP header of an incoming packet and check its checksum.</li>
+  <li> The CongestionWindow and SlowStartThreshold trace sources have been moved from the TCP subclasses such as NewReno, Reno, Tahoe, and Westwood to the TcpSocketBase class.</li>
+  <li> The WifiMode object has been refactored:
+    <ul>
+      <li>11n data rates are now renamed according to their MCS value. E.g. OfdmRate65MbpsBW20MHz has been renamed into HtMcs7. 11ac data rates have been defined according to this new renaming.</li>
+      <li>HtWifiMacHelper and VhtWifiMacHelper provide a helper to convert a MCS value into a data rate value.</li>
+      <li>The channel width is no longer tied to the wifimode. It is now included in the TXVECTOR.</li>
+      <li>The physical bitrate is no longer tied to the wifimode. It is computed based on the selected wifimode and on the TXVECTOR parameters (channel width, guard interval and number of spatial streams).</li>
+    </ul>
+  </li>
+</ul>
+<h2>Changes to build system:</h2>
+<ul>
+  <li> Waf was upgraded to 1.8.12</li>
+  <li> Waf scripts and test.py test runner program were made compatible with Python 3</li>
+</ul>
+<h2>Changed behavior:</h2>
+This section is for behavioral changes to the models that were not due to a bug fix.
+<ul>
+</ul>
+
+<hr>
 <h1>Changes from ns-3.22 to ns-3.23</h1>
 <h2>New API:</h2>
 <ul>
diff -Naur ns-3.23/doc/doxygen.conf ns-3.24/doc/doxygen.conf
--- ns-3.23/doc/doxygen.conf	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/doc/doxygen.conf	2015-09-15 11:52:03.000000000 -0700
@@ -40,7 +40,7 @@
 # could be handy for archiving the generated documentation or if some version
 # control system is used.
 
-PROJECT_NUMBER         = "3.23"
+PROJECT_NUMBER         = "3.24"
 
 # Using the PROJECT_BRIEF tag one can provide an optional one line description
 # for a project that appears at the top of each page and should give viewer a
@@ -245,6 +245,16 @@
 ## Link to RFC's
 ALIASES               += RFC{1}="<a href=\"http://datatracker.ietf.org/doc/rfc\1/\">RFC \1</a>"
 
+## Highlight template parameter induction
+##   Inferred template parameters are clear from the context:
+##     template <typename T> void Func (T x);
+##   Explicit template parameters must be given at the call site:
+##     template <typename T> void Func (void);
+##   which is called as 
+##     Func<MyClass> ();
+ALIASES               += deduced="<span class=\"params\"><span class=\"paramdir\">[deduced] </span></span>"
+ALIASES               += explicit="<span class=\"params\"><span class=\"paramdir\">[explicit]</span></span>"
+
 # This tag can be used to specify a number of word-keyword mappings (TCL only).
 # A mapping has the form "name=value". For example adding "class=itcl::class"
 # will allow you to use the command class in the itcl::class meaning.
@@ -546,7 +556,7 @@
 # files with double quotes in the documentation rather than with sharp brackets.
 # The default value is: NO.
 
-FORCE_LOCAL_INCLUDES   = NO
+FORCE_LOCAL_INCLUDES   = YES
 
 # If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
 # documentation for inline members.
@@ -857,6 +867,7 @@
                          src/click/examples \
                          src/config-store/examples \
                          src/core/examples \
+			 src/core/doc \
                          src/csma/examples \
                          src/csma-layout/examples \
                          src/dsdv/examples \
@@ -2066,7 +2077,10 @@
                          NS3_LOG_ENABLE \
                          NS_LOG_COMPONENT_DEFINE()=1 \
                          NS_LOG_COMPONENT_DEFINE_MASK()=1 \
-                         NS_OBJECT_ENSURE_REGISTERED()=1
+                         NS_OBJECT_ENSURE_REGISTERED()=1 \
+                         NS3_BUILD_PROFILE_DEBUG \
+                         NS3_BUILD_PROFILE_RELEASE \
+                         NS3_BUILD_PROFILE_OPTIMIZED
 
 # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
 # tag can be used to specify a list of macro names that should be expanded. The
diff -Naur ns-3.23/doc/doxygen.warnings.report.sh ns-3.24/doc/doxygen.warnings.report.sh
--- ns-3.23/doc/doxygen.warnings.report.sh	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/doc/doxygen.warnings.report.sh	2015-09-15 11:18:44.000000000 -0700
@@ -25,21 +25,22 @@
 {
     cat <<-EOF
 	
-	Usage: $me [-eithv] [-f <log-file> | -l | -s] [-m <module> | -F <regex>]
+	Usage: $me [-eithv] [-s <log-file> | -l | -w] [-m <module>] [-f <regex>] [-F <regex>]
 	
 	Run doxygen to generate all errors; report error counts
 	by module and file.
 	
 	-i  Skip build and print-introspected-doxygen.
 	
-	-f  Skip doxygen run; use existing <log-file>.
-	-s  Skip doxygen run; use existing warnings log doc/$WARNINGSLOGFILE
+	-s  Skip doxygen run; use existing <log-file>.
+	-w  Skip doxygen run; use existing warnings log doc/$WARNINGSLOGFILE
 	-l  Skip doxygen run; use the normal doxygen log doc/$STANDARDLOGFILE
 		
 	-e  Filter out warnings from */examples/*
 	-t  Filter out warnings from */test/*
 	-m  Only include files matching src/<module>
-	-F  Only include files matching the <regex> 
+	-f  Only include files matching the <regex>
+	-F  Exclude files matching the <regex>
 
 	-v  Show the doxygen run output
 	-h  Print this usage message
@@ -120,41 +121,44 @@
 filter_examples=0
 filter_test=0
 filter_module=""
-filter_regex=""
+filter_in=""
+filter_out=""
 
 echo
 echo "$me:"
 
-while getopts :eitm:F:lF:svh option ; do
+while getopts :ef:F:hilm:s:tvw option ; do
 
     case $option in
 	
 	(e)  filter_examples=1        ;;
 
-	(i)  skip_intro=1              ;;
-	
-	(t)  filter_test=1            ;;
+	(f)  filter_in="$OPTARG"      ;;
 
-	(m)  filter_module="$OPTARG"  ;;
+	(F)  filter_out="$OPTARG"     ;;
 
-	(F)  filter_regex="$OPTARG"   ;;
+	(h)  usage                    ;;
+	
+	(i)  skip_intro=1             ;;
+	
+	(l)  use_standard=1           ;;
 
-	(l)  use_standard=1            ;;
+	(m)  filter_module="$OPTARG"  ;;
 
-	(f)  use_filearg=1
+	(s)  use_filearg=1
 	     logfile_arg="$OPTARG"
 	     ;;
 
-	(s)  use_filearg=1
-	     logfile_arg="$DIR/$WARNINGSLOGFILE"
-	     ;;
+	(t)  filter_test=1            ;;
 
 	(v)  verbosity=1
 	     exec 6>&1
 	     ;;
 
-	(h)  usage ;;
-	
+	(w)  use_filearg=1
+	     logfile_arg="$DIR/$WARNINGSLOGFILE"
+	     ;;
+	     
 	(:)  echo "$me: Missing argument to -$OPTARG" ; usage ;;
 	
 	(\?) echo "$me: Invalid option: -$OPTARG"     ; usage ;;
@@ -220,16 +224,16 @@
 # Log filters --------------------------
 #
 
-# Filter regular expression for -m and -F
+# Filter in regular expression for -m and -f
 filter_inRE=""
 if [ "$filter_module" != "" ] ; then
     filter_inRE="${filter_inRE:-}${filter_inRE:+\\|}src/$filter_module"
 fi
-if [ "$filter_regex" != "" ] ; then
-    filter_inRE="${filter_inRE:-}${filter_inRE:+\\|}$filter_regex"
+if [ "$filter_in" != "" ] ; then
+    filter_inRE="${filter_inRE:-}${filter_inRE:+\\|}$filter_in"
 fi
 
-# Filter regular expression for -e and -t
+# Filter out regular expression for -e, -t and -F
 filter_outRE=""
 if [ $filter_examples -eq 1 ]; then
     filter_outRE="${filter_outRE:-}${filter_outRE:+\\|}/examples/"
@@ -237,7 +241,11 @@
 if [ $filter_test -eq 1 ]; then
     filter_outRE="${filter_outRE:-}${filter_outRE:+\\|}/test/"
 fi
+if [ "$filter_out" != "" ] ; then
+    filter_outRE="${filter_outRE:-}${filter_outRE:+\\|}$filter_out"
+fi
 
+#  Show the resulting filters
 if [ "${filter_inRE:-}" != "" ] ; then
     echo "Filtering in \"$filter_inRE\""
 fi
diff -Naur ns-3.23/doc/manual/source/conf.py ns-3.24/doc/manual/source/conf.py
--- ns-3.23/doc/manual/source/conf.py	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/doc/manual/source/conf.py	2015-09-15 11:48:09.000000000 -0700
@@ -48,9 +48,9 @@
 # built documents.
 #
 # The short X.Y version.
-version = 'ns-3.23'
+version = 'ns-3.24'
 # The full version, including alpha/beta/rc tags.
-release = 'ns-3.23'
+release = 'ns-3.24'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff -Naur ns-3.23/doc/manual/source/documentation.rst ns-3.24/doc/manual/source/documentation.rst
--- ns-3.23/doc/manual/source/documentation.rst	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/doc/manual/source/documentation.rst	2015-09-15 11:18:44.000000000 -0700
@@ -38,7 +38,8 @@
 We use Sphinx_ to generate expository chapters describing
 the design and usage of each module.  Right now you are reading the
 :doc:`Documentation <documentation>` Chapter.
-The `Show Source <_sources/documentation.txt>`_ link in the sidebar
+If you are reading the html version, the
+`Show Source <_sources/documentation.txt>`_ link in the sidebar
 will show you the reStructuredText source for this chapter.
 
 Adding New Chapters
@@ -59,7 +60,7 @@
 will create this file for you.
 
 Some models require several ``.rst`` files, and figures; these should
-all go in the ``src/foo/doc/`` directory.  The docs are actually build
+all go in the ``src/foo/doc/`` directory.  The docs are actually built
 by a Sphinx Makefile.  For especially involved
 documentation, it may be helpful to have a local ``Makefile``
 in the ``src/foo/doc/`` directory to
@@ -137,7 +138,7 @@
 
 .. sourcecode:: bash
 
-   $ make -C doc/models
+   $ make -C doc/models html
 
 To see the generated documentation point your browser at
 ``doc/models/build/html``.
@@ -260,7 +261,7 @@
 
   * Summary table of all class members.
   * Graphs of inheritance and collaboration for all classes.
-  * Links to the source code imlementing each function.
+  * Links to the source code implementing each function.
   * Links to every place a member is used.
   * Links to every object used in implementing a function.
   * Grouping of related classes, such as all the classes related to
@@ -273,6 +274,7 @@
   * Documentation for any ``Attributes``, including ``Attributes``
     defined in parent classes.
   * Documentation for any ``Trace`` sources defined by the class.
+  * The memory footprint for each class.
 
 Doxygen operates by scaning the source code, looking for
 specially marked comments.  It also creates a cross reference,
@@ -300,8 +302,11 @@
    *  \note Note any limitations or gotchas.
    *
    *  (For functions with arguments or return valued:)
-   *  \param foo Brief noun phrase describing this argument.
-   *  \param bar Note Sentence case, and terminating period.
+   *  \param [in] foo Brief noun phrase describing this argument. Note
+   *                  that we indicate if the argument is input,
+   *                  output, or both.
+   *  \param [in,out] bar Note Sentence case, and terminating period.
+   *  \param [in] baz Indicate boolean values with \c true or \c false.
    *  \return Brief noun phrase describing the value.
    *
    *  \internal
@@ -310,7 +315,7 @@
    *  Understanding this material shouldn't be necessary to using
    *  the class or method.
    */
-   class Example
+   void ExampleFunction (const int foo, double & bar, const bool baz);
 
 In this style the Doxygen comment block begins with two \`*' characters:
 ``/**``, and precedes the item being documented.
@@ -368,91 +373,100 @@
 
    $ ./waf doxygen
 
-This builds using the default configuration, which generates documentation
-sections for *all* items, even if they do not have explicit comment
-documentation blocks.  This has the effect of suppressing warnings for
-undocumented items, but makes sure everything appears in the generated
-output.
+This builds using the default configuration, which generates
+documentation sections for *all* items, even if they do not have
+explicit comment documentation blocks.  This has the effect of
+suppressing warnings for undocumented items, but makes sure everything
+appears in the generated output, which is usually what you want for
+general use.  Note that we generate documentation even for modules
+which are disabled, to make it easier to see all the features
+available in |ns3|.
 
 When writing documentation, it's often more useful to see which items
-are generating warnings, typically about missing documentation.
-To see the full warnings list, use the ``doc/doxygen.warnings.report.sh``
+are generating warnings, typically about missing documentation.  To
+see the full warnings list, use the ``doc/doxygen.warnings.report.sh``
 script:
 
 .. sourcecode:: bash
 
-   $ doc/doxygen.warnings.report.sh
-   Waf: Entering directory `build'
-   ...
-   Waf: Leaving directory `build'
-   'build' finished successfully (3m24.094s)
-
-   Rebuilding doxygen docs with full errors...Done.
-
-
-   Report of Doxygen warnings
-   ----------------------------------------
-
-   (All counts are lower bounds.)
-
-   Warnings by module/directory:
-
-   Count Directory
-   ----- ----------------------------------
-   3844 src/lte/model
-   1718 src/wimax/model
-   1423 src/core/model
-   ....
-    138 additional undocumented parameters.
-   ----------------------------------------
-    15765 total warnings
-      126 directories with warnings
-
-
-   Warnings by file (alphabetical)
-
-   Count File
-   ----- ----------------------------------
-     17 doc/introspected-doxygen.h
-     15 examples/routing/manet-routing-compare.cc
-     26 examples/stats/wifi-example-apps.h
-   ....
-   ----------------------------------------
-      967 files with warnings
-
-
-   Warnings by file (numerical)
-
-   Count File
-   ----- ----------------------------------
-    374 src/lte/model/lte-asn1-header.h
-    280 src/lte/model/lte-rrc-sap.h
-    262 src/lte/model/lte-rrc-header.h
-   ....
-   ----------------------------------------
-      967 files with warnings
-
-
-   Doxygen Warnings Summary
-   ----------------------------------------
-      126 directories
-      967 files
-    15765 warnings
-
-The script modifies the configuration to show all warnings, and
-to shorten the run time.  As you can see, at this writing we have
-*a lot* of undocumented items.  The report summarizes warnings
-by module ``src/*/*``, and by file, in alphabetically and numerical
-order.
+    $ doc/doxygen.warnings.report.sh
+    
+    doxygen.warnings.report.sh:
+    Building and running print-introspected-doxygen...done.
+    Rebuilding doxygen (v1.8.10) docs with full errors...done.
+
+
+    Report of Doxygen warnings
+    ----------------------------------------
+
+    (All counts are lower bounds.)
+
+    Warnings by module/directory:
+
+    Count Directory
+    ----- ----------------------------------
+    3414 src/lte/model
+    1532 src/wimax/model
+     825 src/lte/test
+    ....
+       1 src/applications/test
+     97 additional undocumented parameters.
+    ----------------------------------------
+     12460 total warnings
+       100 directories with warnings
+
+
+    Warnings by file (alphabetical)
+
+    Count File
+    ----- ----------------------------------
+      15 examples/routing/manet-routing-compare.cc
+      26 examples/stats/wifi-example-apps.h
+      12 examples/tutorial/fifth.cc
+    ....
+      17 utils/python-unit-tests.py
+    ----------------------------------------
+       771 files with warnings
+
+
+    Warnings by file (numerical)
+
+    Count File
+    ----- ----------------------------------
+     273 src/lte/model/lte-rrc-sap.h
+     272 src/core/model/simulator.h
+     221 src/netanim/model/animation-interface.h
+    ....
+       1 src/wimax/model/ul-job.cc
+    ----------------------------------------
+       771 files with warnings
+
+
+    Doxygen Warnings Summary
+    ----------------------------------------
+       100 directories
+       771 files
+     12460 warnings
+
+(This snippet has *a lot* of lines suppressed!)
+
+The script modifies the configuration to show all warnings, and to
+shorten the run time.  (It shortens the run time primarily by
+disabling creation of diagrams, such as call trees, and doesn't
+generate documentation for undocumented items, in order to trigger the
+warnings.)  As you can see, at this writing we have *a lot* of
+undocumented items.  The report summarizes warnings by module
+``src/*/*``, and by file, in alphabetically and numerical order.
 
-The script has a few options to pare things down and make this more
+The script has a few options to pare things down and make the output more
 manageable.  For help, use the ``-h`` option.  Having run it once
 to do the Doxygen build and generate the full warnings log,
 you can reprocess the log file with various "filters,"
-without having to do the full Doxygen build by,
-again using the ``-s`` option.  You can exclude warnings
+without having to do the full Doxygen build again by
+using the ``-s`` option.  You can exclude warnings
 from ``*/examples/*`` files (``-e`` option), and/or ``*/test/*`` files
-(``-t``).
+(``-t``).  Just to be clear, all of the filter options do the complete
+fast doxygen build; they just filter doxygen log and warnings output.
 
 Perhaps the most useful option when writing documentation comments
 is ``-m <module>``, which will limit the report to just files matching
@@ -486,6 +500,13 @@
    src/mesh/helper/mesh-helper.h:119: warning: parameters of member ns3::MeshHelper::SetStandard are not (all) documented
 
 
+Finally, note that undocumented items (classes, methods, functions,
+typedefs, *etc.* won't produce documentation when you build with
+``doxygen.warnings.report.sh``, and only the outermost item
+will produce a warning.  As a result, if you don't see documentation
+for a class method in the generated documentation, the class itself
+probably needs documentation.
+
 Now it's just a matter of understanding the code, and writing some
 docs!
 
@@ -508,24 +529,45 @@
 
     /**
      *  \defgroup foo Foo protocol.
+     *  Implemenation of the Foo protocol.
+     */
+
+  The symbol ``foo`` is how other items can add themselves to this group.
+  The string following that will be the title for the group.  Any futher
+  text will be the detailed description for the group page.
+
+* Document each file, assigning it to the relevant group.  In a header file::
+
+    /**
+     *  \file
+     *  \ingroup foo
+     *  Class Foo declaration.
+     */
+
+  or in the corresponding ``.cc`` file::
+  
+    /**
+     *  \file
+     *  \ingroup foo
+     *  Class FooBar implementation.
      */
 
-  Mark each associated class as belonging to the group::
+* Mark each associated class as belonging to the group::
 
     /**
      *  \ingroup foo
      *
-     *  Foo packet type.
+     *  FooBar packet type.
     */
-    class Foo
+    class FooBar
 
 * Did you know ``typedefs`` can have formal arguments?  This enables
   documentation of function pointer signatures::
 
     /**
-     * Bar callback function signature.
+     *  Bar callback function signature.
      *
-     * \param ale The size of a pint of ale, in Imperial ounces.
+     *  \param ale The size of a pint of ale, in Imperial ounces.
      */
     typedef void (* BarCallback)(const int ale);
     
@@ -534,12 +576,38 @@
 
 * ``\bugid{298}`` will create a link to bug 298 in our Bugzilla.
 
-* ``\pname{foo}`` in a description will format ``foo``
-  as a ``\param foo`` parameter, making it clear that you
+* ``\p foo`` in a description will format ``foo``
+  the same as the ``\param foo`` parameter, making it clear that you
   are referring to an actual argument.
 
 * ``\RFC{301}`` will create a link to RFC 301.
 
+* Document the direction of function arguments with ``\param [in]``, *etc*.
+  The allowed values of the direction token are ``[in]``, ``[out]``, and
+  ``[in,out]`` (note the explicit square brackets), as discussed in the
+  Doxygen docs for ``\param``.
+  
+* Document template arguments with ``\tparam``, just as you use ``\param``
+  for function arguments.
+
+* For template arguments, indicate if they will be deduced or must be given
+  explicitly::
+
+    /**
+     * A templated function.
+     * \tparam T \explicit The return type.
+     * \tparam U \deduced The argument type.
+     * \param [in] a The argument.
+     */
+    template <typename T, typename U> T Function (U a);
+
+  * Use ``\tparam U \deduced`` because the type ``U`` can be deduced at
+    the site where the template is invoked.  Basically deduction can only
+    be done for function arguments.
+
+  * Use ``\tparam T \explicit`` because the type ``T`` can't be deduced;
+    it must be given explicitly at the invocation site.
+				   
 * ``\internal`` should be used only to set off a discussion of implementation
   details, not to mark ``private`` functions (they are already marked,
   as ``private``!)
diff -Naur ns-3.23/doc/manual/source/test-framework.rst ns-3.24/doc/manual/source/test-framework.rst
--- ns-3.23/doc/manual/source/test-framework.rst	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/doc/manual/source/test-framework.rst	2015-09-15 11:18:44.000000000 -0700
@@ -10,52 +10,45 @@
 execution manager; ``test.py`` can run test code and examples to
 look for regressions, can output the results into a number of forms, and
 can manage code coverage analysis tools.  On top of this, we layer 
-*Buildbots* that are automated build robots that perform
+*buildslaves* that are automated build robots that perform
 robustness testing by running the test framework on different systems
 and with different configuration options.
 
-BuildBots
-*********
+Buildslaves
+***********
 
-At the highest level of |ns3| testing are the buildbots (build robots).  
+At the highest level of |ns3| testing are the buildslaves (build robots).  
 If you are unfamiliar with
-this system look at `<http://djmitche.github.com/buildbot/docs/0.7.11/>`_.  
+this system look at `<https://ns-buildmaster.ee.washington.edu:8010/>`_.
 This is an open-source automated system that allows |ns3| to be rebuilt
-and tested each time something has changed.  By running the buildbots on a number
+and tested daily.  By running the buildbots on a number
 of different systems we can ensure that |ns3| builds and executes
 properly on all of its supported systems.
 
-Users (and developers) typically will not interact with the buildbot system other 
+Users (and developers) typically will not interact with the buildslave system other 
 than to read its messages regarding test results.  If a failure is detected in 
 one of the automated build and test jobs, the buildbot will send an email to the
-*ns-developers* mailing list.  This email will look something like
+*ns-commits* mailing list.  This email will look something like
 
 .. sourcecode:  text
 
-  The Buildbot has detected a new failure of osx-ppc-g++-4.2 on NsNam.
-  Full details are available at:
-   http://ns-regression.ee.washington.edu:8010/builders/osx-ppc-g%2B%2B-4.2/builds/0
-  
-  Buildbot URL: http://ns-regression.ee.washington.edu:8010/
-  
-  Buildslave for this Build: darwin-ppc
-  
-  Build Reason: The web-page 'force build' button was pressed by 'ww': ww
-  
-  Build Source Stamp: HEAD
-  Blamelist: 
-  
-  BUILD FAILED: failed shell_5 shell_6 shell_7 shell_8 shell_9 shell_10 shell_11 shell_12 
-  
-  sincerely,
-  -The Buildbot
+  [Ns-commits] Build failed in Jenkins: daily-ubuntu-without-valgrind Â» Ubuntu-64-15.04 #926
+
+  ...
+  281 of 285 tests passed (281 passed, 3 skipped, 1 failed, 0 crashed, 0 valgrind errors)
+  List of SKIPped tests:
+    ns3-tcp-cwnd
+    ns3-tcp-interoperability
+    nsc-tcp-loss
+  List of FAILed tests:
+    random-variable-stream-generators
+  + exit 1
+  Build step 'Execute shell' marked build as failure
 
-In the full details URL shown in the email, one can search for the keyword 
-``failed`` and select the ``stdio`` link for the corresponding step to see
-the reason for the failure.
+In the full details URL shown in the email, one can find links to the detailed test output.
 
-The buildbot will do its job quietly if there are no errors, and the system will
-undergo build and test cycles every day to verify that all is well.
+The buildslave system will do its job quietly if there are no errors, and the 
+system will undergo build and test cycles every day to verify that all is well.
 
 Test.py
 *******
@@ -73,7 +66,7 @@
 ::
 
   $ ./waf configure --enable-examples --enable-tests
-  $ ./waf
+  $ ./waf build
 
 By default, ``test.py`` will run all available tests and report status
 back in a very concise form.  Running the command
@@ -90,7 +83,7 @@
   Waf: Entering directory `/home/craigdo/repos/ns-3-allinone-test/ns-3-dev/build'
   Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone-test/ns-3-dev/build'
   'build' finished successfully (0.939s)
-  FAIL: TestSuite ns3-wifi-propagation-loss-models
+  FAIL: TestSuite propagation-loss-model
   PASS: TestSuite object-name-service
   PASS: TestSuite pcap-file-object
   PASS: TestSuite ns3-tcp-cwnd
@@ -178,25 +171,25 @@
 
 ::
 
-  $ ./test.py --suite=ns3-wifi-propagation-loss-models
+  $ ./test.py --suite=propagation-loss-model
 
 or equivalently
 
 ::
 
-  $ ./test.py -s ns3-wifi-propagation-loss-models
+  $ ./test.py -s propagation-loss-model
 
 results in that single test suite being run.
 
 .. sourcecode:: text
 
-  FAIL: TestSuite ns3-wifi-propagation-loss-models
+  FAIL: TestSuite propagation-loss-model
 
 To find detailed information regarding the failure, one must specify the kind
 of output desired.  For example, most people will probably be interested in
 a text file::
 
-  $ ./test.py --suite=ns3-wifi-propagation-loss-models --text=results.txt
+  $ ./test.py --suite=propagation-loss-model --text=results.txt
 
 This will result in that single test suite being run with the test status written to 
 the file ''results.txt''.
@@ -205,7 +198,7 @@
 
 .. sourcecode:: text
 
-  FAIL: Test Suite ''ns3-wifi-propagation-loss-models'' (real 0.02 user 0.01 system 0.00)
+  FAIL: Test Suite ''propagation-loss-model'' (real 0.02 user 0.01 system 0.00)
   PASS: Test Case "Check ... Friis ... model ..." (real 0.01 user 0.00 system 0.00)
   FAIL: Test Case "Check ... Log Distance ... model" (real 0.01 user 0.01 system 0.00)
     Details:
@@ -282,31 +275,39 @@
   Waf: Entering directory `/home/craigdo/repos/ns-3-allinone-test/ns-3-dev/build'
   Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone-test/ns-3-dev/build'
   'build' finished successfully (0.939s)
-  histogram
-  ns3-wifi-interference
-  ns3-tcp-cwnd
-  ns3-tcp-interoperability
-  sample
-  devices-mesh-flame
-  devices-mesh-dot11s
-  devices-mesh
+
+  Test Type    Test Name
+  ---------    ---------
+  performance  many-uniform-random-variables-one-get-value-call
+  performance  one-uniform-random-variable-many-get-value-calls
+  performance  type-id-perf
+  system       buildings-pathloss-test
+  system       buildings-shadowing-test
+  system       devices-mesh-dot11s-regression
+  system       devices-mesh-flame-regression
+  system       epc-gtpu
+  ...
+  unit         wimax-phy-layer
+  unit         wimax-service-flow
+  unit         wimax-ss-mac-layer
+  unit         wimax-tlv
+  example      adhoc-aloha-ideal-phy
+  example      adhoc-aloha-ideal-phy-matrix-propagation-loss-model
+  example      adhoc-aloha-ideal-phy-with-microwave-oven
+  example      aodv
   ...
-  object-name-service
-  callback
-  attributes
-  config
-  global-value
-  command-line
-  basic-random-number
-  object
 
 Any of these listed suites can be selected to be run by itself using the 
-``--suite`` option as shown above.
+``--suite`` option as shown above.  Examples are handled differently.
 
 Similarly to test suites, one can run a single C++ example program
 using the ``--example`` option.  Note that the relative path for the
 example does not need to be included and that the executables built
-for C++ examples do not have extensions.  Entering
+for C++ examples do not have extensions.  Furthermore, the example
+must be registered as an example to the test framework; it is not
+sufficient to create an example and run it through test.py; it must
+be added to the relevant ``examples-to-run.py`` file, explained below.
+Entering
 
 ::
 
@@ -369,12 +370,12 @@
 
 .. sourcecode:: text
 
-  ns3-wifi-propagation-loss-models
+  propagation-loss-model
   ns3-tcp-cwnd
   ns3-tcp-interoperability
-  pcap-file-object
+  pcap-file
   object-name-service
-  random-number-generators
+  random-variable-stream-generators
 
 Note the absence of the ``Waf`` build messages.
 
@@ -553,19 +554,35 @@
 
 .. sourcecode:: text
 
-  Waf: Entering directory `/home/craigdo/repos/ns-3-allinone-test/ns-3-dev/build'
-  Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone-test/ns-3-dev/build'
-  'build' finished successfully (0.353s)
-  --assert:               Tell tests to segfault (like assert) if an error is detected
-  --basedir=dir:          Set the base directory (where to find src) to ''dir''
-  --tempdir=dir:          Set the temporary directory (where to find data files) to ''dir''
-  --constrain=test-type:  Constrain checks to test suites of type ''test-type''
-  --help:                 Print this message
-  --kinds:                List all of the available kinds of tests
-  --list:                 List all of the test suites (optionally constrained by test-type)
-  --out=file-name:        Set the test status output file to ''file-name''
-  --suite=suite-name:     Run the test suite named ''suite-name''
-  --verbose:              Turn on messages in the run test suites
+  Usage: /home/craigdo/repos/ns-3-allinone-test/ns-3-dev/build/utils/ns3-dev-test-runner-debug [OPTIONS]
+
+  Options: 
+  --help                 : print these options
+  --print-test-name-list : print the list of names of tests available
+  --list                 : an alias for --print-test-name-list
+  --print-test-types     : print the type of tests along with their names
+  --print-test-type-list : print the list of types of tests available
+  --print-temp-dir       : print name of temporary directory before running 
+                           the tests
+  --test-type=TYPE       : process only tests of type TYPE
+  --test-name=NAME       : process only test whose name matches NAME
+  --suite=NAME           : an alias (here for compatibility reasons only) 
+                           for --test-name=NAME
+  --assert-on-failure    : when a test fails, crash immediately (useful
+                           when running under a debugger
+  --stop-on-failure      : when a test fails, stop immediately
+  --fullness=FULLNESS    : choose the duration of tests to run: QUICK, 
+                           EXTENSIVE, or TAKES_FOREVER, where EXTENSIVE 
+                           includes QUICK and TAKES_FOREVER includes 
+                           QUICK and EXTENSIVE (only QUICK tests are 
+                           run by default)
+  --verbose              : print details of test execution
+  --xml                  : format test run output as xml
+  --tempdir=DIR          : set temp dir for tests to store output files
+  --datadir=DIR          : set data dir for tests to read reference files
+  --out=FILE             : send test result to FILE instead of standard output
+  --append=FILE          : append test result to FILE instead of standard output
+
 
 There are a number of things available to you which will be familiar to you if
 you have looked at ``test.py``.  This should be expected since the test-
@@ -575,7 +592,7 @@
 as if they were to present a unified testing environment, but they are really
 completely different and not to be found here.
 
-The first new option that appears here, but not in test.py is the ``--assert``
+The first new option that appears here, but not in test.py is the ``--assert-on-failure``
 option.  This option is useful when debugging a test case when running under a 
 debugger like ``gdb``.  When selected, this option tells the underlying
 test case to cause a segmentation violation if an error is detected.  This has
@@ -586,36 +603,23 @@
 ::
 
   $ ./waf shell
-  $ cd build/debug/utils
-  $ gdb test-runner
-  $ run --suite=global-value --assert
+  $ cd build/utils
+  $ gdb ns3-dev-test-runner-debug
+  $ run --suite=global-value --assert-on-failure 
 
 If an error is then found in the global-value test suite, a segfault would be 
 generated and the (source level) debugger would stop at the ``NS_TEST_ASSERT_MSG``
 that detected the error.
 
-Another new option that appears here is the ``--basedir`` option.  It turns out
-that some tests may need to reference the source directory of the |ns3|  
-distribution to find local data, so a base directory is always required to run
-a test.
-
-If you run a test from test.py, the Python program will provide the basedir 
-option for you.  To run one of the tests directly from the test-runner 
-using ``waf``, you will need to specify the test suite to run along with 
-the base directory.  So you could use the shell and do::
-
-  $ ./waf --run "test-runner --basedir=`pwd` --suite=pcap-file-object"
-
-Note the ''backward'' quotation marks on the ``pwd`` command.  
-
-If you are running the test suite out of a debugger, it can be quite painful 
-to remember and constantly type the absolute path of the distribution base 
-directory.
-Because of this, if you omit the basedir, the test-runner will try to figure one
-out for you.  It begins in the current working directory and walks up the 
-directory tree looking for a directory file with files named ``VERSION`` and
-``LICENSE.``  If it finds one, it assumes that must be the basedir and provides
-it for you.
+To run one of the tests directly from the test-runner 
+using ``waf``, you will need to specify the test suite to run.
+So you could use the shell and do::
+
+  $ ./waf --run "test-runner --suite=pcap-file"
+
+|ns3| logging is available when you run it this way, such as:
+
+  $ NS_LOG="Packet" ./waf --run "test-runner --suite=pcap-file"
 
 Test output
 +++++++++++
@@ -624,7 +628,7 @@
 in the process of running the tests.  The tests then need a temporary directory
 to write to.  The Python test utility (test.py) will provide a temporary file
 automatically, but if run stand-alone this temporary directory must be provided.
-Just as in the basedir case, it can be annoying to continually have to provide
+It can be annoying to continually have to provide
 a ``--tempdir``, so the test runner will figure one out for you if you don't
 provide one.  It first looks for environment variables named ``TMP`` and 
 ``TEMP`` and uses those.  If neither ``TMP`` nor ``TEMP`` are defined
@@ -656,63 +660,15 @@
 Reporting of test failures
 ++++++++++++++++++++++++++
 
-When you run a test suite using the test-runner it will run the test quietly
-by default.  The only indication that you will get that the test passed is 
-the *absence* of a message from ``waf`` saying that the program 
-returned something other than a zero exit code.  To get some output from the
-test, you need to specify an output file to which the tests will write their 
-XML status using the ``--out`` option.  You need to be careful interpreting
-the results because the test suites will *append* results onto this file.
+When you run a test suite using the test-runner it will run the test 
+and report PASS or FAIL.
+To run more quietly, you need to specify an output file to which the tests will write their status using the ``--out`` option.  
 Try,
 
 ::
 
-  $ ./waf --run "test-runner --basedir=`pwd` --suite=pcap-file-object --out=myfile.xml"
+  $ ./waf --run "test-runner --suite=pcap-file --out=myfile.txt"
 
-If you look at the file ``myfile.xml`` you should see something like,
-
-.. sourcecode:: xml
-
-  <TestSuite>
-    <SuiteName>pcap-file-object</SuiteName>
-    <TestCase>
-      <CaseName>Check to see that PcapFile::Open with mode ''w'' works</CaseName>
-      <CaseResult>PASS</CaseResult>
-      <CaseTime>real 0.00 user 0.00 system 0.00</CaseTime>
-    </TestCase>
-    <TestCase>
-      <CaseName>Check to see that PcapFile::Open with mode ''r'' works</CaseName>
-      <CaseResult>PASS</CaseResult>
-      <CaseTime>real 0.00 user 0.00 system 0.00</CaseTime>
-    </TestCase>
-    <TestCase>
-      <CaseName>Check to see that PcapFile::Open with mode ''a'' works</CaseName>
-      <CaseResult>PASS</CaseResult>
-      <CaseTime>real 0.00 user 0.00 system 0.00</CaseTime>
-    </TestCase>
-    <TestCase>
-      <CaseName>Check to see that PcapFileHeader is managed correctly</CaseName>
-      <CaseResult>PASS</CaseResult>
-      <CaseTime>real 0.00 user 0.00 system 0.00</CaseTime>
-    </TestCase>
-    <TestCase>
-      <CaseName>Check to see that PcapRecordHeader is managed correctly</CaseName>
-      <CaseResult>PASS</CaseResult>
-      <CaseTime>real 0.00 user 0.00 system 0.00</CaseTime>
-    </TestCase>
-    <TestCase>
-      <CaseName>Check to see that PcapFile can read out a known good pcap file</CaseName>
-      <CaseResult>PASS</CaseResult>
-      <CaseTime>real 0.00 user 0.00 system 0.00</CaseTime>
-    </TestCase>
-    <SuiteResult>PASS</SuiteResult>
-    <SuiteTime>real 0.00 user 0.00 system 0.00</SuiteTime>
-  </TestSuite>
-
-If you are familiar with XML this should be fairly self-explanatory.  It is 
-also not a complete XML file since test suites are designed to have their
-output appended to a master XML status file as described in the ``test.py``
-section.
 
 Debugging test suite failures
 +++++++++++++++++++++++++++++
@@ -738,8 +694,8 @@
   There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
   and "show warranty" for details.
   This GDB was configured as "x86_64-linux-gnu"...
-  (gdb) r --basedir=`pwd`
-  Starting program: <..>/build/debug/utils/test-runner --basedir=`pwd`
+  (gdb) r --suite=
+  Starting program: <..>/build/utils/ns3-dev-test-runner-debug --suite=ns3-wifi-interference
   [Thread debugging using libthread_db enabled]
   assert failed. file=../src/core/model/type-id.cc, line=138, cond="uid <= m_information.size () && uid != 0"
   ...
@@ -749,7 +705,7 @@
 
   VALGR: TestSuite devices-mesh-dot11s-regression
 
-  $ ./waf --command-template="valgrind %s --basedir=`pwd` --suite=devices-mesh-dot11s-regression" --run test-runner
+  $ ./waf --command-template="valgrind %s --suite=devices-mesh-dot11s-regression" --run test-runner
 
 Class TestRunner
 ****************
@@ -800,11 +756,18 @@
     AddTestCase (new MyTestCase, TestCase::QUICK);
   }
   
-  MyTestSuite myTestSuite;
+  static MyTestSuite myTestSuite;
 
 The base class takes care of all of the registration and reporting required to
 be a good citizen in the test framework.
 
+Avoid putting initialization logic into the test suite or test case 
+constructors.  This is
+because an instance of the test suite is created at run time 
+(due to the static variable above) regardless of whether the test is being 
+run or not.  Instead, the TestCase provides a virtual ``DoSetup`` method
+that can be specialized to perform setup before ``DoRun`` is called.
+
 Test Case
 *********
 
@@ -814,13 +777,15 @@
 
 In order to create a new test case in the system, all one has to do is to inherit
 from the  ``TestCase`` base class, override the constructor to give the test 
-case a name and override the ``DoRun`` method to run the test.
+case a name and override the ``DoRun`` method to run the test.  Optionally,
+override also the ``DoSetup`` method.
 
 .. sourcecode:: cpp
 
   class MyTestCase : public TestCase
   {
     MyTestCase ();
+    virtual void DoSetup (void);
     virtual void DoRun (void);
   };
   
diff -Naur ns-3.23/doc/manual/source/test-overview.rst ns-3.24/doc/manual/source/test-overview.rst
--- ns-3.23/doc/manual/source/test-overview.rst	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/doc/manual/source/test-overview.rst	2015-09-15 11:18:44.000000000 -0700
@@ -3,16 +3,11 @@
 Overview
 --------
 
-This document is concerned with the testing and validation of |ns3| software.
+This chapter is concerned with the testing and validation of |ns3| software.
 
-This document provides
+This chapter provides
 
-* background about terminology and software testing (Chapter 2);
-* a description of the ns-3 testing framework (Chapter 3);
-* a guide to model developers or new model contributors for how to write tests (Chapter 4);
+* background about terminology and software testing 
+* a description of the ns-3 testing framework 
+* a guide to model developers or new model contributors for how to write tests 
 
-In brief, the first three chapters should be read by ns developers and 
-contributors who need to understand how to contribute test code and
-validated programs, and
-the remainder of the document provides space for people to report on what
-aspects of selected models have been validated.
diff -Naur ns-3.23/doc/models/Makefile ns-3.24/doc/models/Makefile
--- ns-3.23/doc/models/Makefile	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/doc/models/Makefile	2015-09-15 11:18:44.000000000 -0700
@@ -38,7 +38,7 @@
 	$(SRC)/energy/doc/energy.rst \
 	$(SRC)/fd-net-device/doc/fd-net-device.rst \
 	$(SRC)/tap-bridge/doc/tap.rst \
-	$(SRC)/mesh/doc/mesh.rst \
+	$(SRC)/mesh/doc/source/mesh.rst \
 	$(SRC)/lte/doc/source/lte.rst \
 	$(SRC)/lte/doc/source/lte-user.rst \
 	$(SRC)/lte/doc/source/lte-design.rst \
@@ -62,7 +62,11 @@
 	$(SRC)/olsr/doc/olsr.rst \
 	$(SRC)/openflow/doc/openflow-switch.rst \
 	$(SRC)/point-to-point/doc/point-to-point.rst \
-	$(SRC)/wifi/doc/wifi.rst \
+	$(SRC)/wifi/doc/source/wifi.rst \
+	$(SRC)/wifi/doc/source/wifi-design.rst \
+	$(SRC)/wifi/doc/source/wifi-user.rst \
+	$(SRC)/wifi/doc/source/wifi-testing.rst \
+	$(SRC)/wifi/doc/source/wifi-references.rst \
 	$(SRC)/wimax/doc/wimax.rst \
 	$(SRC)/uan/doc/uan.rst \
 	$(SRC)/topology-read/doc/topology.rst \
@@ -99,8 +103,8 @@
 	$(SRC)/internet/doc/internet-node-recv.dia \
 	$(SRC)/internet/doc/routing.dia \
 	$(SRC)/internet/doc/routing-specialization.dia \
-	$(SRC)/wifi/doc/WifiArchitecture.dia \
-	$(SRC)/wifi/doc/snir.dia \
+	$(SRC)/wifi/doc/source/figures/WifiArchitecture.dia \
+	$(SRC)/wifi/doc/source/figures/snir.dia \
 	$(SRC)/wimax/doc/WimaxArchitecture.dia \
 	$(SRC)/lte/doc/source/figures/epc-ctrl-arch.dia \
 	$(SRC)/lte/doc/source/figures/epc-data-flow-dl.dia \
diff -Naur ns-3.23/doc/models/source/conf.py ns-3.24/doc/models/source/conf.py
--- ns-3.23/doc/models/source/conf.py	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/doc/models/source/conf.py	2015-09-15 11:48:36.000000000 -0700
@@ -48,9 +48,9 @@
 # built documents.
 #
 # The short X.Y version.
-version = 'ns-3.23'
+version = 'ns-3.24'
 # The full version, including alpha/beta/rc tags.
-release = 'ns-3.23'
+release = 'ns-3.24'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff -Naur ns-3.23/doc/ns3_html_theme/get_version.sh ns-3.24/doc/ns3_html_theme/get_version.sh
--- ns-3.23/doc/ns3_html_theme/get_version.sh	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/doc/ns3_html_theme/get_version.sh	2015-09-15 11:18:44.000000000 -0700
@@ -152,7 +152,7 @@
 else
     version=`hg log -r tip --template '{node|short}'`
     # Check for uncommitted changes
-    hg summary | grep -q 'commit: (clean)'
+    hg summary | grep 'commit:' | grep -q '(clean)'
     if [ ! $? ] ; then
 	say "beyond latest tag, last commit: $version, dirty"
 	dirty="(+)"
diff -Naur ns-3.23/doc/tutorial/source/conf.py ns-3.24/doc/tutorial/source/conf.py
--- ns-3.23/doc/tutorial/source/conf.py	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/doc/tutorial/source/conf.py	2015-09-15 11:49:13.000000000 -0700
@@ -48,9 +48,9 @@
 # built documents.
 #
 # The short X.Y version.
-version = 'ns-3.23'
+version = 'ns-3.24'
 # The full version, including alpha/beta/rc tags.
-release = 'ns-3.23'
+release = 'ns-3.24'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff -Naur ns-3.23/doc/tutorial/source/getting-started.rst ns-3.24/doc/tutorial/source/getting-started.rst
--- ns-3.23/doc/tutorial/source/getting-started.rst	2015-05-13 11:11:44.000000000 -0700
+++ ns-3.24/doc/tutorial/source/getting-started.rst	2015-09-15 12:13:04.000000000 -0700
@@ -96,17 +96,20 @@
   $ cd
   $ mkdir workspace
   $ cd workspace
-  $ wget http://www.nsnam.org/release/ns-allinone-3.23.tar.bz2
-  $ tar xjf ns-allinone-3.23.tar.bz2
+  $ wget http://www.nsnam.org/release/ns-allinone-3.24.tar.bz2
+  $ tar xjf ns-allinone-3.24.tar.bz2
 
-If you change into the directory ``ns-allinone-3.23`` you should see a
-number of files::
+If you change into the directory ``ns-allinone-3.24`` you should see a
+number of files and directories:
+
+::
 
   $ ls
-  bake      constants.py   ns-3.23               README
-  build.py  netanim-3.106  pybindgen-0.17.0.886  util.py
+  bake      constants.py   ns-3.24                            README
+  build.py  netanim-3.106  pybindgen-0.17.0.post41+ngd10fa60  util.py
 
-You are now ready to build the base |ns3| distribution.
+You are now ready to build the base |ns3| distribution and may skip ahead
+to the section on building |ns3|.
 
 Downloading |ns3| Using Bake
 ++++++++++++++++++++++++++++
@@ -163,10 +166,10 @@
 
 There are a few configuration targets available:
 
-1.  ``ns-3.23``:  the module corresponding to the release; it will download
+1.  ``ns-3.24``:  the module corresponding to the release; it will download
     components similar to the release tarball.
 2.  ``ns-3-dev``:  a similar module but using the development code tree
-3.  ``ns-allinone-3.23``:  the module that includes other optional features
+3.  ``ns-allinone-3.24``:  the module that includes other optional features
     such as click routing, openflow for |ns3|, and the Network Simulation
     Cradle
 4.  ``ns-3-allinone``:  similar to the released version of the allinone
@@ -184,7 +187,7 @@
 `"ns-3 Releases"
 <http://www.nsnam.org/releases>`_
 web page and clicking on the latest release link.  We'll proceed in
-this tutorial example with ``ns-3.23``.
+this tutorial example with ``ns-3.24``.
 
 We are now going to use the bake tool to pull down the various pieces of 
 |ns3| you will be using.  First, we'll say a word about running bake.
@@ -210,7 +213,7 @@
 
 Step into the workspace directory and type the following into your shell::
 
-  $ ./bake.py configure -e ns-3.23
+  $ ./bake.py configure -e ns-3.24
 
 Next, we'l ask bake to check whether we have enough tools to download
 various components.  Type::
@@ -253,20 +256,23 @@
 
 should yield something like::
 
-   >> Searching for system dependency pygoocanvas - OK
+   >> Downloading gccxml-ns3 (target directory:gccxml) - OK
    >> Searching for system dependency python-dev - OK
    >> Searching for system dependency pygraphviz - OK
-   >> Downloading pybindgen-0.17.0.886 - OK
+   >> Searching for system dependency pygoocanvas - OK
+   >> Searching for system dependency setuptools - OK
    >> Searching for system dependency g++ - OK
    >> Searching for system dependency qt4 - OK
+   >> Downloading pygccxml - OK
    >> Downloading netanim-3.106 - OK
-   >> Downloading ns-3.23 - OK    
+   >> Downloading pybindgen-0.17.0.post41+ngd10fa60 (target directory:pybindgen) - OK
+   >> Downloading ns-3.24 - OK
 
-The above suggests that three sources have been downloaded.  Check the
+The above suggests that five sources have been downloaded.  Check the
 ``source`` directory now and type ``ls``; one should see::
 
   $ ls
-  netanim-3.106  ns-3.23  pybindgen-0.17.0.886
+  gccxml  netanim-3.106  ns-3.24  pybindgen  pygccxml  pygccxml-1.0.0.zip
 
 You are now ready to build the |ns3| distribution.
 
@@ -285,7 +291,7 @@
 
 If you downloaded
 using a tarball you should have a directory called something like 
-``ns-allinone-3.23`` under your ``~/workspace`` directory.  
+``ns-allinone-3.24`` under your ``~/workspace`` directory.  
 Type the following::
 
   $ ./build.py --enable-examples --enable-tests
@@ -301,7 +307,7 @@
 script builds the various pieces you downloaded.  Eventually you should see the
 following::
 
-   Waf: Leaving directory `/path/to/workspace/ns-allinone-3.23/ns-3.23/build'
+   Waf: Leaving directory `/path/to/workspace/ns-allinone-3.24/ns-3.24/build'
    'build' finished successfully (6m25.032s)
   
    Modules built:
@@ -323,7 +329,7 @@
    brite                     click                     openflow                 
    visualizer               
 
-   Leaving directory `./ns-3.23'
+   Leaving directory `./ns-3.24'
 
 Regarding the portion about modules not built::
 
@@ -349,11 +355,13 @@
 
 and you should see something like::
 
-  >> Building pybindgen-0.17.0.886 - OK
+  >> Building gccxml-ns3 - OK
+  >> Building pygccxml - OK
   >> Building netanim-3.106 - OK
-  >> Building ns-3.23 - OK
+  >> Building pybindgen-0.17.0.post41+ngd10fa60 - OK
+  >> Building ns-3.24 - OK
 
-*Hint:  you can also perform both steps, download and build by calling 'bake.py deploy'.*
+*Hint:  you can also perform both steps, download and build, by calling 'bake.py deploy'.*
 
 If there happens to be a failure, please have a look at what the following
 command tells you; it may give a hint as to a missing dependency::
@@ -554,6 +562,38 @@
 There is also an intermediate build profile, ``release``.  ``-d`` is a
 synonym for ``--build-profile``.
 
+The build profile controls the use of logging, assertions, and compiler optimization:
+
++--------------------+---------------------------------+-----------------------------------------------------------------+
+| Feature            | Build Profile                                                                                     |
++                    +---------------------------------+-------------------------------+---------------------------------+
+|                    | ``debug``                       | ``release``                   | ``optimized``                   |
++====================+=================================+===============================+=================================+
+| Enabled Features   | |  ``NS3_BUILD_PROFILE_DEBUG``  | ``NS3_BUILD_PROFILE_RELEASE`` | ``NS3_BUILD_PROFILE_OPTIMIZED`` |
+|                    | |  ``NS_LOG...``                |                               |                                 |
+|                    | |  ``NS_ASSERT...``             |                               |                                 |
++--------------------+---------------------------------+-------------------------------+---------------------------------+
+| Code Wrapper Macro | ``NS_BUILD_DEBUG(code)``        |  ``NS_BUILD_RELEASE(code)``   | ``NS_BUILD_OPTIMIZED(code)``    |
++--------------------+---------------------------------+-------------------------------+---------------------------------+
+| Compiler Flags     | ``-O0 -ggdb -g3``               | ``-O3 -g0``                   | ``-O3 -g``                      |
+|                    |                                 | ``-fomit-frame-pointer``      | ``-fstrict-overflow``           |
+|                    |                                 |                               | ``-march=native``               |
++--------------------+---------------------------------+-------------------------------+---------------------------------+
+
+As you can see, logging and assertions are only available in debug builds.
+Recommended practice is to develop your scenario in debug mode, then
+conduct repetitive runs (for statistics or changing parameters) in
+optimized build profile.
+
+If you have code that should only run in specific build profiles,
+use the indicated Code Wrapper macro:
+
+.. sourcecode:: cpp
+
+  NS_BUILD_DEBUG (std::cout << "Part of an output line..." << std::flush; timer.Start ());
+  DoLongInvolvedComputation ();
+  NS_BUILD_DEBUG (timer.Stop (); std::cout << "Done: " << timer << std::endl;)
+
 By default Waf puts the build artifacts in the ``build`` directory.  
 You can specify a different output directory with the ``--out``
 option, e.g.
@@ -590,8 +630,8 @@
   $ ./waf configure $NS3CONFIG $NS3OPT
   $ ./waf build
 
-Compilers
-=========
+Compilers and Flags
+===================
 
 In the examples above, Waf uses the GCC C++ compiler, ``g++``, for
 building |ns3|. However, it's possible to change the C++ compiler used by Waf
@@ -614,6 +654,9 @@
 <http://code.google.com/p/distcc/>`_
 under Documentation section.
 
+To add compiler flags, use the ``CXXFLAGS_EXTRA`` environment variable when
+you configure |ns3|.
+
 Install
 =======
 
diff -Naur ns-3.23/doc/tutorial/source/tracing.rst ns-3.24/doc/tutorial/source/tracing.rst
--- ns-3.23/doc/tutorial/source/tracing.rst	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/doc/tutorial/source/tracing.rst	2015-09-15 11:18:44.000000000 -0700
@@ -255,7 +255,7 @@
 <http://www.parashift.com/c++-faq/pointers-to-members.html>`_ before
 writing code like this!)  What you get from this is a variable named
 simply ``pfi`` that is initialized to the value 0.  If you want to
-initialize this pointer to something meaningful, you have to have a
+initialize this pointer to something meaningful, you need to have a
 function with a matching signature.  In this case, you could provide a
 function that looks like::
 
@@ -370,7 +370,7 @@
         .AddTraceSource ("MyInteger",
                          "An integer value to trace.",
                          MakeTraceSourceAccessor (&MyObject::m_myInt),
-                         "ns3::Traced::Value::Int32Callback")
+                         "ns3::TracedValueCallback::Int32")
         ;
       return tid;
     }
@@ -399,11 +399,11 @@
 drives the callback process.  Any time the underlying value is changed
 the TracedValue mechanism will provide both the old and the new value
 of that variable, in this case an ``int32_t`` value.  The trace
-sink function for this TracedValue will need the signature
+sink function ``traceSink`` for this TracedValue will need the signature
 
 ::
 
-  void (* TracedValueCallback)(const int32_t oldValue, const int32_t newValue);
+  void (* traceSink)(int32_t oldValue, int32_t newValue);
 
 All trace sinks hooking this trace source must have this signature.
 We'll discuss below how you can determine the required callback
@@ -866,7 +866,7 @@
 The callback signature is given as a link to the relevant ``typedef``,
 where we find
 
-  ``typedef void (* CourseChangeCallback)(const std::string context, Ptr<const MobilityModel> * model);``
+  ``typedef void (* CourseChangeCallback)(std::string context, Ptr<const MobilityModel> * model);``
 					  
   **TracedCallback** signature for course change notifications.
 
@@ -932,7 +932,7 @@
 arguments::
 
   void
-  CourseChange (const std::string context, Ptr<const MobilityModel> model)
+  CourseChange (std::string context, Ptr<const MobilityModel> model)
   {
     ...
   }
@@ -942,7 +942,7 @@
 come up with::
 
   static void
-  CourseChange (const std::string path, Ptr<const MobilityModel> model)
+  CourseChange (std::string path, Ptr<const MobilityModel> model)
   {
     ...
   }
@@ -1204,11 +1204,12 @@
 ``TracedValue`` it will provide both the old and the new value of that
 variable, in this case an ``int32_t`` value.  By inspection of the
 ``TracedValue`` declaration, we know the trace sink function will have
-arguments ``(const int32_t oldValue, const int32_t newValue)``.  The
+arguments ``(int32_t oldValue, int32_t newValue)``.  The
 return type for a ``TracedValue`` callback function is always
-``void``, so the expected callback signature will be::
+``void``, so the expected callback signature for the sink function
+``traceSink`` will be::
 
-  void (* TracedValueCallback)(const int32_t oldValue, const int32_t newValue);
+  void (* traceSink)(int32_t oldValue, int32_t newValue);
 
 The ``.AddTraceSource`` in the ``GetTypeId`` method provides the
 "hooks" used for connecting the trace source to the outside world
@@ -1217,7 +1218,7 @@
 system, a help string, and the address of the TracedValue class data
 member.
 
-The final string argument, "ns3::Traced::Value::Int32" in the example,
+The final string argument, "ns3::TracedValueCallback::Int32" in the example,
 is the name of a ``typedef`` for the callback function signature.  We
 require these signatures to be defined, and give the fully qualified
 type name to ``AddTraceSource``, so the API documentation can link a
@@ -1271,12 +1272,12 @@
 
   * **CongestionWindow**: The TCP connnection's congestion window
 
-    Callback signature:  **ns3::Traced::Value::Uint322Callback**
+    Callback signature:  **ns3::TracedValueCallback::Uint32**
 
 Clicking on the callback ``typedef`` link we see the signature
 you now know to expect::
 
-    typedef void(* ns3::Traced::Value::Int32Callback)(const int32_t oldValue, const int32_t newValue)
+    typedef void(* ns3::TracedValueCallback::Int32)(int32_t oldValue, int32_t newValue)
 
 You should now understand this code completely.  If we have a pointer
 to the ``TcpNewReno``, we can ``TraceConnect`` to the
diff -Naur ns-3.23/doc/tutorial-pt-br/source/conf.py ns-3.24/doc/tutorial-pt-br/source/conf.py
--- ns-3.23/doc/tutorial-pt-br/source/conf.py	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/doc/tutorial-pt-br/source/conf.py	2015-09-15 11:49:30.000000000 -0700
@@ -50,9 +50,9 @@
 # built documents.
 #
 # The short X.Y version.
-version = 'ns-3.23'
+version = 'ns-3.24'
 # The full version, including alpha/beta/rc tags.
-release = 'ns-3.23'
+release = 'ns-3.24'
 
 # The language for content autogenerated by . Refer to babel documentation
 # for a list of supported languages.
diff -Naur ns-3.23/examples/realtime/wscript ns-3.24/examples/realtime/wscript
--- ns-3.23/examples/realtime/wscript	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/examples/realtime/wscript	2015-09-15 11:18:44.000000000 -0700
@@ -1,7 +1,8 @@
 ## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
 
 def build(bld):
-    obj = bld.create_ns3_program('realtime-udp-echo', ['csma', 'internet', 'applications'])
-    obj.source = 'realtime-udp-echo.cc'
+    if bld.env["ENABLE_REAL_TIME"]:
+        obj = bld.create_ns3_program('realtime-udp-echo', ['csma', 'internet', 'applications'])
+        obj.source = 'realtime-udp-echo.cc'
 
-    bld.register_ns3_script('realtime-udp-echo.py', ['csma', 'internet', 'applications'])
+        bld.register_ns3_script('realtime-udp-echo.py', ['csma', 'internet', 'applications'])
diff -Naur ns-3.23/examples/tutorial/fourth.cc ns-3.24/examples/tutorial/fourth.cc
--- ns-3.23/examples/tutorial/fourth.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/examples/tutorial/fourth.cc	2015-09-15 11:18:44.000000000 -0700
@@ -26,15 +26,20 @@
 class MyObject : public Object
 {
 public:
+  /**
+   * Register this type.
+   * \return The TypeId.
+   */
   static TypeId GetTypeId (void)
   {
     static TypeId tid = TypeId ("MyObject")
-      .SetParent (Object::GetTypeId ())
+      .SetParent<Object> ()
+      .SetGroupName ("Tutorial")
       .AddConstructor<MyObject> ()
       .AddTraceSource ("MyInteger",
                        "An integer value to trace.",
                        MakeTraceSourceAccessor (&MyObject::m_myInt),
-                       "ns3::TracedValue::Int32Callback")
+                       "ns3::TracedValueCallback::Int32")
     ;
     return tid;
   }
diff -Naur ns-3.23/examples/tutorial/second.py ns-3.24/examples/tutorial/second.py
--- ns-3.23/examples/tutorial/second.py	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.24/examples/tutorial/second.py	2015-09-15 11:18:44.000000000 -0700
@@ -0,0 +1,102 @@
+# -*-  Mode: Python; -*-
+# /*
+#  * This program is free software; you can redistribute it and/or modify
+#  * it under the terms of the GNU General Public License version 2 as
+#  * published by the Free Software Foundation;
+#  *
+#  * This program is distributed in the hope that it will be useful,
+#  * but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  * GNU General Public License for more details.
+#  *
+#  * You should have received a copy of the GNU General Public License
+#  * along with this program; if not, write to the Free Software
+#  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#  *
+#  * Ported to Python by Mohit P. Tahiliani
+#  */
+
+import ns.core
+import ns.network
+import ns.csma
+import ns.internet
+import ns.point_to_point
+import ns.applications
+import sys
+
+# // Default Network Topology
+# //
+# //       10.1.1.0
+# // n0 -------------- n1   n2   n3   n4
+# //    point-to-point  |    |    |    |
+# //                    ================
+# //                      LAN 10.1.2.0
+
+cmd = ns.core.CommandLine()
+cmd.nCsma = 3
+cmd.verbose = "True"
+cmd.AddValue("nCsma", "Number of \"extra\" CSMA nodes/devices")
+cmd.AddValue("verbose", "Tell echo applications to log if true")
+cmd.Parse(sys.argv)
+
+nCsma = int(cmd.nCsma)
+verbose = cmd.verbose
+
+if verbose == "True":
+	ns.core.LogComponentEnable("UdpEchoClientApplication", ns.core.LOG_LEVEL_INFO)
+	ns.core.LogComponentEnable("UdpEchoServerApplication", ns.core.LOG_LEVEL_INFO)
+nCsma = 1 if int(nCsma) == 0 else int(nCsma)
+
+p2pNodes = ns.network.NodeContainer()
+p2pNodes.Create(2)
+
+csmaNodes = ns.network.NodeContainer()
+csmaNodes.Add(p2pNodes.Get(1))
+csmaNodes.Create(nCsma)
+
+pointToPoint = ns.point_to_point.PointToPointHelper()
+pointToPoint.SetDeviceAttribute("DataRate", ns.core.StringValue("5Mbps"))
+pointToPoint.SetChannelAttribute("Delay", ns.core.StringValue("2ms"))
+
+p2pDevices = pointToPoint.Install(p2pNodes)
+
+csma = ns.csma.CsmaHelper()
+csma.SetChannelAttribute("DataRate", ns.core.StringValue("100Mbps"))
+csma.SetChannelAttribute("Delay", ns.core.TimeValue(ns.core.NanoSeconds(6560)))
+
+csmaDevices = csma.Install(csmaNodes)
+
+stack = ns.internet.InternetStackHelper()
+stack.Install(p2pNodes.Get(0))
+stack.Install(csmaNodes)
+
+address = ns.internet.Ipv4AddressHelper()
+address.SetBase(ns.network.Ipv4Address("10.1.1.0"), ns.network.Ipv4Mask("255.255.255.0"))
+p2pInterfaces = address.Assign(p2pDevices)
+
+address.SetBase(ns.network.Ipv4Address("10.1.2.0"), ns.network.Ipv4Mask("255.255.255.0"))
+csmaInterfaces = address.Assign(csmaDevices)
+
+echoServer = ns.applications.UdpEchoServerHelper(9)
+
+serverApps = echoServer.Install(csmaNodes.Get(nCsma))
+serverApps.Start(ns.core.Seconds(1.0))
+serverApps.Stop(ns.core.Seconds(10.0))
+
+echoClient = ns.applications.UdpEchoClientHelper(csmaInterfaces.GetAddress(nCsma), 9)
+echoClient.SetAttribute("MaxPackets", ns.core.UintegerValue(1))
+echoClient.SetAttribute("Interval", ns.core.TimeValue(ns.core.Seconds (1.0)))
+echoClient.SetAttribute("PacketSize", ns.core.UintegerValue(1024))
+
+clientApps = echoClient.Install(p2pNodes.Get(0))
+clientApps.Start(ns.core.Seconds(2.0))
+clientApps.Stop(ns.core.Seconds(10.0))
+
+ns.internet.Ipv4GlobalRoutingHelper.PopulateRoutingTables()
+
+pointToPoint.EnablePcapAll("second")
+csma.EnablePcap ("second", csmaDevices.Get (1), True)
+
+ns.core.Simulator.Run()
+ns.core.Simulator.Destroy()
+
diff -Naur ns-3.23/examples/tutorial/seventh.cc ns-3.24/examples/tutorial/seventh.cc
--- ns-3.23/examples/tutorial/seventh.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/examples/tutorial/seventh.cc	2015-09-15 11:18:44.000000000 -0700
@@ -66,6 +66,11 @@
   MyApp ();
   virtual ~MyApp ();
 
+  /**
+   * Register this type.
+   * \return The TypeId.
+   */
+  static TypeId GetTypeId (void);
   void Setup (Ptr<Socket> socket, Address address, uint32_t packetSize, uint32_t nPackets, DataRate dataRate);
 
 private:
@@ -102,6 +107,17 @@
   m_socket = 0;
 }
 
+/* static */
+TypeId MyApp::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("MyApp")
+    .SetParent<Application> ()
+    .SetGroupName ("Tutorial")
+    .AddConstructor<MyApp> ()
+    ;
+  return tid;
+}
+
 void
 MyApp::Setup (Ptr<Socket> socket, Address address, uint32_t packetSize, uint32_t nPackets, DataRate dataRate)
 {
diff -Naur ns-3.23/examples/tutorial/sixth.cc ns-3.24/examples/tutorial/sixth.cc
--- ns-3.23/examples/tutorial/sixth.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/examples/tutorial/sixth.cc	2015-09-15 11:18:44.000000000 -0700
@@ -65,6 +65,11 @@
   MyApp ();
   virtual ~MyApp ();
 
+  /**
+   * Register this type.
+   * \return The TypeId.
+   */
+  static TypeId GetTypeId (void);
   void Setup (Ptr<Socket> socket, Address address, uint32_t packetSize, uint32_t nPackets, DataRate dataRate);
 
 private:
@@ -101,6 +106,17 @@
   m_socket = 0;
 }
 
+/* static */
+TypeId MyApp::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("MyApp")
+    .SetParent<Application> ()
+    .SetGroupName ("Tutorial")
+    .AddConstructor<MyApp> ()
+    ;
+  return tid;
+}
+
 void
 MyApp::Setup (Ptr<Socket> socket, Address address, uint32_t packetSize, uint32_t nPackets, DataRate dataRate)
 {
diff -Naur ns-3.23/examples/tutorial/third.cc ns-3.24/examples/tutorial/third.cc
--- ns-3.23/examples/tutorial/third.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/examples/tutorial/third.cc	2015-09-15 11:18:44.000000000 -0700
@@ -25,6 +25,10 @@
 
 // Default Network Topology
 //
+// Number of wifi or csma nodes can be increased up to 250
+//                          |
+//                 Rank 0   |   Rank 1
+// -------------------------|----------------------------
 //   Wifi 10.1.3.0
 //                 AP
 //  *    *    *    *
@@ -44,19 +48,23 @@
   bool verbose = true;
   uint32_t nCsma = 3;
   uint32_t nWifi = 3;
+  bool tracing = false;
 
   CommandLine cmd;
   cmd.AddValue ("nCsma", "Number of \"extra\" CSMA nodes/devices", nCsma);
   cmd.AddValue ("nWifi", "Number of wifi STA devices", nWifi);
   cmd.AddValue ("verbose", "Tell echo applications to log if true", verbose);
+  cmd.AddValue ("tracing", "Enable pcap tracing", tracing);
 
   cmd.Parse (argc,argv);
 
-  if (nWifi > 18)
+  // Check for valid number of csma or wifi nodes
+  // 250 should be enough, otherwise IP addresses 
+  // soon become an issue
+  if (nWifi > 250 || nCsma > 250)
     {
-      std::cout << "Number of wifi nodes " << nWifi << 
-                   " specified exceeds the mobility bounding box" << std::endl;
-      exit (1);
+      std::cout << "Too many wifi or csma nodes, no more than 250 each." << std::endl;
+      return 1;
     }
 
   if (verbose)
@@ -169,9 +177,12 @@
 
   Simulator::Stop (Seconds (10.0));
 
-  pointToPoint.EnablePcapAll ("third");
-  phy.EnablePcap ("third", apDevices.Get (0));
-  csma.EnablePcap ("third", csmaDevices.Get (0), true);
+  if (tracing == true)
+    {
+      pointToPoint.EnablePcapAll ("third");
+      phy.EnablePcap ("third", apDevices.Get (0));
+      csma.EnablePcap ("third", csmaDevices.Get (0), true);
+    }
 
   Simulator::Run ();
   Simulator::Destroy ();
diff -Naur ns-3.23/examples/tutorial/third.py ns-3.24/examples/tutorial/third.py
--- ns-3.23/examples/tutorial/third.py	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.24/examples/tutorial/third.py	2015-09-15 11:18:44.000000000 -0700
@@ -0,0 +1,153 @@
+# -*-  Mode: Python; -*-
+# /*
+#  * This program is free software; you can redistribute it and/or modify
+#  * it under the terms of the GNU General Public License version 2 as
+#  * published by the Free Software Foundation;
+#  *
+#  * This program is distributed in the hope that it will be useful,
+#  * but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  * GNU General Public License for more details.
+#  *
+#  * You should have received a copy of the GNU General Public License
+#  * along with this program; if not, write to the Free Software
+#  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#  *
+#  * Ported to Python by Mohit P. Tahiliani
+#  */
+
+import ns.core
+import ns.network
+import ns.point_to_point
+import ns.applications
+import ns.wifi
+import ns.mobility
+import ns.csma
+import ns.internet
+import sys
+
+# // Default Network Topology
+# //
+# //   Wifi 10.1.3.0
+# //                 AP
+# //  *    *    *    *
+# //  |    |    |    |    10.1.1.0
+# // n5   n6   n7   n0 -------------- n1   n2   n3   n4
+# //                   point-to-point  |    |    |    |
+# //                                   ================
+# //                                     LAN 10.1.2.0
+
+cmd = ns.core.CommandLine()
+cmd.nCsma = 3
+cmd.verbose = "True"
+cmd.nWifi = 3
+cmd.AddValue("nCsma", "Number of \"extra\" CSMA nodes/devices")
+cmd.AddValue("nWifi", "Number of wifi STA devices")
+cmd.AddValue("verbose", "Tell echo applications to log if true")
+
+cmd.Parse(sys.argv)
+
+nCsma = int(cmd.nCsma)
+verbose = cmd.verbose
+nWifi = int(cmd.nWifi)
+
+if nWifi > 18:
+	print "Number of wifi nodes "+ str(nWifi)+ " specified exceeds the mobility bounding box"
+	sys.exit(1)
+
+if verbose == "True":
+	ns.core.LogComponentEnable("UdpEchoClientApplication", ns.core.LOG_LEVEL_INFO)
+	ns.core.LogComponentEnable("UdpEchoServerApplication", ns.core.LOG_LEVEL_INFO)
+	
+p2pNodes = ns.network.NodeContainer()
+p2pNodes.Create(2)
+
+pointToPoint = ns.point_to_point.PointToPointHelper()
+pointToPoint.SetDeviceAttribute("DataRate", ns.core.StringValue("5Mbps"))
+pointToPoint.SetChannelAttribute("Delay", ns.core.StringValue("2ms"))
+
+p2pDevices = pointToPoint.Install(p2pNodes)
+
+csmaNodes = ns.network.NodeContainer()
+csmaNodes.Add(p2pNodes.Get(1))
+csmaNodes.Create(nCsma)
+
+csma = ns.csma.CsmaHelper()
+csma.SetChannelAttribute("DataRate", ns.core.StringValue("100Mbps"))
+csma.SetChannelAttribute("Delay", ns.core.TimeValue(ns.core.NanoSeconds(6560)))
+
+csmaDevices = csma.Install(csmaNodes)
+
+wifiStaNodes = ns.network.NodeContainer()
+wifiStaNodes.Create(nWifi)
+wifiApNode = p2pNodes.Get(0)
+
+channel = ns.wifi.YansWifiChannelHelper.Default()
+phy = ns.wifi.YansWifiPhyHelper.Default()
+phy.SetChannel(channel.Create())
+
+wifi = ns.wifi.WifiHelper.Default()
+wifi.SetRemoteStationManager("ns3::AarfWifiManager")
+
+mac = ns.wifi.NqosWifiMacHelper.Default()
+ssid = ns.wifi.Ssid ("ns-3-ssid")
+
+mac.SetType ("ns3::StaWifiMac", "Ssid", ns.wifi.SsidValue(ssid), "ActiveProbing", ns.core.BooleanValue(False))
+staDevices = wifi.Install(phy, mac, wifiStaNodes)
+
+mac.SetType("ns3::ApWifiMac","Ssid", ns.wifi.SsidValue (ssid))
+apDevices = wifi.Install(phy, mac, wifiApNode)
+
+mobility = ns.mobility.MobilityHelper()
+mobility.SetPositionAllocator ("ns3::GridPositionAllocator", "MinX", ns.core.DoubleValue(0.0), 
+								"MinY", ns.core.DoubleValue (0.0), "DeltaX", ns.core.DoubleValue(5.0), "DeltaY", ns.core.DoubleValue(10.0), 
+                                 "GridWidth", ns.core.UintegerValue(3), "LayoutType", ns.core.StringValue("RowFirst"))
+                                 
+mobility.SetMobilityModel ("ns3::RandomWalk2dMobilityModel", "Bounds", ns.mobility.RectangleValue(ns.mobility.Rectangle (-50, 50, -50, 50)))
+mobility.Install(wifiStaNodes)
+
+mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel")
+mobility.Install(wifiApNode)
+
+stack = ns.internet.InternetStackHelper()
+stack.Install(csmaNodes)
+stack.Install(wifiApNode)
+stack.Install(wifiStaNodes)
+
+address = ns.internet.Ipv4AddressHelper()
+address.SetBase(ns.network.Ipv4Address("10.1.1.0"), ns.network.Ipv4Mask("255.255.255.0"))
+p2pInterfaces = address.Assign(p2pDevices)
+
+address.SetBase(ns.network.Ipv4Address("10.1.2.0"), ns.network.Ipv4Mask("255.255.255.0"))
+csmaInterfaces = address.Assign(csmaDevices)
+
+address.SetBase(ns.network.Ipv4Address("10.1.3.0"), ns.network.Ipv4Mask("255.255.255.0"))
+address.Assign(staDevices)
+address.Assign(apDevices)
+
+echoServer = ns.applications.UdpEchoServerHelper(9)
+
+serverApps = echoServer.Install(csmaNodes.Get(nCsma))
+serverApps.Start(ns.core.Seconds(1.0))
+serverApps.Stop(ns.core.Seconds(10.0))
+
+echoClient = ns.applications.UdpEchoClientHelper(csmaInterfaces.GetAddress(nCsma), 9)
+echoClient.SetAttribute("MaxPackets", ns.core.UintegerValue(1))
+echoClient.SetAttribute("Interval", ns.core.TimeValue(ns.core.Seconds (1.0)))
+echoClient.SetAttribute("PacketSize", ns.core.UintegerValue(1024))
+
+clientApps = echoClient.Install(wifiStaNodes.Get (nWifi - 1))
+clientApps.Start(ns.core.Seconds(2.0))
+clientApps.Stop(ns.core.Seconds(10.0))
+
+ns.internet.Ipv4GlobalRoutingHelper.PopulateRoutingTables()
+
+ns.core.Simulator.Stop(ns.core.Seconds(10.0))
+
+pointToPoint.EnablePcapAll ("third")
+phy.EnablePcap ("third", apDevices.Get (0))
+csma.EnablePcap ("third", csmaDevices.Get (0), True)
+
+ns.core.Simulator.Run()
+ns.core.Simulator.Destroy()
+
diff -Naur ns-3.23/examples/tutorial/wscript ns-3.24/examples/tutorial/wscript
--- ns-3.23/examples/tutorial/wscript	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/examples/tutorial/wscript	2015-09-15 11:18:44.000000000 -0700
@@ -12,9 +12,13 @@
     obj = bld.create_ns3_program('second', ['core', 'point-to-point', 'csma', 'internet', 'applications'])
     obj.source = 'second.cc'
         
+    bld.register_ns3_script('second.py', ['core', 'point-to-point', 'csma', 'internet', 'applications'])
+
     obj = bld.create_ns3_program('third', ['core', 'point-to-point', 'csma', 'wifi', 'internet', 'applications'])
     obj.source = 'third.cc'
 
+    bld.register_ns3_script('third.py', ['core', 'point-to-point', 'csma', 'wifi', 'internet', 'applications'])
+
     obj = bld.create_ns3_program('fourth', ['core'])
     obj.source = 'fourth.cc'
 
diff -Naur ns-3.23/examples/wireless/examples-to-run.py ns-3.24/examples/wireless/examples-to-run.py
--- ns-3.23/examples/wireless/examples-to-run.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/examples/wireless/examples-to-run.py	2015-09-15 11:18:44.000000000 -0700
@@ -27,6 +27,9 @@
     ("wifi-wired-bridging", "True", "True"),
     ("power-adaptation-distance --manager=ns3::ParfWifiManager --outputFileName=parf --steps=5 --stepsSize=10", "True", "True"),
     ("power-adaptation-distance --manager=ns3::AparfWifiManager --outputFileName=aparf --steps=5 --stepsSize=10", "True", "True"),
+    ("ofdm-ht-validation", "True", "True"),
+    ("ofdm-validation", "True", "True"),
+    ("ofdm-vht-validation", "True", "True"),
 ]
 
 # A list of Python examples to run in order to ensure that they remain
diff -Naur ns-3.23/examples/wireless/ht-wifi-network.cc ns-3.24/examples/wireless/ht-wifi-network.cc
--- ns-3.23/examples/wireless/ht-wifi-network.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/examples/wireless/ht-wifi-network.cc	2015-09-15 11:18:44.000000000 -0700
@@ -3,7 +3,7 @@
  * Copyright (c) 2009 MIRKO BANCHI
  *
  * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as 
+ * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation;
  *
  * This program is distributed in the hope that it will be useful,
@@ -18,6 +18,7 @@
  * Authors: Mirko Banchi <mk.banchi@gmail.com>
  *          Sebastien Deronne <sebastien.deronne@gmail.com>
  */
+
 #include "ns3/core-module.h"
 #include "ns3/network-module.h"
 #include "ns3/applications-module.h"
@@ -26,16 +27,19 @@
 #include "ns3/ipv4-global-routing-helper.h"
 #include "ns3/internet-module.h"
 
-//This is a simple example of an IEEE 802.11n Wi-Fi network.
+// This is a simple example in order to show how to configure an IEEE 802.11n Wi-Fi network.
 //
-//Network topology:
+// It ouputs the UDP or TCP goodput for every VHT bitrate value, which depends on the MCS value (0 to 7), the
+// channel width (20 or 40 MHz) and the guard interval (long or short). The PHY bitrate is constant over all
+// the simulation run. The user can also specify the distance between the access point and the station: the
+// larger the distance the smaller the goodput.
 //
-//  Wifi 192.168.1.0
+// The simulation assumes a single station in an infrastructure network:
 //
-//         AP
-//    *    *
-//    |    |
-//    n1   n2
+//  STA     AP
+//    *     *
+//    |     |
+//   n1     n2
 //
 //Packets in this simulation aren't marked with a QosTag so they are considered
 //belonging to BestEffort Access Class (AC_BE).
@@ -48,330 +52,179 @@
 {
   bool udp = true;
   double simulationTime = 10; //seconds
+  double distance = 1.0; //meters
+  double frequency = 5.0; //whether 2.4 or 5.0 GHz
+  
   CommandLine cmd;
+  cmd.AddValue ("frequency", "Whether working in the 2.4 or 5.0 GHz band (other values gets rejected)", frequency);
+  cmd.AddValue ("distance", "Distance in meters between the station and the access point", distance);
   cmd.AddValue ("simulationTime", "Simulation time in seconds", simulationTime);
   cmd.AddValue ("udp", "UDP if set to 1, TCP otherwise", udp);
   cmd.Parse (argc,argv);
 
-  std::cout << "DataRate" << "\t" << "Throughput" << '\n';
-  for (int i = 0; i <= 31; i++)
+  std::cout << "MCS value" << "\t\t" << "Channel width" << "\t\t" << "short GI" << "\t\t" << "Throughput" << '\n';
+  for (int i = 0; i <= 7; i++) //MCS
     {
-      uint32_t payloadSize; //1500 byte IP packet
-      if (udp)
-        {
-          payloadSize = 1472; //bytes
-        }
-      else
-        {
-          payloadSize = 1448; //bytes
-          Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (payloadSize));
-        }
-
-      NodeContainer wifiStaNode;
-      wifiStaNode.Create (1);
-      NodeContainer wifiApNode;
-      wifiApNode.Create (1);
-
-      YansWifiChannelHelper channel = YansWifiChannelHelper::Default ();
-      YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
-      phy.SetChannel (channel.Create ());
-
-      if (i <= 7)
-        {
-          phy.Set ("ShortGuardEnabled", BooleanValue (false));
-          phy.Set ("ChannelBonding", BooleanValue (false));
-        }
-      else if (i > 7 && i <= 15)
-        {
-          phy.Set ("ShortGuardEnabled", BooleanValue (true));
-          phy.Set ("ChannelBonding", BooleanValue (false));
-        }
-      else if (i > 15 && i <= 23)
-        {
-          phy.Set ("ShortGuardEnabled", BooleanValue (false));
-          phy.Set ("ChannelBonding", BooleanValue (true));
-        }
-      else
-        {
-          phy.Set ("ShortGuardEnabled", BooleanValue (true));
-          phy.Set ("ChannelBonding", BooleanValue (true));
-        }
-
-      WifiHelper wifi = WifiHelper::Default ();
-      wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
-      HtWifiMacHelper mac = HtWifiMacHelper::Default ();
-
-      Ssid ssid = Ssid ("ns380211n");
-
-      double datarate = 0;
-      StringValue DataRate;
-      if (i == 0)
-        {
-          DataRate = StringValue ("OfdmRate6_5MbpsBW20MHz");
-          datarate = 6.5;
-        }
-      else if (i == 1)
-        {
-          DataRate = StringValue ("OfdmRate13MbpsBW20MHz");
-          datarate = 13;
-        }
-      else if (i == 2)
-        {
-          DataRate = StringValue ("OfdmRate19_5MbpsBW20MHz");
-          datarate = 19.5;
-        }
-      else if (i == 3)
-        {
-          DataRate = StringValue ("OfdmRate26MbpsBW20MHz");
-          datarate = 26;
-        }
-      else if (i == 4)
-        {
-          DataRate = StringValue ("OfdmRate39MbpsBW20MHz");
-          datarate = 39;
-        }
-      else if (i == 5)
-        {
-          DataRate = StringValue ("OfdmRate52MbpsBW20MHz");
-          datarate = 52;
-        }
-      else if (i == 6)
-        {
-          DataRate = StringValue ("OfdmRate58_5MbpsBW20MHz");
-          datarate = 58.5;
-        }
-      else if (i == 7)
-        {
-          DataRate = StringValue ("OfdmRate65MbpsBW20MHz");
-          datarate = 65;
-        }
-      else if (i == 8)
-        {
-          DataRate = StringValue ("OfdmRate7_2MbpsBW20MHz");
-          datarate = 7.2;
-        }
-      else if (i == 9)
-        {
-          DataRate = StringValue ("OfdmRate14_4MbpsBW20MHz");
-          datarate = 14.4;
-        }
-      else if (i == 10)
-        {
-          DataRate = StringValue ("OfdmRate21_7MbpsBW20MHz");
-          datarate = 21.7;
-        }
-      else if (i == 11)
-        {
-          DataRate = StringValue ("OfdmRate28_9MbpsBW20MHz");
-          datarate = 28.9;
-        }
-      else if (i == 12)
-        {
-          DataRate = StringValue ("OfdmRate43_3MbpsBW20MHz");
-          datarate = 43.3;
-        }
-      else if (i == 13)
-        {
-          DataRate = StringValue ("OfdmRate57_8MbpsBW20MHz");
-          datarate = 57.8;
-        }
-      else if (i == 14)
-        {
-          DataRate = StringValue ("OfdmRate65MbpsBW20MHzShGi");
-          datarate = 65;
-        }
-      else if (i == 15)
-        {
-          DataRate = StringValue ("OfdmRate72_2MbpsBW20MHz");
-          datarate = 72.2;
-        }
-      else if (i == 16)
-        {
-          DataRate = StringValue ("OfdmRate13_5MbpsBW40MHz");
-          datarate = 13.5;
-        }
-      else if (i == 17)
-        {
-          DataRate = StringValue ("OfdmRate27MbpsBW40MHz");
-          datarate = 27;
-        }
-      else if (i == 18)
-        {
-          DataRate = StringValue ("OfdmRate40_5MbpsBW40MHz");
-          datarate = 40.5;
-        }
-      else if (i == 19)
-        {
-          DataRate = StringValue ("OfdmRate54MbpsBW40MHz");
-          datarate = 54;
-        }
-      else if (i == 20)
-        {
-          DataRate = StringValue ("OfdmRate81MbpsBW40MHz");
-          datarate = 81;
-        }
-      else if (i == 21)
-        {
-          DataRate = StringValue ("OfdmRate108MbpsBW40MHz");
-          datarate = 108;
-        }
-      else if (i == 22)
-        {
-          DataRate = StringValue ("OfdmRate121_5MbpsBW40MHz");
-          datarate = 121.5;
-        }
-      else if (i == 23)
-        {
-          DataRate = StringValue ("OfdmRate135MbpsBW40MHz");
-          datarate = 135;
-        }
-      else if (i == 24)
-        {
-          DataRate = StringValue ("OfdmRate15MbpsBW40MHz");
-          datarate = 15;
-        }
-      else if (i == 25)
-        {
-          DataRate = StringValue ("OfdmRate30MbpsBW40MHz");
-          datarate = 30;
-        }
-      else if (i == 26)
-        {
-          DataRate = StringValue ("OfdmRate45MbpsBW40MHz");
-          datarate = 45;
-        }
-      else if (i == 27)
-        {
-          DataRate = StringValue ("OfdmRate60MbpsBW40MHz");
-          datarate = 60;
-        }
-      else if (i == 28)
-        {
-          DataRate = StringValue ("OfdmRate90MbpsBW40MHz");
-          datarate = 90;
-        }
-      else if (i == 29)
-        {
-          DataRate = StringValue ("OfdmRate120MbpsBW40MHz");
-          datarate = 120;
-        }
-      else if (i == 30)
-        {
-          DataRate = StringValue ("OfdmRate135MbpsBW40MHzShGi");
-          datarate = 135;
-        }
-      else
-        {
-          DataRate = StringValue ("OfdmRate150MbpsBW40MHz");
-          datarate = 150;
-        }
-
-      wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager","DataMode", DataRate,
-                                    "ControlMode", DataRate);
-      mac.SetType ("ns3::StaWifiMac",
-                   "Ssid", SsidValue (ssid),
-                   "ActiveProbing", BooleanValue (false));
-
-      NetDeviceContainer staDevice;
-      staDevice = wifi.Install (phy, mac, wifiStaNode);
-
-      mac.SetType ("ns3::ApWifiMac",
-                   "Ssid", SsidValue (ssid));
-
-      NetDeviceContainer apDevice;
-      apDevice = wifi.Install (phy, mac, wifiApNode);
-
-      // mobility.
-      MobilityHelper mobility;
-      Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
-
-      positionAlloc->Add (Vector (0.0, 0.0, 0.0));
-      positionAlloc->Add (Vector (1.0, 0.0, 0.0));
-      mobility.SetPositionAllocator (positionAlloc);
-
-      mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
-
-      mobility.Install (wifiApNode);
-      mobility.Install (wifiStaNode);
-
-      /* Internet stack*/
-      InternetStackHelper stack;
-      stack.Install (wifiApNode);
-      stack.Install (wifiStaNode);
-
-      Ipv4AddressHelper address;
-
-      address.SetBase ("192.168.1.0", "255.255.255.0");
-      Ipv4InterfaceContainer staNodeInterface;
-      Ipv4InterfaceContainer apNodeInterface;
-
-      staNodeInterface = address.Assign (staDevice);
-      apNodeInterface = address.Assign (apDevice);
-
-      /* Setting applications */
-      ApplicationContainer serverApp, sinkApp;
-      if (udp)
-        {
-          //UDP flow
-          UdpServerHelper myServer (9);
-          serverApp = myServer.Install (wifiStaNode.Get (0));
-          serverApp.Start (Seconds (0.0));
-          serverApp.Stop (Seconds (simulationTime+1));
-
-          UdpClientHelper myClient (staNodeInterface.GetAddress (0), 9);
-          myClient.SetAttribute ("MaxPackets", UintegerValue (4294967295u));
-          myClient.SetAttribute ("Interval", TimeValue (Time ("0.00002"))); //packets/s
-          myClient.SetAttribute ("PacketSize", UintegerValue (payloadSize));
-
-          ApplicationContainer clientApp = myClient.Install (wifiApNode.Get (0));
-          clientApp.Start (Seconds (1.0));
-          clientApp.Stop (Seconds (simulationTime+1));
-        }
-      else
-        {
-          //TCP flow
-          uint16_t port = 50000;
-          Address apLocalAddress (InetSocketAddress (Ipv4Address::GetAny (), port));
-          PacketSinkHelper packetSinkHelper ("ns3::TcpSocketFactory", apLocalAddress);
-          sinkApp = packetSinkHelper.Install (wifiStaNode.Get (0));
-
-          sinkApp.Start (Seconds (0.0));
-          sinkApp.Stop (Seconds (simulationTime+1));
-
-          OnOffHelper onoff ("ns3::TcpSocketFactory",Ipv4Address::GetAny ());
-          onoff.SetAttribute ("OnTime",  StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
-          onoff.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
-          onoff.SetAttribute ("PacketSize", UintegerValue (payloadSize));
-          onoff.SetAttribute ("DataRate", DataRateValue (1000000000)); //bit/s
-          ApplicationContainer apps;
-
-          AddressValue remoteAddress (InetSocketAddress (staNodeInterface.GetAddress (0), port));
-          onoff.SetAttribute ("Remote", remoteAddress);
-          apps.Add (onoff.Install (wifiApNode.Get (0)));
-          apps.Start (Seconds (1.0));
-          apps.Stop (Seconds (simulationTime+1));
-        }
-
-      Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
-
-      Simulator::Stop (Seconds (simulationTime+1));
-      Simulator::Run ();
-      Simulator::Destroy ();
-
-      double throughput = 0;
-      if (udp)
-        {
-          //UDP
-          uint32_t totalPacketsThrough = DynamicCast<UdpServer> (serverApp.Get (0))->GetReceived ();
-          throughput = totalPacketsThrough * payloadSize * 8 / (simulationTime * 1000000.0); //Mbit/s
-        }
-      else
+      for (int j = 20; j <= 40; ) //channel width
         {
-          //TCP
-          uint32_t totalPacketsThrough = DynamicCast<PacketSink> (sinkApp.Get (0))->GetTotalRx ();
-          throughput = totalPacketsThrough * 8 / (simulationTime * 1000000.0); //Mbit/s
+          for (int k = 0; k < 2; k++) //GI: 0 and 1
+            {
+              uint32_t payloadSize; //1500 byte IP packet
+              if (udp)
+                {
+                  payloadSize = 1472; //bytes
+                }
+              else
+                {
+                  payloadSize = 1448; //bytes
+                  Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (payloadSize));
+                }
+
+              NodeContainer wifiStaNode;
+              wifiStaNode.Create (1);
+              NodeContainer wifiApNode;
+              wifiApNode.Create (1);
+
+              YansWifiChannelHelper channel = YansWifiChannelHelper::Default ();
+              YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
+              phy.SetChannel (channel.Create ());
+
+              // Set guard interval
+              phy.Set ("ShortGuardEnabled", BooleanValue (k));
+
+              WifiHelper wifi = WifiHelper::Default ();
+              if (frequency == 5.0)
+                {
+                  wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
+                }
+              else if (frequency == 2.4)
+                {
+                  wifi.SetStandard (WIFI_PHY_STANDARD_80211n_2_4GHZ);
+                  Config::SetDefault ("ns3::LogDistancePropagationLossModel::ReferenceLoss", DoubleValue (40.046));
+                }
+              else
+                {
+                  std::cout<<"Wrong frequency value!"<<std::endl;
+                  return 0;
+                }
+
+              HtWifiMacHelper mac = HtWifiMacHelper::Default ();
+              StringValue DataRate = HtWifiMacHelper::DataRateForMcs (i);
+              wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager","DataMode", DataRate,
+                                            "ControlMode", DataRate);
+                
+              Ssid ssid = Ssid ("ns3-80211n");
+
+              mac.SetType ("ns3::StaWifiMac",
+                           "Ssid", SsidValue (ssid),
+                           "ActiveProbing", BooleanValue (false));
+
+              NetDeviceContainer staDevice;
+              staDevice = wifi.Install (phy, mac, wifiStaNode);
+
+              mac.SetType ("ns3::ApWifiMac",
+                           "Ssid", SsidValue (ssid));
+
+              NetDeviceContainer apDevice;
+              apDevice = wifi.Install (phy, mac, wifiApNode);
+
+              // Set channel width
+              Config::Set ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/ChannelWidth", UintegerValue (j));
+
+              // mobility.
+              MobilityHelper mobility;
+              Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
+
+              positionAlloc->Add (Vector (0.0, 0.0, 0.0));
+              positionAlloc->Add (Vector (distance, 0.0, 0.0));
+              mobility.SetPositionAllocator (positionAlloc);
+
+              mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+
+              mobility.Install (wifiApNode);
+              mobility.Install (wifiStaNode);
+
+              /* Internet stack*/
+              InternetStackHelper stack;
+              stack.Install (wifiApNode);
+              stack.Install (wifiStaNode);
+
+              Ipv4AddressHelper address;
+
+              address.SetBase ("192.168.1.0", "255.255.255.0");
+              Ipv4InterfaceContainer staNodeInterface;
+              Ipv4InterfaceContainer apNodeInterface;
+
+              staNodeInterface = address.Assign (staDevice);
+              apNodeInterface = address.Assign (apDevice);
+
+              /* Setting applications */
+              ApplicationContainer serverApp, sinkApp;
+              if (udp)
+                {
+                  //UDP flow
+                  UdpServerHelper myServer (9);
+                  serverApp = myServer.Install (wifiStaNode.Get (0));
+                  serverApp.Start (Seconds (0.0));
+                  serverApp.Stop (Seconds (simulationTime + 1));
+
+                  UdpClientHelper myClient (staNodeInterface.GetAddress (0), 9);
+                  myClient.SetAttribute ("MaxPackets", UintegerValue (4294967295u));
+                  myClient.SetAttribute ("Interval", TimeValue (Time ("0.00001"))); //packets/s
+                  myClient.SetAttribute ("PacketSize", UintegerValue (payloadSize));
+
+                  ApplicationContainer clientApp = myClient.Install (wifiApNode.Get (0));
+                  clientApp.Start (Seconds (1.0));
+                  clientApp.Stop (Seconds (simulationTime + 1));
+                }
+              else
+                {
+                  //TCP flow
+                  uint16_t port = 50000;
+                  Address apLocalAddress (InetSocketAddress (Ipv4Address::GetAny (), port));
+                  PacketSinkHelper packetSinkHelper ("ns3::TcpSocketFactory", apLocalAddress);
+                  sinkApp = packetSinkHelper.Install (wifiStaNode.Get (0));
+
+                  sinkApp.Start (Seconds (0.0));
+                  sinkApp.Stop (Seconds (simulationTime + 1));
+
+                  OnOffHelper onoff ("ns3::TcpSocketFactory",Ipv4Address::GetAny ());
+                  onoff.SetAttribute ("OnTime",  StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
+                  onoff.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
+                  onoff.SetAttribute ("PacketSize", UintegerValue (payloadSize));
+                  onoff.SetAttribute ("DataRate", DataRateValue (1000000000)); //bit/s
+                  ApplicationContainer apps;
+
+                  AddressValue remoteAddress (InetSocketAddress (staNodeInterface.GetAddress (0), port));
+                  onoff.SetAttribute ("Remote", remoteAddress);
+                  apps.Add (onoff.Install (wifiApNode.Get (0)));
+                  apps.Start (Seconds (1.0));
+                  apps.Stop (Seconds (simulationTime + 1));
+                }
+
+              Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
+
+              Simulator::Stop (Seconds (simulationTime + 1));
+              Simulator::Run ();
+              Simulator::Destroy ();
+
+              double throughput = 0;
+              if (udp)
+                {
+                  //UDP
+                  uint32_t totalPacketsThrough = DynamicCast<UdpServer> (serverApp.Get (0))->GetReceived ();
+                  throughput = totalPacketsThrough * payloadSize * 8 / (simulationTime * 1000000.0); //Mbit/s
+                }
+              else
+                {
+                  //TCP
+                  uint32_t totalPacketsThrough = DynamicCast<PacketSink> (sinkApp.Get (0))->GetTotalRx ();
+                  throughput = totalPacketsThrough * 8 / (simulationTime * 1000000.0); //Mbit/s
+                }
+              std::cout << i << "\t\t\t" << j << " MHz\t\t\t" << k << "\t\t\t" << throughput << " Mbit/s" << std::endl;
+            }
+          j *= 2;
         }
-      std::cout << datarate << "\t\t" << throughput << " Mbit/s" << std::endl;
     }
   return 0;
 }
diff -Naur ns-3.23/examples/wireless/mixed-wireless.py ns-3.24/examples/wireless/mixed-wireless.py
--- ns-3.23/examples/wireless/mixed-wireless.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/examples/wireless/mixed-wireless.py	2015-09-15 11:18:44.000000000 -0700
@@ -72,13 +72,15 @@
 
 def main(argv): 
     # 
-    #  First, we declare and initialize a few local variables that control some 
+    #  First, we initialize a few local variables that control some 
     #  simulation parameters.
-    # 
-    backboneNodes = 10
-    infraNodes = 2 
-    lanNodes = 2
-    stopTime = 20
+    #
+
+    cmd = ns.core.CommandLine()
+    cmd.backboneNodes = 10
+    cmd.infraNodes = 2
+    cmd.lanNodes = 2
+    cmd.stopTime = 20
 
     # 
     #  Simulation defaults are typically set next, before command line
@@ -92,18 +94,23 @@
     #  system so that they can be overridden with flags such as 
     #  "--backboneNodes=20"
     # 
-    cmd = ns.core.CommandLine()
-    cmd.AddValue("backboneNodes", "number of backbone nodes", str(backboneNodes))
-    cmd.AddValue("infraNodes", "number of leaf nodes", str(infraNodes))
-    cmd.AddValue("lanNodes", "number of LAN nodes", str(lanNodes))
-    cmd.AddValue("stopTime", "simulation stop time(seconds)", str(stopTime))
-
+    
+    cmd.AddValue("backboneNodes", "number of backbone nodes")
+    cmd.AddValue("infraNodes", "number of leaf nodes")
+    cmd.AddValue("lanNodes", "number of LAN nodes")
+    cmd.AddValue("stopTime", "simulation stop time(seconds)")
+    
     # 
     #  The system global variables and the local values added to the argument
     #  system can be overridden by command line arguments by using this call.
     # 
     cmd.Parse(argv)
 
+    backboneNodes = int(cmd.backboneNodes)
+    infraNodes = int(cmd.infraNodes) 
+    lanNodes = int(cmd.lanNodes)
+    stopTime = int(cmd.stopTime)
+
     if (stopTime < 10):
         print "Use a simulation stop time >= 10 seconds"
         exit(1)
diff -Naur ns-3.23/examples/wireless/ofdm-ht-validation.cc ns-3.24/examples/wireless/ofdm-ht-validation.cc
--- ns-3.23/examples/wireless/ofdm-ht-validation.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/examples/wireless/ofdm-ht-validation.cc	2015-09-15 11:18:44.000000000 -0700
@@ -15,6 +15,12 @@
  *
  * Authors: SÃ©bastien Deronne <sebastien.deronne@gmail.com>
  */
+
+// This example is used to validate NIST and YANS error rate models for HT rates.
+//
+// It ouputs plots of the Frame Success Rate versus the Signal-to-noise ratio for
+// both NIST and YANS error rate models and for every HT MCS value.
+
 #include "ns3/core-module.h"
 #include "ns3/yans-error-rate-model.h"
 #include "ns3/nist-error-rate-model.h"
@@ -33,14 +39,15 @@
   std::ofstream nistfile ("nist-frame-success-rate-n.plt");
   std::vector <std::string> modes;
 
-  modes.push_back ("OfdmRate6_5MbpsBW20MHz");
-  modes.push_back ("OfdmRate13MbpsBW20MHz");
-  modes.push_back ("OfdmRate19_5MbpsBW20MHz");
-  modes.push_back ("OfdmRate26MbpsBW20MHz");
-  modes.push_back ("OfdmRate39MbpsBW20MHz");
-  modes.push_back ("OfdmRate52MbpsBW20MHz");
-  modes.push_back ("OfdmRate58_5MbpsBW20MHz");
-  modes.push_back ("OfdmRate65MbpsBW20MHz");
+  modes.push_back ("HtMcs0");
+  modes.push_back ("HtMcs1");
+  modes.push_back ("HtMcs2");
+  modes.push_back ("HtMcs3");
+  modes.push_back ("HtMcs4");
+  modes.push_back ("HtMcs5");
+  modes.push_back ("HtMcs6");
+  modes.push_back ("HtMcs7");
+
 
   CommandLine cmd;
   cmd.AddValue ("FrameSize", "The frame size", FrameSize);
@@ -48,6 +55,7 @@
 
   Gnuplot yansplot = Gnuplot ("yans-frame-success-rate-n.eps");
   Gnuplot nistplot = Gnuplot ("nist-frame-success-rate-n.eps");
+  WifiTxVector txVector;
 
   Ptr <YansErrorRateModel> yans = CreateObject<YansErrorRateModel> ();
   Ptr <NistErrorRateModel> nist = CreateObject<NistErrorRateModel> ();
@@ -57,12 +65,23 @@
       std::cout << modes[i] << std::endl;
       Gnuplot2dDataset yansdataset (modes[i]);
       Gnuplot2dDataset nistdataset (modes[i]);
+      txVector.SetMode (modes[i]);
 
       for (double snr = -5.0; snr <= 30.0; snr += 0.1)
         {
-          double ps = yans->GetChunkSuccessRate (WifiMode (modes[i]), std::pow (10.0,snr / 10.0), FrameSize * 8);
+          double ps = yans->GetChunkSuccessRate (WifiMode (modes[i]), txVector, std::pow (10.0,snr / 10.0), FrameSize * 8);
           yansdataset.Add (snr, ps);
-          ps = nist->GetChunkSuccessRate (WifiMode (modes[i]), std::pow (10.0,snr / 10.0), FrameSize * 8);
+          if (ps < 0 || ps > 1)
+            {
+              //error
+              return 0;
+            }
+          ps = nist->GetChunkSuccessRate (WifiMode (modes[i]), txVector, std::pow (10.0,snr / 10.0), FrameSize * 8);
+          if (ps < 0 || ps > 1)
+            {
+              //error
+              return 0;
+            }
           nistdataset.Add (snr, ps);
         }
 
diff -Naur ns-3.23/examples/wireless/ofdm-validation.cc ns-3.24/examples/wireless/ofdm-validation.cc
--- ns-3.23/examples/wireless/ofdm-validation.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/examples/wireless/ofdm-validation.cc	2015-09-15 11:18:44.000000000 -0700
@@ -17,6 +17,12 @@
  *
  * Author: Gary Pei <guangyu.pei@boeing.com>
  */
+
+// This example is used to validate NIST and YANS error rate models for OFDM rates.
+//
+// It ouputs plots of the Frame Success Rate versus the Signal-to-noise ratio for
+// both NIST and YANS error rate models and for every OFDM mode.
+
 #include "ns3/core-module.h"
 #include "ns3/yans-error-rate-model.h"
 #include "ns3/nist-error-rate-model.h"
@@ -53,18 +59,30 @@
 
   Ptr <YansErrorRateModel> yans = CreateObject<YansErrorRateModel> ();
   Ptr <NistErrorRateModel> nist = CreateObject<NistErrorRateModel> ();
+  WifiTxVector txVector;
 
   for (uint32_t i = 0; i < modes.size (); i++)
     {
       std::cout << modes[i] << std::endl;
       Gnuplot2dDataset yansdataset (modes[i]);
       Gnuplot2dDataset nistdataset (modes[i]);
+      txVector.SetMode (modes[i]);
 
       for (double snr = -5.0; snr <= 30.0; snr += 0.1)
         {
-          double ps = yans->GetChunkSuccessRate (WifiMode (modes[i]), std::pow (10.0,snr/10.0), FrameSize*8);
+          double ps = yans->GetChunkSuccessRate (WifiMode (modes[i]), txVector, std::pow (10.0,snr / 10.0), FrameSize * 8);
           yansdataset.Add (snr, ps);
-          ps = nist->GetChunkSuccessRate (WifiMode (modes[i]), std::pow (10.0,snr/10.0), FrameSize*8);
+          if (ps < 0 || ps > 1)
+            {
+              //error
+              return 0;
+            }
+          ps = nist->GetChunkSuccessRate (WifiMode (modes[i]), txVector, std::pow (10.0,snr / 10.0), FrameSize * 8);
+          if (ps < 0 || ps > 1)
+            {
+              //error
+              return 0;
+            }
           nistdataset.Add (snr, ps);
         }
 
diff -Naur ns-3.23/examples/wireless/ofdm-vht-validation.cc ns-3.24/examples/wireless/ofdm-vht-validation.cc
--- ns-3.23/examples/wireless/ofdm-vht-validation.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.24/examples/wireless/ofdm-vht-validation.cc	2015-09-15 11:18:44.000000000 -0700
@@ -0,0 +1,128 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Authors: SÃ©bastien Deronne <sebastien.deronne@gmail.com>
+ */
+
+// This example is used to validate NIST and YANS error rate models for VHT rates.
+//
+// It ouputs plots of the Frame Success Rate versus the Signal-to-noise ratio for
+// both NIST and YANS error rate models and for every VHT MCS value (MCS 9 is not
+// included since it is forbidden for 20 MHz channels).
+
+#include "ns3/core-module.h"
+#include "ns3/yans-error-rate-model.h"
+#include "ns3/nist-error-rate-model.h"
+#include "ns3/gnuplot.h"
+
+#include <fstream>
+#include <vector>
+#include <cmath>
+
+using namespace ns3;
+
+int main (int argc, char *argv[])
+{
+  uint32_t FrameSize = 2000; //bytes
+  std::ofstream yansfile ("yans-frame-success-rate-n.plt");
+  std::ofstream nistfile ("nist-frame-success-rate-n.plt");
+  std::vector <std::string> modes;
+
+  modes.push_back ("VhtMcs0");
+  modes.push_back ("VhtMcs1");
+  modes.push_back ("VhtMcs2");
+  modes.push_back ("VhtMcs3");
+  modes.push_back ("VhtMcs4");
+  modes.push_back ("VhtMcs5");
+  modes.push_back ("VhtMcs6");
+  modes.push_back ("VhtMcs7");
+  modes.push_back ("VhtMcs8");
+
+  CommandLine cmd;
+  cmd.AddValue ("FrameSize", "The frame size", FrameSize);
+  cmd.Parse (argc, argv);
+
+  Gnuplot yansplot = Gnuplot ("yans-frame-success-rate-n.eps");
+  Gnuplot nistplot = Gnuplot ("nist-frame-success-rate-n.eps");
+
+  Ptr <YansErrorRateModel> yans = CreateObject<YansErrorRateModel> ();
+  Ptr <NistErrorRateModel> nist = CreateObject<NistErrorRateModel> ();
+  WifiTxVector txVector;
+
+  for (uint32_t i = 0; i < modes.size (); i++)
+    {
+      std::cout << modes[i] << std::endl;
+      Gnuplot2dDataset yansdataset (modes[i]);
+      Gnuplot2dDataset nistdataset (modes[i]);
+      txVector.SetMode (modes[i]);
+
+      for (double snr = -5.0; snr <= 30.0; snr += 0.1)
+        {
+          double ps = yans->GetChunkSuccessRate (WifiMode (modes[i]), txVector, std::pow (10.0,snr / 10.0), FrameSize * 8);
+          if (ps < 0 || ps > 1)
+            {
+              //error
+              return 0;
+            }
+          yansdataset.Add (snr, ps);
+          ps = nist->GetChunkSuccessRate (WifiMode (modes[i]), txVector, std::pow (10.0,snr / 10.0), FrameSize * 8);
+          if (ps < 0 || ps > 1)
+            {
+              //error
+              return 0;
+            }
+          nistdataset.Add (snr, ps);
+        }
+
+      yansplot.AddDataset (yansdataset);
+      nistplot.AddDataset (nistdataset);
+    }
+
+  yansplot.SetTerminal ("postscript eps color enh \"Times-BoldItalic\"");
+  yansplot.SetLegend ("SNR(dB)", "Frame Success Rate");
+  yansplot.SetExtra  ("set xrange [-5:55]\n\
+set yrange [0:1]\n\
+set style line 1 linewidth 5\n\
+set style line 2 linewidth 5\n\
+set style line 3 linewidth 5\n\
+set style line 4 linewidth 5\n\
+set style line 5 linewidth 5\n\
+set style line 6 linewidth 5\n\
+set style line 7 linewidth 5\n\
+set style line 8 linewidth 5\n\
+set style line 9 linewidth 5\n\
+set style increment user"                                                                                                                                                                                                                                                                                                                                   );
+  yansplot.GenerateOutput (yansfile);
+  yansfile.close ();
+
+  nistplot.SetTerminal ("postscript eps color enh \"Times-BoldItalic\"");
+  nistplot.SetLegend ("SNR(dB)", "Frame Success Rate");
+  nistplot.SetExtra  ("set xrange [-5:55]\n\
+set yrange [0:1]\n\
+set style line 1 linewidth 5\n\
+set style line 2 linewidth 5\n\
+set style line 3 linewidth 5\n\
+set style line 4 linewidth 5\n\
+set style line 5 linewidth 5\n\
+set style line 6 linewidth 5\n\
+set style line 7 linewidth 5\n\
+set style line 8 linewidth 5\n\
+set style line 9 linewidth 5\n\
+set style increment user"                                                                                                                                                                                                                                                                                                                                   );
+
+  nistplot.GenerateOutput (nistfile);
+  nistfile.close ();
+}
+
diff -Naur ns-3.23/examples/wireless/power-adaptation-distance.cc ns-3.24/examples/wireless/power-adaptation-distance.cc
--- ns-3.23/examples/wireless/power-adaptation-distance.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/examples/wireless/power-adaptation-distance.cc	2015-09-15 11:18:44.000000000 -0700
@@ -129,7 +129,7 @@
   void SetupPhy (Ptr<WifiPhy> phy);
   Time GetCalcTxTime (WifiMode mode);
 
-  std::map<Mac48Address, uint32_t> actualPower;
+  std::map<Mac48Address, double> actualPower;
   std::map<Mac48Address, WifiMode> actualMode;
   uint32_t m_bytesTotal;
   double totalEnergy;
@@ -197,9 +197,11 @@
   packet->PeekHeader (head);
   Mac48Address dest = head.GetAddr1 ();
 
-  totalEnergy += actualPower[dest] * GetCalcTxTime (actualMode[dest]).GetSeconds ();
-  totalTime += GetCalcTxTime (actualMode[dest]).GetSeconds ();
-
+  if (head.GetType() == WIFI_MAC_DATA)
+    {
+      totalEnergy += pow (10.0, actualPower[dest] / 10.0) * GetCalcTxTime (actualMode[dest]).GetSeconds ();
+      totalTime += GetCalcTxTime (actualMode[dest]).GetSeconds ();
+    }
 }
 
 void
@@ -259,10 +261,10 @@
   Vector pos = GetPosition (node);
   double mbs = ((m_bytesTotal * 8.0) / (1000000 * stepsTime));
   m_bytesTotal = 0;
-  double atm = pow (10, ((totalEnergy / stepsTime) / 10));
+  double atp = totalEnergy / stepsTime;
   totalEnergy = 0;
   totalTime = 0;
-  m_output_power.Add (pos.x, atm);
+  m_output_power.Add (pos.x, atp);
   m_output.Add (pos.x, mbs);
   pos.x += stepsSize;
   SetPosition (node, pos);
diff -Naur ns-3.23/examples/wireless/power-adaptation-interference.cc ns-3.24/examples/wireless/power-adaptation-interference.cc
--- ns-3.23/examples/wireless/power-adaptation-interference.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/examples/wireless/power-adaptation-interference.cc	2015-09-15 11:18:44.000000000 -0700
@@ -102,7 +102,7 @@
   void SetupPhy (Ptr<WifiPhy> phy);
   Time GetCalcTxTime (WifiMode mode);
 
-  std::map<Mac48Address, uint32_t> actualPower;
+  std::map<Mac48Address, double> actualPower;
   std::map<Mac48Address, WifiMode> actualMode;
   uint32_t m_bytesTotal;
   double totalEnergy;
@@ -193,9 +193,11 @@
   packet->PeekHeader (head);
   Mac48Address dest = head.GetAddr1 ();
 
-  totalEnergy += actualPower[dest] * GetCalcTxTime (actualMode[dest]).GetSeconds ();
-  totalTime += GetCalcTxTime (actualMode[dest]).GetSeconds ();
-
+  if (head.GetType() == WIFI_MAC_DATA)
+    {
+      totalEnergy += pow (10.0, actualPower[dest] / 10.0) * GetCalcTxTime (actualMode[dest]).GetSeconds ();
+      totalTime += GetCalcTxTime (actualMode[dest]).GetSeconds ();
+    }
 }
 
 void
@@ -259,10 +261,10 @@
 {
   double mbs = ((m_bytesTotal * 8.0) / (1000000 * time));
   m_bytesTotal = 0;
-  double atm = pow (10, ((totalEnergy / time) / 10));
+  double atp = totalEnergy / time;
   totalEnergy = 0;
   totalTime = 0;
-  m_output_power.Add ((Simulator::Now ()).GetSeconds (), atm);
+  m_output_power.Add ((Simulator::Now ()).GetSeconds (), atp);
   m_output.Add ((Simulator::Now ()).GetSeconds (), mbs);
 
   m_output_idle.Add ((Simulator::Now ()).GetSeconds (), idleTime * 100);
diff -Naur ns-3.23/examples/wireless/simple-ht-hidden-stations.cc ns-3.24/examples/wireless/simple-ht-hidden-stations.cc
--- ns-3.23/examples/wireless/simple-ht-hidden-stations.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/examples/wireless/simple-ht-hidden-stations.cc	2015-09-15 11:18:44.000000000 -0700
@@ -53,39 +53,43 @@
   uint64_t simulationTime = 10; //seconds
   uint32_t nMpdus = 1;
   bool enableRts = 0;
-    
+
   CommandLine cmd;
-  cmd.AddValue("nMpdus", "Number of aggregated MPDUs", nMpdus);
-  cmd.AddValue("payloadSize", "Payload size in bytes", payloadSize);
-  cmd.AddValue("enableRts", "Enable RTS/CTS", enableRts); // 1: RTS/CTS enabled; 0: RTS/CTS disabled
-  cmd.AddValue("simulationTime", "Simulation time in seconds", simulationTime);
+  cmd.AddValue ("nMpdus", "Number of aggregated MPDUs", nMpdus);
+  cmd.AddValue ("payloadSize", "Payload size in bytes", payloadSize);
+  cmd.AddValue ("enableRts", "Enable RTS/CTS", enableRts); // 1: RTS/CTS enabled; 0: RTS/CTS disabled
+  cmd.AddValue ("simulationTime", "Simulation time in seconds", simulationTime);
   cmd.Parse (argc, argv);
-    
-  if(!enableRts)
-    Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("999999"));
+
+  if (!enableRts)
+    {
+      Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("999999"));
+    }
   else
-    Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("0"));
-     
+    {
+      Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("0"));
+    }
+
   Config::SetDefault ("ns3::WifiRemoteStationManager::FragmentationThreshold", StringValue ("990000"));
-  
+
   // Set the maximum wireless range to 5 meters in order to reproduce a hidden nodes scenario, i.e. the distance between hidden stations is larger than 5 meters
   Config::SetDefault ("ns3::RangePropagationLossModel::MaxRange", DoubleValue (5));
 
   NodeContainer wifiStaNodes;
   wifiStaNodes.Create (2);
   NodeContainer wifiApNode;
-  wifiApNode.Create(1);
+  wifiApNode.Create (1);
 
   YansWifiChannelHelper channel = YansWifiChannelHelper::Default ();
   channel.AddPropagationLoss ("ns3::RangePropagationLossModel"); //wireless range limited to 5 meters!
 
   YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
   phy.SetPcapDataLinkType (YansWifiPhyHelper::DLT_IEEE802_11_RADIO);
-  phy.SetChannel (channel.Create());
+  phy.SetChannel (channel.Create ());
 
   WifiHelper wifi = WifiHelper::Default ();
   wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
-  wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager", "DataMode", StringValue("OfdmRate65MbpsBW20MHz"), "ControlMode", StringValue("OfdmRate6_5MbpsBW20MHz"));
+  wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager", "DataMode", StringValue ("HtMcs7"), "ControlMode", StringValue ("HtMcs0"));
   HtWifiMacHelper mac = HtWifiMacHelper::Default ();
 
   Ssid ssid = Ssid ("simple-mpdu-aggregation");
@@ -93,25 +97,31 @@
                "Ssid", SsidValue (ssid),
                "ActiveProbing", BooleanValue (false));
 
-  if (nMpdus > 1) mac.SetBlockAckThresholdForAc (AC_BE, 2); //enable Block ACK when A-MPDU is enabled
+  if (nMpdus > 1)
+    {
+      mac.SetBlockAckThresholdForAc (AC_BE, 2);             //enable Block ACK when A-MPDU is enabled
 
+    }
   mac.SetMpduAggregatorForAc (AC_BE,"ns3::MpduStandardAggregator",
-                              "MaxAmpduSize", UintegerValue (nMpdus*(payloadSize+100))); //enable MPDU aggregation for AC_BE with a maximum aggregated size of nMpdus*(payloadSize+100) bytes,
-                                                                                         //i.e. nMpdus aggregated packets in an A-MPDU
-  
+                              "MaxAmpduSize", UintegerValue (nMpdus * (payloadSize + 100))); //enable MPDU aggregation for AC_BE with a maximum aggregated size of nMpdus*(payloadSize+100) bytes,
+                                                                                             //i.e. nMpdus aggregated packets in an A-MPDU
+
   NetDeviceContainer staDevices;
   staDevices = wifi.Install (phy, mac, wifiStaNodes);
 
   mac.SetType ("ns3::ApWifiMac",
                "Ssid", SsidValue (ssid),
-               "BeaconInterval", TimeValue (MicroSeconds(102400)),
+               "BeaconInterval", TimeValue (MicroSeconds (102400)),
                "BeaconGeneration", BooleanValue (true));
 
-  if (nMpdus > 1) mac.SetBlockAckThresholdForAc (AC_BE, 2); //enable Block ACK when A-MPDU is enabled
-    
+  if (nMpdus > 1)
+    {
+      mac.SetBlockAckThresholdForAc (AC_BE, 2);             //enable Block ACK when A-MPDU is enabled
+
+    }
   mac.SetMpduAggregatorForAc (AC_BE,"ns3::MpduStandardAggregator",
-                              "MaxAmpduSize", UintegerValue (nMpdus*(payloadSize+100))); //enable MPDU aggregation for AC_BE with a maximum aggregated size of nMpdus*(payloadSize+100) bytes,
-                                                                                         //i.e. nMpdus aggregated packets in an A-MPDU
+                              "MaxAmpduSize", UintegerValue (nMpdus * (payloadSize + 100))); //enable MPDU aggregation for AC_BE with a maximum aggregated size of nMpdus*(payloadSize+100) bytes,
+                                                                                             //i.e. nMpdus aggregated packets in an A-MPDU
 
   NetDeviceContainer apDevice;
   apDevice = wifi.Install (phy, mac, wifiApNode);
@@ -145,35 +155,35 @@
   StaInterface = address.Assign (staDevices);
   Ipv4InterfaceContainer ApInterface;
   ApInterface = address.Assign (apDevice);
- 
+
   // Setting applications
   UdpServerHelper myServer (9);
   ApplicationContainer serverApp = myServer.Install (wifiApNode);
   serverApp.Start (Seconds (0.0));
-  serverApp.Stop (Seconds (simulationTime+1));
-      
+  serverApp.Stop (Seconds (simulationTime + 1));
+
   UdpClientHelper myClient (ApInterface.GetAddress (0), 9);
   myClient.SetAttribute ("MaxPackets", UintegerValue (4294967295u));
   myClient.SetAttribute ("Interval", TimeValue (Time ("0.00002"))); //packets/s
   myClient.SetAttribute ("PacketSize", UintegerValue (payloadSize));
-  
+
   // Saturated UDP traffic from stations to AP
   ApplicationContainer clientApp1 = myClient.Install (wifiStaNodes);
   clientApp1.Start (Seconds (1.0));
-  clientApp1.Stop (Seconds (simulationTime+1));
-  
+  clientApp1.Stop (Seconds (simulationTime + 1));
+
   phy.EnablePcap ("SimpleHtHiddenStations_Ap", apDevice.Get (0));
   phy.EnablePcap ("SimpleHtHiddenStations_Sta1", staDevices.Get (0));
   phy.EnablePcap ("SimpleHtHiddenStations_Sta2", staDevices.Get (1));
-      
-  Simulator::Stop (Seconds (simulationTime+1));
+
+  Simulator::Stop (Seconds (simulationTime + 1));
 
   Simulator::Run ();
   Simulator::Destroy ();
-      
-  uint32_t totalPacketsThrough = DynamicCast<UdpServer>(serverApp.Get (0))->GetReceived ();
-  double throughput = totalPacketsThrough*payloadSize*8/(simulationTime*1000000.0);
+
+  uint32_t totalPacketsThrough = DynamicCast<UdpServer> (serverApp.Get (0))->GetReceived ();
+  double throughput = totalPacketsThrough * payloadSize * 8 / (simulationTime * 1000000.0);
   std::cout << "Throughput: " << throughput << " Mbit/s" << '\n';
-    
+
   return 0;
 }
diff -Naur ns-3.23/examples/wireless/simple-mpdu-aggregation.cc ns-3.24/examples/wireless/simple-mpdu-aggregation.cc
--- ns-3.23/examples/wireless/simple-mpdu-aggregation.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/examples/wireless/simple-mpdu-aggregation.cc	2015-09-15 11:18:44.000000000 -0700
@@ -56,34 +56,38 @@
   uint64_t simulationTime = 10; //seconds
   uint32_t nMpdus = 1;
   bool enableRts = 0;
-    
+
   CommandLine cmd;
-  cmd.AddValue("nMpdus", "Number of aggregated MPDUs", nMpdus); //number of aggregated MPDUs specified by the user
-  cmd.AddValue("payloadSize", "Payload size in bytes", payloadSize);
-  cmd.AddValue("enableRts", "Enable RTS/CTS", enableRts);
-  cmd.AddValue("simulationTime", "Simulation time in seconds", simulationTime);
+  cmd.AddValue ("nMpdus", "Number of aggregated MPDUs", nMpdus); //number of aggregated MPDUs specified by the user
+  cmd.AddValue ("payloadSize", "Payload size in bytes", payloadSize);
+  cmd.AddValue ("enableRts", "Enable RTS/CTS", enableRts);
+  cmd.AddValue ("simulationTime", "Simulation time in seconds", simulationTime);
   cmd.Parse (argc, argv);
-    
-  if(!enableRts)
-    Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("999999"));
+
+  if (!enableRts)
+    {
+      Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("999999"));
+    }
   else
-    Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("0"));
-     
+    {
+      Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("0"));
+    }
+
   Config::SetDefault ("ns3::WifiRemoteStationManager::FragmentationThreshold", StringValue ("990000"));
 
   NodeContainer wifiStaNode;
   wifiStaNode.Create (1);
   NodeContainer wifiApNode;
-  wifiApNode.Create(1);
+  wifiApNode.Create (1);
 
   YansWifiChannelHelper channel = YansWifiChannelHelper::Default ();
   YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
   phy.SetPcapDataLinkType (YansWifiPhyHelper::DLT_IEEE802_11_RADIO);
-  phy.SetChannel (channel.Create());
+  phy.SetChannel (channel.Create ());
 
   WifiHelper wifi = WifiHelper::Default ();
   wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
-  wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager", "DataMode", StringValue("OfdmRate65MbpsBW20MHz"), "ControlMode", StringValue("OfdmRate6_5MbpsBW20MHz"));
+  wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager", "DataMode", StringValue ("HtMcs7"), "ControlMode", StringValue ("HtMcs0"));
   HtWifiMacHelper mac = HtWifiMacHelper::Default ();
 
   Ssid ssid = Ssid ("simple-mpdu-aggregation");
@@ -91,23 +95,29 @@
                "Ssid", SsidValue (ssid),
                "ActiveProbing", BooleanValue (false));
 
-  if (nMpdus > 1) mac.SetBlockAckThresholdForAc (AC_BE, 2); //enable Block ACK when A-MPDU is enabled (i.e. nMpdus > 1)
+  if (nMpdus > 1)
+    {
+      mac.SetBlockAckThresholdForAc (AC_BE, 2);             //enable Block ACK when A-MPDU is enabled (i.e. nMpdus > 1)
 
+    }
   mac.SetMpduAggregatorForAc (AC_BE,"ns3::MpduStandardAggregator",
-                              "MaxAmpduSize", UintegerValue (nMpdus*(payloadSize+100))); //enable MPDU aggregation for AC_BE with a maximum aggregated size of nMpdus*(payloadSize+100) bytes, i.e. nMpdus aggregated packets in an A-MPDU
-  
+                              "MaxAmpduSize", UintegerValue (nMpdus * (payloadSize + 100))); //enable MPDU aggregation for AC_BE with a maximum aggregated size of nMpdus*(payloadSize+100) bytes, i.e. nMpdus aggregated packets in an A-MPDU
+
   NetDeviceContainer staDevice;
   staDevice = wifi.Install (phy, mac, wifiStaNode);
 
   mac.SetType ("ns3::ApWifiMac",
                "Ssid", SsidValue (ssid),
-               "BeaconInterval", TimeValue (MicroSeconds(102400)),
+               "BeaconInterval", TimeValue (MicroSeconds (102400)),
                "BeaconGeneration", BooleanValue (true));
 
-  if (nMpdus > 1) mac.SetBlockAckThresholdForAc (AC_BE, 2); //enable Block ACK when A-MPDU is enabled (i.e. nMpdus > 1)
-    
+  if (nMpdus > 1)
+    {
+      mac.SetBlockAckThresholdForAc (AC_BE, 2);             //enable Block ACK when A-MPDU is enabled (i.e. nMpdus > 1)
+
+    }
   mac.SetMpduAggregatorForAc (AC_BE,"ns3::MpduStandardAggregator",
-                              "MaxAmpduSize", UintegerValue (nMpdus*(payloadSize+100))); //enable MPDU aggregation for AC_BE with a maximum aggregated size of nMpdus*(payloadSize+100) bytes, i.e. nMpdus aggregated packets in an A-MPDU
+                              "MaxAmpduSize", UintegerValue (nMpdus * (payloadSize + 100))); //enable MPDU aggregation for AC_BE with a maximum aggregated size of nMpdus*(payloadSize+100) bytes, i.e. nMpdus aggregated packets in an A-MPDU
 
   NetDeviceContainer apDevice;
   apDevice = wifi.Install (phy, mac, wifiApNode);
@@ -137,30 +147,30 @@
   StaInterface = address.Assign (staDevice);
   Ipv4InterfaceContainer ApInterface;
   ApInterface = address.Assign (apDevice);
- 
+
   /* Setting applications */
   UdpServerHelper myServer (9);
   ApplicationContainer serverApp = myServer.Install (wifiStaNode.Get (0));
   serverApp.Start (Seconds (0.0));
-  serverApp.Stop (Seconds (simulationTime+1));
-      
+  serverApp.Stop (Seconds (simulationTime + 1));
+
   UdpClientHelper myClient (StaInterface.GetAddress (0), 9);
   myClient.SetAttribute ("MaxPackets", UintegerValue (4294967295u));
   myClient.SetAttribute ("Interval", TimeValue (Time ("0.00002"))); //packets/s
   myClient.SetAttribute ("PacketSize", UintegerValue (payloadSize));
-              
+
   ApplicationContainer clientApp = myClient.Install (wifiApNode.Get (0));
   clientApp.Start (Seconds (1.0));
-  clientApp.Stop (Seconds (simulationTime+1));
-      
-  Simulator::Stop (Seconds (simulationTime+1));
+  clientApp.Stop (Seconds (simulationTime + 1));
+
+  Simulator::Stop (Seconds (simulationTime + 1));
 
   Simulator::Run ();
   Simulator::Destroy ();
-      
-  uint32_t totalPacketsThrough = DynamicCast<UdpServer>(serverApp.Get (0))->GetReceived ();
-  double throughput = totalPacketsThrough*payloadSize*8/(simulationTime*1000000.0);
+
+  uint32_t totalPacketsThrough = DynamicCast<UdpServer> (serverApp.Get (0))->GetReceived ();
+  double throughput = totalPacketsThrough * payloadSize * 8 / (simulationTime * 1000000.0);
   std::cout << "Throughput: " << throughput << " Mbit/s" << '\n';
-    
+
   return 0;
 }
diff -Naur ns-3.23/examples/wireless/simple-msdu-aggregation.cc ns-3.24/examples/wireless/simple-msdu-aggregation.cc
--- ns-3.23/examples/wireless/simple-msdu-aggregation.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/examples/wireless/simple-msdu-aggregation.cc	2015-09-15 11:18:44.000000000 -0700
@@ -3,7 +3,7 @@
  * Copyright (c) 2009 MIRKO BANCHI
  *
  * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as 
+ * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation;
  *
  * This program is distributed in the hope that it will be useful,
@@ -56,105 +56,109 @@
   uint64_t simulationTime = 10; //seconds
   uint32_t nMsdus = 1;
   bool enableRts = 0;
-    
+
   CommandLine cmd;
-  cmd.AddValue("nMsdus", "Number of aggregated MSDUs", nMsdus); //number of aggregated MSDUs specified by the user
-  cmd.AddValue("payloadSize", "Payload size in bytes", payloadSize);
-  cmd.AddValue("enableRts", "Enable RTS/CTS", enableRts);
-  cmd.AddValue("simulationTime", "Simulation time in seconds", simulationTime);
+  cmd.AddValue ("nMsdus", "Number of aggregated MSDUs", nMsdus); //number of aggregated MSDUs specified by the user
+  cmd.AddValue ("payloadSize", "Payload size in bytes", payloadSize);
+  cmd.AddValue ("enableRts", "Enable RTS/CTS", enableRts);
+  cmd.AddValue ("simulationTime", "Simulation time in seconds", simulationTime);
   cmd.Parse (argc, argv);
- 
-  if(!enableRts)
-    Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("999999"));
+
+  if (!enableRts)
+    {
+      Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("999999"));
+    }
   else
-    Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("0"));
-    
+    {
+      Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("0"));
+    }
+
   Config::SetDefault ("ns3::WifiRemoteStationManager::FragmentationThreshold", StringValue ("990000"));
-    
+
   NodeContainer wifiStaNode;
   wifiStaNode.Create (1);
   NodeContainer wifiApNode;
-  wifiApNode.Create(1);
-    
+  wifiApNode.Create (1);
+
   YansWifiChannelHelper channel = YansWifiChannelHelper::Default ();
   YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
   phy.SetPcapDataLinkType (YansWifiPhyHelper::DLT_IEEE802_11_RADIO);
-  phy.SetChannel (channel.Create());
-    
+  phy.SetChannel (channel.Create ());
+
   WifiHelper wifi = WifiHelper::Default ();
   wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
-  wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager", "DataMode", StringValue("OfdmRate65MbpsBW20MHz"), "ControlMode", StringValue("OfdmRate6_5MbpsBW20MHz"));
+  wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager", "DataMode", StringValue ("HtMcs7"), "ControlMode", StringValue ("HtMcs0"));
   HtWifiMacHelper mac = HtWifiMacHelper::Default ();
 
   Ssid ssid = Ssid ("simple-msdu-aggregation");
   mac.SetType ("ns3::StaWifiMac",
                "Ssid", SsidValue (ssid),
                "ActiveProbing", BooleanValue (false));
-    
-  mac.SetMsduAggregatorForAc (AC_BE, "ns3::MsduStandardAggregator", 
-                              "MaxAmsduSize", UintegerValue (nMsdus*(payloadSize+100))); //enable MSDU aggregation for AC_BE with a maximum aggregated size of nMsdus*(payloadSize+100) bytes, i.e. nMsdus aggregated packets in an A-MSDU
+
+  mac.SetMsduAggregatorForAc (AC_BE, "ns3::MsduStandardAggregator",
+                              "MaxAmsduSize", UintegerValue (nMsdus * (payloadSize + 100))); //enable MSDU aggregation for AC_BE with a maximum aggregated size of nMsdus*(payloadSize+100) bytes, i.e. nMsdus aggregated packets in an A-MSDU
 
   NetDeviceContainer staDevice;
   staDevice = wifi.Install (phy, mac, wifiStaNode);
 
   mac.SetType ("ns3::ApWifiMac",
                "Ssid", SsidValue (ssid));
-    
-  mac.SetMsduAggregatorForAc (AC_BE, "ns3::MsduStandardAggregator", 
-                              "MaxAmsduSize", UintegerValue (nMsdus*(payloadSize+100))); //enable MSDU aggregation for AC_BE with a maximum aggregated size of nMsdus*(payloadSize+100) bytes, i.e. nMsdus aggregated packets in an A-MSDU
-    
+
+  mac.SetMsduAggregatorForAc (AC_BE, "ns3::MsduStandardAggregator",
+                              "MaxAmsduSize", UintegerValue (nMsdus * (payloadSize + 100))); //enable MSDU aggregation for AC_BE with a maximum aggregated size of nMsdus*(payloadSize+100) bytes, i.e. nMsdus aggregated packets in an A-MSDU
+
   NetDeviceContainer apDevice;
   apDevice = wifi.Install (phy, mac, wifiApNode);
- 
+
   /* Setting mobility model */
   MobilityHelper mobility;
   Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
-    
+
   positionAlloc->Add (Vector (0.0, 0.0, 0.0));
   positionAlloc->Add (Vector (1.0, 0.0, 0.0));
   mobility.SetPositionAllocator (positionAlloc);
-    
+
   mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
-    
+
   mobility.Install (wifiApNode);
   mobility.Install (wifiStaNode);
-    
+
   /* Internet stack*/
   InternetStackHelper stack;
   stack.Install (wifiApNode);
   stack.Install (wifiStaNode);
- 
+
   Ipv4AddressHelper address;
-    
+
   address.SetBase ("192.168.1.0", "255.255.255.0");
   Ipv4InterfaceContainer StaInterface;
   StaInterface = address.Assign (staDevice);
   Ipv4InterfaceContainer ApInterface;
   ApInterface = address.Assign (apDevice);
-    
+
   /* Setting applications */
   UdpServerHelper myServer (9);
   ApplicationContainer serverApp = myServer.Install (wifiStaNode.Get (0));
   serverApp.Start (Seconds (0.0));
-  serverApp.Stop (Seconds (simulationTime+1));
-    
+  serverApp.Stop (Seconds (simulationTime + 1));
+
   UdpClientHelper myClient (StaInterface.GetAddress (0), 9);
   myClient.SetAttribute ("MaxPackets", UintegerValue (4294967295u));
   myClient.SetAttribute ("Interval", TimeValue (Time ("0.00002"))); //packets/s
   myClient.SetAttribute ("PacketSize", UintegerValue (payloadSize));
-    
+
   ApplicationContainer clientApp = myClient.Install (wifiApNode.Get (0));
   clientApp.Start (Seconds (1.0));
-  clientApp.Stop (Seconds (simulationTime+1));
-    
-  Simulator::Stop (Seconds (simulationTime+1));
-    
+  clientApp.Stop (Seconds (simulationTime + 1));
+
+  Simulator::Stop (Seconds (simulationTime + 1));
+
   Simulator::Run ();
   Simulator::Destroy ();
-    
-  uint32_t totalPacketsThrough = DynamicCast<UdpServer>(serverApp.Get (0))->GetReceived ();
-  double throughput = totalPacketsThrough*payloadSize*8/(simulationTime*1000000.0);
+
+  uint32_t totalPacketsThrough = DynamicCast<UdpServer> (serverApp.Get (0))->GetReceived ();
+  double throughput = totalPacketsThrough * payloadSize * 8 / (simulationTime * 1000000.0);
   std::cout << "Throughput: " << throughput << " Mbit/s" << '\n';
-    
-    return 0;
+
+  return 0;
 }
diff -Naur ns-3.23/examples/wireless/simple-two-level-aggregation.cc ns-3.24/examples/wireless/simple-two-level-aggregation.cc
--- ns-3.23/examples/wireless/simple-two-level-aggregation.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/examples/wireless/simple-two-level-aggregation.cc	2015-09-15 11:18:44.000000000 -0700
@@ -102,8 +102,8 @@
   wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
   //We consider a constant bitrate since HT rate adaptation algorithms are not supported yet in the simulator
   wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
-                                "DataMode", StringValue ("OfdmRate65MbpsBW20MHz"),
-                                "ControlMode", StringValue ("OfdmRate6_5MbpsBW20MHz"));
+                                "DataMode", StringValue ("HtMcs7"),
+                                "ControlMode", StringValue ("HtMcs0"));
   HtWifiMacHelper mac = HtWifiMacHelper::Default ();
 
   Ssid ssid = Ssid ("simple-two-level-aggregation");
diff -Naur ns-3.23/examples/wireless/vht-wifi-network.cc ns-3.24/examples/wireless/vht-wifi-network.cc
--- ns-3.23/examples/wireless/vht-wifi-network.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.24/examples/wireless/vht-wifi-network.cc	2015-09-15 11:18:44.000000000 -0700
@@ -0,0 +1,219 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 SEBASTIEN DERONNE
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Sebastien Deronne <sebastien.deronne@gmail.com>
+ */
+
+#include "ns3/core-module.h"
+#include "ns3/network-module.h"
+#include "ns3/applications-module.h"
+#include "ns3/wifi-module.h"
+#include "ns3/mobility-module.h"
+#include "ns3/ipv4-global-routing-helper.h"
+#include "ns3/internet-module.h"
+
+// This is a simple example in order to show how to configure an IEEE 802.11ac Wi-Fi network.
+//
+// It ouputs the UDP or TCP goodput for every VHT bitrate value, which depends on the MCS value (0 to 9, where 9 is
+// forbidden when the channel width is 20 MHz), the channel width (20, 40, 80 or 160 MHz) and the guard interval (long
+// or short). The PHY bitrate is constant over all the simulation run. The user can also specify the distance between
+// the access point and the station: the larger the distance the smaller the goodput.
+//
+// The simulation assumes a single station in an infrastructure network:
+//
+//  STA     AP
+//    *     *
+//    |     |
+//   n1     n2
+//
+//Packets in this simulation aren't marked with a QosTag so they are considered
+//belonging to BestEffort Access Class (AC_BE).
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("vht-wifi-network");
+
+int main (int argc, char *argv[])
+{
+  bool udp = true;
+  double simulationTime = 10; //seconds
+  double distance = 1.0; //meters
+
+  CommandLine cmd;
+  cmd.AddValue ("distance", "Distance in meters between the station and the access point", distance);
+  cmd.AddValue ("simulationTime", "Simulation time in seconds", simulationTime);
+  cmd.AddValue ("udp", "UDP if set to 1, TCP otherwise", udp);
+  cmd.Parse (argc,argv);
+
+  std::cout << "MCS value" << "\t\t" << "Channel width" << "\t\t" << "short GI" << "\t\t" << "Throughput" << '\n';
+  for (int i = 0; i <= 9; i++) //MCS
+    {
+      for (int j = 20; j <= 160; ) //channel width
+        {
+          if (i == 9 && j == 20)
+            {
+              j *= 2;
+              continue;
+            }
+          for (int k = 0; k < 2; k++) //GI: 0 and 1
+            {
+              uint32_t payloadSize; //1500 byte IP packet
+              if (udp)
+                {
+                  payloadSize = 1472; //bytes
+                }
+              else
+                {
+                  payloadSize = 1448; //bytes
+                  Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (payloadSize));
+                }
+
+              NodeContainer wifiStaNode;
+              wifiStaNode.Create (1);
+              NodeContainer wifiApNode;
+              wifiApNode.Create (1);
+
+              YansWifiChannelHelper channel = YansWifiChannelHelper::Default ();
+              YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
+              phy.SetChannel (channel.Create ());
+
+              // Set guard interval
+              phy.Set ("ShortGuardEnabled", BooleanValue (k));
+
+              WifiHelper wifi = WifiHelper::Default ();
+              wifi.SetStandard (WIFI_PHY_STANDARD_80211ac);
+              VhtWifiMacHelper mac = VhtWifiMacHelper::Default ();
+                
+              StringValue DataRate = VhtWifiMacHelper::DataRateForMcs (i);
+              wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager","DataMode", DataRate,
+                                            "ControlMode", DataRate);
+                
+              Ssid ssid = Ssid ("ns3-80211ac");
+
+              mac.SetType ("ns3::StaWifiMac",
+                           "Ssid", SsidValue (ssid),
+                           "ActiveProbing", BooleanValue (false));
+
+              NetDeviceContainer staDevice;
+              staDevice = wifi.Install (phy, mac, wifiStaNode);
+
+              mac.SetType ("ns3::ApWifiMac",
+                           "Ssid", SsidValue (ssid));
+
+              NetDeviceContainer apDevice;
+              apDevice = wifi.Install (phy, mac, wifiApNode);
+
+              // Set channel width
+              Config::Set ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/ChannelWidth", UintegerValue (j));
+
+              // mobility.
+              MobilityHelper mobility;
+              Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
+
+              positionAlloc->Add (Vector (0.0, 0.0, 0.0));
+              positionAlloc->Add (Vector (distance, 0.0, 0.0));
+              mobility.SetPositionAllocator (positionAlloc);
+
+              mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+
+              mobility.Install (wifiApNode);
+              mobility.Install (wifiStaNode);
+
+              /* Internet stack*/
+              InternetStackHelper stack;
+              stack.Install (wifiApNode);
+              stack.Install (wifiStaNode);
+
+              Ipv4AddressHelper address;
+
+              address.SetBase ("192.168.1.0", "255.255.255.0");
+              Ipv4InterfaceContainer staNodeInterface;
+              Ipv4InterfaceContainer apNodeInterface;
+
+              staNodeInterface = address.Assign (staDevice);
+              apNodeInterface = address.Assign (apDevice);
+
+              /* Setting applications */
+              ApplicationContainer serverApp, sinkApp;
+              if (udp)
+                {
+                  //UDP flow
+                  UdpServerHelper myServer (9);
+                  serverApp = myServer.Install (wifiStaNode.Get (0));
+                  serverApp.Start (Seconds (0.0));
+                  serverApp.Stop (Seconds (simulationTime + 1));
+
+                  UdpClientHelper myClient (staNodeInterface.GetAddress (0), 9);
+                  myClient.SetAttribute ("MaxPackets", UintegerValue (4294967295u));
+                  myClient.SetAttribute ("Interval", TimeValue (Time ("0.00001"))); //packets/s
+                  myClient.SetAttribute ("PacketSize", UintegerValue (payloadSize));
+
+                  ApplicationContainer clientApp = myClient.Install (wifiApNode.Get (0));
+                  clientApp.Start (Seconds (1.0));
+                  clientApp.Stop (Seconds (simulationTime + 1));
+                }
+              else
+                {
+                  //TCP flow
+                  uint16_t port = 50000;
+                  Address apLocalAddress (InetSocketAddress (Ipv4Address::GetAny (), port));
+                  PacketSinkHelper packetSinkHelper ("ns3::TcpSocketFactory", apLocalAddress);
+                  sinkApp = packetSinkHelper.Install (wifiStaNode.Get (0));
+
+                  sinkApp.Start (Seconds (0.0));
+                  sinkApp.Stop (Seconds (simulationTime + 1));
+
+                  OnOffHelper onoff ("ns3::TcpSocketFactory",Ipv4Address::GetAny ());
+                  onoff.SetAttribute ("OnTime",  StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
+                  onoff.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
+                  onoff.SetAttribute ("PacketSize", UintegerValue (payloadSize));
+                  onoff.SetAttribute ("DataRate", DataRateValue (1000000000)); //bit/s
+                  ApplicationContainer apps;
+
+                  AddressValue remoteAddress (InetSocketAddress (staNodeInterface.GetAddress (0), port));
+                  onoff.SetAttribute ("Remote", remoteAddress);
+                  apps.Add (onoff.Install (wifiApNode.Get (0)));
+                  apps.Start (Seconds (1.0));
+                  apps.Stop (Seconds (simulationTime + 1));
+                }
+
+              Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
+
+              Simulator::Stop (Seconds (simulationTime + 1));
+              Simulator::Run ();
+              Simulator::Destroy ();
+
+              double throughput = 0;
+              if (udp)
+                {
+                  //UDP
+                  uint32_t totalPacketsThrough = DynamicCast<UdpServer> (serverApp.Get (0))->GetReceived ();
+                  throughput = totalPacketsThrough * payloadSize * 8 / (simulationTime * 1000000.0); //Mbit/s
+                }
+              else
+                {
+                  //TCP
+                  uint32_t totalPacketsThrough = DynamicCast<PacketSink> (sinkApp.Get (0))->GetTotalRx ();
+                  throughput = totalPacketsThrough * 8 / (simulationTime * 1000000.0); //Mbit/s
+                }
+              std::cout << i << "\t\t\t" << j << " MHz\t\t\t" << k << "\t\t\t" << throughput << " Mbit/s" << std::endl;
+            }
+          j *= 2;
+        }
+    }
+  return 0;
+}
diff -Naur ns-3.23/examples/wireless/wscript ns-3.24/examples/wireless/wscript
--- ns-3.23/examples/wireless/wscript	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/examples/wireless/wscript	2015-09-15 11:18:44.000000000 -0700
@@ -49,12 +49,18 @@
     obj = bld.create_ns3_program('ofdm-ht-validation', ['core', 'mobility', 'wifi', 'config-store', 'stats'])
     obj.source = 'ofdm-ht-validation.cc'
 
+    obj = bld.create_ns3_program('ofdm-vht-validation', ['core', 'mobility', 'wifi', 'config-store', 'stats'])
+    obj.source = 'ofdm-vht-validation.cc'
+
     obj = bld.create_ns3_program('wifi-hidden-terminal', ['internet', 'mobility', 'wifi', 'applications', 'propagation', 'flow-monitor'])
     obj.source = 'wifi-hidden-terminal.cc'
 
     obj = bld.create_ns3_program('ht-wifi-network', ['core','internet', 'mobility', 'wifi', 'applications', 'propagation'])
     obj.source = 'ht-wifi-network.cc'
 
+    obj = bld.create_ns3_program('vht-wifi-network', ['core','internet', 'mobility', 'wifi', 'applications', 'propagation'])
+    obj.source = 'vht-wifi-network.cc'
+
     obj = bld.create_ns3_program('wifi-timing-attributes', ['core','internet', 'mobility', 'wifi', 'applications', 'propagation'])
     obj.source = 'wifi-timing-attributes.cc'
 
diff -Naur ns-3.23/RELEASE_NOTES ns-3.24/RELEASE_NOTES
--- ns-3.23/RELEASE_NOTES	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/RELEASE_NOTES	2015-09-15 14:02:37.000000000 -0700
@@ -9,6 +9,84 @@
 Consult the file CHANGES.html for more detailed information about changed
 API and behavior across ns-3 releases.
 
+Release 3.24
+============
+
+Availability
+------------
+This release is available from:
+https://www.nsnam.org/release/ns-allinone-3.24.tar.bz2
+
+Supported platforms
+-------------------
+This release has been tested on the following platforms:
+- Ubuntu 15.04 (64 bit) with g++-4.9.2
+- Fedora Core 22 (32 bit) with g++-5.1.1
+- Fedora Core 21 (64 bit) with g++-4.9.2
+- Ubuntu 14.04 (64 bit) with g++-4.8.2
+- Ubuntu 12.04.4 (32/64 bit) with g++-4.6.3
+- CentOS/RHEL 6.7 (64-bit) with g++-4.4.7
+- OS X Yosemite 10.10.4 with Xcode 6.4 and Apple LLVM version 6.1.0
+- FreeBSD 10.1-RELEASE (64 bit) with clang-3.4.1
+
+New user-visible features
+-------------------------
+- (build system) Python 3 is now supported by waf and test runner programs
+- (wifi) 802.11ac Very High Throughput (VHT) physical layer modes are now 
+  supported.
+- (internet) permanent (static) ARP entries can be created for IPv4
+- (network) SimpleChannel allows per-NetDevice blacklists, in order to do hidden terminal testcases.
+- (documentation) TracedCallback function signatures now documented in Doxygen
+
+Bugs fixed
+----------
+- Bug 730 - Enabling fragmentation at run-time breaks simulation
+- Bug 1249 - doxygen comments on device-level SetMobility ()
+- Bug 1482 - mesh module was producing fatal error with ASCII and netanim traces
+- Bug 1557 - errors in function OpenFlowSwitchNetDevice::BufferFromPacket()
+- Bug 1681 - m_lastNavStart is assigned twice continuously
+- Bug 1736 - default dot11EDCATableMSDULifetime
+- Bug 1901 - mesh module producing malformed pcaps
+- Bug 1929 - TcpL4Protocol::Send must indicate the source address to routing (if known)
+- Bug 1982 - AODV and mesh modules use random variables before seeds can be set
+- Bug 2058 - TCP window update can shrink left edge of window
+- Bug 2063 - FdNetDevice::SendFrom assert does not account for headers correctly
+- Bug 2082 - Empirical RV fails if value provided in CDF function is negative
+- Bug 2093 - MultiModelSpectrumChannel::GetDevice only works for 0-th index
+- Bug 2096 - Wrong pcap information when MPDU aggregation is used
+- Bug 2104 - Sequence Number passed to QosUtilsMapSeqControlToUniqueInteger instead of Sequence Control
+- Bug 2108 - Erroneous implementation in InterferenceHelper
+- Bug 2119 - Fix memory leaks in FdNetDevice test due to non-executed events
+- Bug 2124 - UdpSocketImpl::ShutdownRecv doesn't stop the Ipv[4,6]EndPointDemux
+- Bug 2125 - subclasses must chain up to base class NotifyNewAggregate
+- Bug 2126 - LrWpanNetDevice silently accepts no mobility on the node
+- Bug 2127 - Scheduler benchmark utility works in first run only
+- Bug 2130 - Allow SimpleChannel to simulate hidden terminals
+- Bug 2132 - TcpL4Protocol sends a bad-formatted RST packet
+- Bug 2135 - TCP doesn't honor the socket's output interface
+- Bug 2136 - The usage of tid in wifi and wave module shall be "if (tid > 7)" rather than "if (tid >= 7)"
+- Bug 2138 - SimpleNetDevice could send overlapped packets
+- Bug 2143 - maybe-uninitialized warning
+- Bug 2146 - bug in WAVE channel coordination
+- Bug 2148 - Ipv6Interface::SetUp doesn't re-create the Link-Local addresses
+- Bug 2153 - Incorrect power limits in wifi power control algorithms
+- Bug 2154 - Incorrect power calculation in wifi power adaptation examples
+- Bug 2156 - Duplicate packets when using two level aggregation
+- Bug 2157 - OpenFlowSwitchNetDevice::BufferFromPacket setting eth_type incorrectly
+- Bug 2158 - OpenflowSwitchNetDevice flooding bug
+- Bug 2165 - server replies to SYN (with option TS) with a SYNACK (with option TS) also if the attribute Timestamp is false
+- Bug 2166 - SteadyStateRandomWaypointMobilityModel directs the node to the ground
+- Bug 2170 - AnimationInterface outputs improperly formed XML
+- Bug 2171 - power-adaptation-distance.cc:202:22: error: call to 'pow' is ambiguous
+- Bug 2173 - WifiInformationElement::DeserializeIfPresent attempts to read beyond the end of buffer
+- Bug 2174 - m_rWnd not updated when segments without ACK are received
+- Bug 2177 - Ipv6ExtensionFragmentHeader length is initialized to a wrong value.
+
+Known issues
+------------
+In general, known issues are tracked on the project tracker available
+at http://www.nsnam.org/bugzilla/
+
 Release 3.23
 ============
 
diff -Naur ns-3.23/src/antenna/bindings/modulegen__gcc_ILP32.py ns-3.24/src/antenna/bindings/modulegen__gcc_ILP32.py
--- ns-3.23/src/antenna/bindings/modulegen__gcc_ILP32.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/antenna/bindings/modulegen__gcc_ILP32.py	2015-09-15 11:18:44.000000000 -0700
@@ -279,11 +279,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3Hasher_methods(root_module, cls):
@@ -927,11 +922,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
diff -Naur ns-3.23/src/antenna/bindings/modulegen__gcc_LP64.py ns-3.24/src/antenna/bindings/modulegen__gcc_LP64.py
--- ns-3.23/src/antenna/bindings/modulegen__gcc_LP64.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/antenna/bindings/modulegen__gcc_LP64.py	2015-09-15 11:18:44.000000000 -0700
@@ -279,11 +279,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3Hasher_methods(root_module, cls):
@@ -927,11 +922,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
diff -Naur ns-3.23/src/aodv/bindings/modulegen__gcc_ILP32.py ns-3.24/src/aodv/bindings/modulegen__gcc_ILP32.py
--- ns-3.23/src/aodv/bindings/modulegen__gcc_ILP32.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/aodv/bindings/modulegen__gcc_ILP32.py	2015-09-15 11:18:44.000000000 -0700
@@ -373,6 +373,12 @@
     register_types_ns3_Hash(nested_module)
     
     
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
+    
     ## Register a nested module for the namespace aodv
     
     nested_module = module.add_cpp_namespace('aodv')
@@ -413,6 +419,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_types_ns3_aodv(module):
     root_module = module.get_root()
     
@@ -729,17 +742,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -761,11 +774,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -775,16 +783,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -1022,14 +1020,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -1090,11 +1092,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3EventId_methods(root_module, cls):
@@ -2281,7 +2278,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -2373,10 +2370,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -4765,6 +4762,10 @@
     cls.add_method('SetQosEosp', 
                    'void', 
                    [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosMeshControlPresent() [member function]
+    cls.add_method('SetQosMeshControlPresent', 
+                   'void', 
+                   [])
     ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosNoAck() [member function]
     cls.add_method('SetQosNoAck', 
                    'void', 
@@ -4777,6 +4778,10 @@
     cls.add_method('SetQosNoEosp', 
                    'void', 
                    [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosNoMeshControlPresent() [member function]
+    cls.add_method('SetQosNoMeshControlPresent', 
+                   'void', 
+                   [])
     ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosNormalAck() [member function]
     cls.add_method('SetQosNormalAck', 
                    'void', 
@@ -4931,6 +4936,10 @@
     cls.add_method('PrintArpCache', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')])
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Remove(ns3::ArpCache::Entry * entry) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::ArpCache::Entry *', 'entry')])
     ## arp-cache.h (module 'internet'): void ns3::ArpCache::SetAliveTimeout(ns3::Time aliveTimeout) [member function]
     cls.add_method('SetAliveTimeout', 
                    'void', 
@@ -4967,6 +4976,10 @@
     cls.add_constructor([param('ns3::ArpCache::Entry const &', 'arg0')])
     ## arp-cache.h (module 'internet'): ns3::ArpCache::Entry::Entry(ns3::ArpCache * arp) [constructor]
     cls.add_constructor([param('ns3::ArpCache *', 'arp')])
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::ClearPendingPacket() [member function]
+    cls.add_method('ClearPendingPacket', 
+                   'void', 
+                   [])
     ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::ClearRetries() [member function]
     cls.add_method('ClearRetries', 
                    'void', 
@@ -5007,6 +5020,10 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## arp-cache.h (module 'internet'): bool ns3::ArpCache::Entry::IsPermanent() [member function]
+    cls.add_method('IsPermanent', 
+                   'bool', 
+                   [])
     ## arp-cache.h (module 'internet'): bool ns3::ArpCache::Entry::IsWaitReply() [member function]
     cls.add_method('IsWaitReply', 
                    'bool', 
@@ -5019,6 +5036,10 @@
     cls.add_method('MarkDead', 
                    'void', 
                    [])
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::MarkPermanent() [member function]
+    cls.add_method('MarkPermanent', 
+                   'void', 
+                   [])
     ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::MarkWaitReply(ns3::Ptr<ns3::Packet> waiting) [member function]
     cls.add_method('MarkWaitReply', 
                    'void', 
@@ -5027,6 +5048,10 @@
     cls.add_method('SetIpv4Address', 
                    'void', 
                    [param('ns3::Ipv4Address', 'destination')])
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::SetMacAddresss(ns3::Address macAddress) [member function]
+    cls.add_method('SetMacAddresss', 
+                   'void', 
+                   [param('ns3::Address', 'macAddress')])
     ## arp-cache.h (module 'internet'): bool ns3::ArpCache::Entry::UpdateWaitReply(ns3::Ptr<ns3::Packet> waiting) [member function]
     cls.add_method('UpdateWaitReply', 
                    'bool', 
@@ -5136,11 +5161,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -5250,10 +5285,10 @@
                    'double', 
                    [], 
                    is_virtual=True)
-    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
     cls.add_method('Interpolate', 
                    'double', 
-                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
                    visibility='private', is_virtual=True)
     ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
     cls.add_method('Validate', 
@@ -8203,6 +8238,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     register_functions_ns3_aodv(module.get_submodule('aodv'), root_module)
     return
 
@@ -8216,6 +8252,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def register_functions_ns3_aodv(module, root_module):
     return
 
diff -Naur ns-3.23/src/aodv/bindings/modulegen__gcc_LP64.py ns-3.24/src/aodv/bindings/modulegen__gcc_LP64.py
--- ns-3.23/src/aodv/bindings/modulegen__gcc_LP64.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/aodv/bindings/modulegen__gcc_LP64.py	2015-09-15 11:18:44.000000000 -0700
@@ -373,6 +373,12 @@
     register_types_ns3_Hash(nested_module)
     
     
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
+    
     ## Register a nested module for the namespace aodv
     
     nested_module = module.add_cpp_namespace('aodv')
@@ -413,6 +419,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_types_ns3_aodv(module):
     root_module = module.get_root()
     
@@ -729,17 +742,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -761,11 +774,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -775,16 +783,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -1022,14 +1020,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -1090,11 +1092,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3EventId_methods(root_module, cls):
@@ -2281,7 +2278,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -2373,10 +2370,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -4765,6 +4762,10 @@
     cls.add_method('SetQosEosp', 
                    'void', 
                    [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosMeshControlPresent() [member function]
+    cls.add_method('SetQosMeshControlPresent', 
+                   'void', 
+                   [])
     ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosNoAck() [member function]
     cls.add_method('SetQosNoAck', 
                    'void', 
@@ -4777,6 +4778,10 @@
     cls.add_method('SetQosNoEosp', 
                    'void', 
                    [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosNoMeshControlPresent() [member function]
+    cls.add_method('SetQosNoMeshControlPresent', 
+                   'void', 
+                   [])
     ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosNormalAck() [member function]
     cls.add_method('SetQosNormalAck', 
                    'void', 
@@ -4931,6 +4936,10 @@
     cls.add_method('PrintArpCache', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')])
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Remove(ns3::ArpCache::Entry * entry) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::ArpCache::Entry *', 'entry')])
     ## arp-cache.h (module 'internet'): void ns3::ArpCache::SetAliveTimeout(ns3::Time aliveTimeout) [member function]
     cls.add_method('SetAliveTimeout', 
                    'void', 
@@ -4967,6 +4976,10 @@
     cls.add_constructor([param('ns3::ArpCache::Entry const &', 'arg0')])
     ## arp-cache.h (module 'internet'): ns3::ArpCache::Entry::Entry(ns3::ArpCache * arp) [constructor]
     cls.add_constructor([param('ns3::ArpCache *', 'arp')])
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::ClearPendingPacket() [member function]
+    cls.add_method('ClearPendingPacket', 
+                   'void', 
+                   [])
     ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::ClearRetries() [member function]
     cls.add_method('ClearRetries', 
                    'void', 
@@ -5007,6 +5020,10 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## arp-cache.h (module 'internet'): bool ns3::ArpCache::Entry::IsPermanent() [member function]
+    cls.add_method('IsPermanent', 
+                   'bool', 
+                   [])
     ## arp-cache.h (module 'internet'): bool ns3::ArpCache::Entry::IsWaitReply() [member function]
     cls.add_method('IsWaitReply', 
                    'bool', 
@@ -5019,6 +5036,10 @@
     cls.add_method('MarkDead', 
                    'void', 
                    [])
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::MarkPermanent() [member function]
+    cls.add_method('MarkPermanent', 
+                   'void', 
+                   [])
     ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::MarkWaitReply(ns3::Ptr<ns3::Packet> waiting) [member function]
     cls.add_method('MarkWaitReply', 
                    'void', 
@@ -5027,6 +5048,10 @@
     cls.add_method('SetIpv4Address', 
                    'void', 
                    [param('ns3::Ipv4Address', 'destination')])
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::SetMacAddresss(ns3::Address macAddress) [member function]
+    cls.add_method('SetMacAddresss', 
+                   'void', 
+                   [param('ns3::Address', 'macAddress')])
     ## arp-cache.h (module 'internet'): bool ns3::ArpCache::Entry::UpdateWaitReply(ns3::Ptr<ns3::Packet> waiting) [member function]
     cls.add_method('UpdateWaitReply', 
                    'bool', 
@@ -5136,11 +5161,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -5250,10 +5285,10 @@
                    'double', 
                    [], 
                    is_virtual=True)
-    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
     cls.add_method('Interpolate', 
                    'double', 
-                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
                    visibility='private', is_virtual=True)
     ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
     cls.add_method('Validate', 
@@ -8203,6 +8238,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     register_functions_ns3_aodv(module.get_submodule('aodv'), root_module)
     return
 
@@ -8216,6 +8252,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def register_functions_ns3_aodv(module, root_module):
     return
 
diff -Naur ns-3.23/src/aodv/model/aodv-neighbor.cc ns-3.24/src/aodv/model/aodv-neighbor.cc
--- ns-3.23/src/aodv/model/aodv-neighbor.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/aodv/model/aodv-neighbor.cc	2015-09-15 11:18:44.000000000 -0700
@@ -149,7 +149,7 @@
        i != m_arp.end (); ++i)
     {
       ArpCache::Entry * entry = (*i)->Lookup (addr);
-      if (entry != 0 && entry->IsAlive () && !entry->IsExpired ())
+      if (entry != 0 && (entry->IsAlive () || entry->IsPermanent ()) && !entry->IsExpired ())
         {
           hwaddr = Mac48Address::ConvertFrom (entry->GetMacAddress ());
           break;
diff -Naur ns-3.23/src/aodv/model/aodv-routing-protocol.cc ns-3.24/src/aodv/model/aodv-routing-protocol.cc
--- ns-3.23/src/aodv/model/aodv-routing-protocol.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/aodv/model/aodv-routing-protocol.cc	2015-09-15 11:18:44.000000000 -0700
@@ -65,7 +65,7 @@
 
   static TypeId GetTypeId ()
   {
-    static TypeId tid = TypeId ("ns3::aodv::DeferredRouteOutputTag").SetParent<Tag> ()
+    static TypeId tid = TypeId ("ns3::aodv::DeferredRouteOutputTag")
       .SetParent<Tag> ()
       .SetGroupName("Aodv")
       .AddConstructor<DeferredRouteOutputTag> ()
diff -Naur ns-3.23/src/aodv/test/aodv-id-cache-test-suite.cc ns-3.24/src/aodv/test/aodv-id-cache-test-suite.cc
--- ns-3.23/src/aodv/test/aodv-id-cache-test-suite.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/aodv/test/aodv-id-cache-test-suite.cc	2015-09-15 11:18:44.000000000 -0700
@@ -37,11 +37,14 @@
 // Tests
 //-----------------------------------------------------------------------------
 /// Unit test for id cache
-struct IdCacheTest : public TestCase
+class IdCacheTest : public TestCase
 {
+public:
   IdCacheTest () : TestCase ("Id Cache"), cache (Seconds (10))
   {}
   virtual void DoRun ();
+
+private:
   void CheckTimeout1 ();
   void CheckTimeout2 ();
   void CheckTimeout3 ();
@@ -93,7 +96,7 @@
 class IdCacheTestSuite : public TestSuite
 {
 public:
-  IdCacheTestSuite () : TestSuite ("routing-id-cache", UNIT)
+  IdCacheTestSuite () : TestSuite ("aodv-routing-id-cache", UNIT)
   {
     AddTestCase (new IdCacheTest, TestCase::QUICK);
   }
diff -Naur ns-3.23/src/aodv/test/aodv-regression.cc ns-3.24/src/aodv/test/aodv-regression.cc
--- ns-3.23/src/aodv/test/aodv-regression.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/aodv/test/aodv-regression.cc	2015-09-15 11:18:44.000000000 -0700
@@ -20,7 +20,6 @@
 
 #include "aodv-regression.h"
 #include "bug-772.h"
-#include "loopback.h"
 
 #include "ns3/simulator.h"
 #include "ns3/mobility-helper.h"
@@ -32,19 +31,18 @@
 #include "ns3/internet-stack-helper.h"
 #include "ns3/ipv4-address-helper.h"
 #include "ns3/abort.h"
-#include "ns3/udp-echo-helper.h"
 #include "ns3/mobility-model.h"
 #include "ns3/pcap-file.h"
 #include "ns3/aodv-helper.h"
-#include "ns3/v4ping-helper.h"
 #include "ns3/nqos-wifi-mac-helper.h"
 #include "ns3/config.h"
 #include "ns3/pcap-test.h"
 #include "ns3/rng-seed-manager.h"
+#include "ns3/icmpv4.h"
 #include <sstream>
 
 using namespace ns3;
-using namespace aodv;
+
 //-----------------------------------------------------------------------------
 // Test suite
 //-----------------------------------------------------------------------------
@@ -56,17 +54,12 @@
     SetDataDir (NS_TEST_SOURCEDIR);
     // General RREQ-RREP-RRER test case
     AddTestCase (new ChainRegressionTest ("aodv-chain-regression-test"), TestCase::QUICK);
-    /// \internal
-    /// \bugid{606} test case, should crash if bug is not fixed
+    // \bugid{606} test case, should crash if bug is not fixed
     AddTestCase (new ChainRegressionTest ("bug-606-test", Seconds (10), 3, Seconds (1)), TestCase::QUICK);
-    /// \internal
-    /// \bugid{772} UDP test case
+    // \bugid{772} UDP test case
     AddTestCase (new Bug772ChainTest ("udp-chain-test", "ns3::UdpSocketFactory", Seconds (3), 10), TestCase::QUICK);
-    /// \internal
-    /// \bugid{772} TCP test case
+    // \bugid{772} TCP test case
     AddTestCase (new Bug772ChainTest ("tcp-chain-test", "ns3::TcpSocketFactory", Seconds (3), 10), TestCase::QUICK);
-    // Ping loopback test case
-    AddTestCase (new LoopbackTestCase (), TestCase::QUICK);
   }
 } g_aodvRegressionTestSuite;
  
@@ -81,7 +74,8 @@
   m_time (t),
   m_size (size),
   m_step (120),
-  m_arpAliveTimeout (arpAliveTimeout)
+  m_arpAliveTimeout (arpAliveTimeout),
+  m_seq (0)
 {
 }
 
@@ -91,6 +85,35 @@
 }
 
 void
+ChainRegressionTest::SendPing ()
+{
+  if (Simulator::Now () >= m_time)
+    {
+      return;
+    }
+
+  Ptr<Packet> p = Create<Packet> ();
+  Icmpv4Echo echo;
+  echo.SetSequenceNumber (m_seq);
+  m_seq++;
+  echo.SetIdentifier (0);
+
+  Ptr<Packet> dataPacket = Create<Packet> (56);
+  echo.SetData (dataPacket);
+  p->AddHeader (echo);
+  Icmpv4Header header;
+  header.SetType (Icmpv4Header::ECHO);
+  header.SetCode (0);
+  if (Node::ChecksumEnabled ())
+    {
+      header.EnableChecksum ();
+    }
+  p->AddHeader (header);
+  m_socket->Send (p, 0);
+  Simulator::Schedule (Seconds (1), &ChainRegressionTest::SendPing, this);
+}
+
+void
 ChainRegressionTest::DoRun ()
 {
   RngSeedManager::SetSeed (12345);
@@ -173,11 +196,14 @@
   Ipv4InterfaceContainer interfaces = address.Assign (devices);
 
   // 3. Setup ping
-  V4PingHelper ping (interfaces.GetAddress (m_size - 1));
-  ping.SetAttribute ("Verbose", BooleanValue (false)); // don't need verbose ping in regression test
-  ApplicationContainer p = ping.Install (m_nodes->Get (0));
-  p.Start (Seconds (0));
-  p.Stop (m_time);
+  m_socket = Socket::CreateSocket (m_nodes->Get (0), TypeId::LookupByName ("ns3::Ipv4RawSocketFactory"));
+  m_socket->SetAttribute ("Protocol", UintegerValue (1)); // icmp
+  InetSocketAddress src = InetSocketAddress (Ipv4Address::GetAny (), 0);
+  m_socket->Bind (src);
+  InetSocketAddress dst = InetSocketAddress (interfaces.GetAddress (m_size - 1), 0);
+  m_socket->Connect (dst);
+
+  SendPing ();
 
   // 4. write PCAP
   wifiPhy.EnablePcapAll (CreateTempDirFilename (m_prefix));
diff -Naur ns-3.23/src/aodv/test/aodv-regression.h ns-3.24/src/aodv/test/aodv-regression.h
--- ns-3.23/src/aodv/test/aodv-regression.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/aodv/test/aodv-regression.h	2015-09-15 11:18:44.000000000 -0700
@@ -23,6 +23,7 @@
 
 #include "ns3/test.h"
 #include "ns3/nstime.h"
+#include "ns3/socket.h"
 #include "ns3/node-container.h"
 
 using namespace ns3;
@@ -177,6 +178,10 @@
   const double m_step;
   /// ARP alive timeout
   const Time m_arpAliveTimeout;
+  /// Socket
+  Ptr<Socket> m_socket;
+  /// Sequence number
+  uint16_t m_seq;
 
   /// Create test topology
   void CreateNodes ();
@@ -186,6 +191,8 @@
   void CheckResults ();
   /// Go
   void DoRun ();
+  /// Send one ping
+  void SendPing ();
 };
 
 #endif /* AODV_REGRESSION_H */
diff -Naur ns-3.23/src/aodv/test/bug-772.cc ns-3.24/src/aodv/test/bug-772.cc
--- ns-3.23/src/aodv/test/bug-772.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/aodv/test/bug-772.cc	2015-09-15 11:18:44.000000000 -0700
@@ -33,17 +33,14 @@
 #include "ns3/internet-stack-helper.h"
 #include "ns3/ipv4-address-helper.h"
 #include "ns3/abort.h"
-#include "ns3/udp-echo-helper.h"
 #include "ns3/mobility-model.h"
 #include "ns3/pcap-file.h"
 #include "ns3/aodv-helper.h"
 #include "ns3/v4ping-helper.h"
 #include "ns3/nqos-wifi-mac-helper.h"
 #include "ns3/config.h"
-#include "ns3/on-off-helper.h"
 #include "ns3/inet-socket-address.h"
 #include "ns3/data-rate.h"
-#include "ns3/packet-sink-helper.h"
 #include "ns3/pcap-test.h"
 #include <sstream>
 
@@ -59,8 +56,8 @@
   m_proto (proto),
   m_time (t),
   m_size (size),
-  m_step (120)
-{
+  m_step (120),
+  m_port (9){
 }
 
 Bug772ChainTest::~Bug772ChainTest ()
@@ -69,6 +66,17 @@
 }
 
 void
+Bug772ChainTest::SendData (Ptr<Socket> socket)
+{
+  if (Simulator::Now () < m_time)
+    {
+      socket->Send (Create<Packet> (1000));
+      Simulator::ScheduleWithContext (socket->GetNode ()->GetId (), Seconds (0.125),
+                                      &Bug772ChainTest::SendData, this, socket);
+    }
+}
+
+void
 Bug772ChainTest::DoRun ()
 {
   RngSeedManager::SetSeed (12345);
@@ -144,16 +152,17 @@
   Ipv4InterfaceContainer interfaces = address.Assign (devices);
 
   // 3. Setup UDP source and sink
-  uint16_t port = 9; // Discard port (RFC 863)
-  OnOffHelper onoff (m_proto, Address (InetSocketAddress (interfaces.GetAddress (m_size-1), port)));
-  onoff.SetConstantRate (DataRate (64000));
-  onoff.SetAttribute ("PacketSize", UintegerValue (1000));
-  ApplicationContainer app = onoff.Install (m_nodes->Get (0));
-  app.Start (Seconds (1.0));
-  app.Stop (m_time);
-  PacketSinkHelper sink (m_proto, Address (InetSocketAddress (Ipv4Address::GetAny (), port)));
-  app = sink.Install (m_nodes->Get (m_size - 1));
-  app.Start (Seconds (0.0));
+  m_sendSocket = Socket::CreateSocket (m_nodes->Get (0), TypeId::LookupByName (m_proto));
+  m_sendSocket->Bind ();
+  m_sendSocket->Connect (InetSocketAddress (interfaces.GetAddress (m_size-1), m_port));
+  m_sendSocket->SetAllowBroadcast (true);
+  Simulator::ScheduleWithContext (m_sendSocket->GetNode ()->GetId (), Seconds (1.0),
+                                  &Bug772ChainTest::SendData, this, m_sendSocket);
+
+  m_recvSocket = Socket::CreateSocket (m_nodes->Get (m_size - 1), TypeId::LookupByName (m_proto));
+  m_recvSocket->Bind (InetSocketAddress (Ipv4Address::GetAny (), m_port));
+  m_recvSocket->Listen ();
+  m_recvSocket->ShutdownSend ();
 
   // 4. write PCAP on the first and last nodes only
   wifiPhy.EnablePcap (CreateTempDirFilename (m_prefix), devices.Get (0));
diff -Naur ns-3.23/src/aodv/test/bug-772.h ns-3.24/src/aodv/test/bug-772.h
--- ns-3.23/src/aodv/test/bug-772.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/aodv/test/bug-772.h	2015-09-15 11:18:44.000000000 -0700
@@ -24,6 +24,7 @@
 #include "ns3/test.h"
 #include "ns3/nstime.h"
 #include "ns3/node-container.h"
+#include "ns3/socket.h"
 
 using namespace ns3;
 
@@ -62,6 +63,8 @@
   const uint32_t m_size;
   /// Chain step, meters
   const double m_step;
+  /// port number
+  const uint16_t m_port;
 
   /// Create test topology
   void CreateNodes ();
@@ -71,6 +74,17 @@
   void CheckResults ();
   /// Go
   void DoRun ();
+
+  /// Receiving socket
+  Ptr<Socket> m_recvSocket;
+  /// Transmitting socket
+  Ptr<Socket> m_sendSocket;
+
+  /**
+   * Send data
+   * \param socket the sending socket
+   */
+  void SendData (Ptr<Socket> socket);
 };
 
 #endif /* BUG_772_H */
diff -Naur ns-3.23/src/aodv/test/loopback.cc ns-3.24/src/aodv/test/loopback.cc
--- ns-3.23/src/aodv/test/loopback.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/aodv/test/loopback.cc	2015-09-15 11:18:44.000000000 -0700
@@ -18,8 +18,10 @@
  * Authors: Pavel Boyko <boyko@iitp.ru>
  */
 
-#include "loopback.h"
+#include "ns3/test.h"
 #include "ns3/simulator.h"
+#include "ns3/socket-factory.h"
+#include "ns3/udp-socket-factory.h"
 #include "ns3/mobility-helper.h"
 #include "ns3/double.h"
 #include "ns3/uinteger.h"
@@ -45,12 +47,66 @@
 namespace aodv
 {
 
-static uint32_t g_count (0);
+/**
+ * \ingroup aodv
+ *
+ * \brief AODV loopback UDP echo test case
+ */
+class LoopbackTestCase : public TestCase
+{
+  uint32_t m_count; //!< number of packet received;
+  Ptr<Socket> m_txSocket;
+  Ptr<Socket> m_echoSocket;
+  Ptr<Socket> m_rxSocket;
+  uint16_t m_echoSendPort;
+  uint16_t m_echoReplyPort;
+
+  void SendData (Ptr<Socket> socket);
+  void ReceivePkt (Ptr<Socket> socket);
+  void EchoData (Ptr<Socket> socket);
+
+public:
+  LoopbackTestCase ();
+  void DoRun ();
+};
 
-static void 
-PingRtt (std::string context, Time rtt)
+LoopbackTestCase::LoopbackTestCase () :
+    TestCase ("UDP Echo 127.0.0.1 test"), m_count (0)
 {
-  g_count++;
+  m_echoSendPort = 1233;
+  m_echoReplyPort = 1234;
+}
+
+void LoopbackTestCase::ReceivePkt (Ptr<Socket> socket)
+{
+  Ptr<Packet> receivedPacket = socket->Recv (std::numeric_limits<uint32_t>::max (), 0);
+
+  m_count ++;
+}
+
+void
+LoopbackTestCase::EchoData (Ptr<Socket> socket)
+{
+  Address from;
+  Ptr<Packet> receivedPacket = socket->RecvFrom (std::numeric_limits<uint32_t>::max (), 0, from);
+
+  Ipv4Address src = InetSocketAddress::ConvertFrom (from).GetIpv4 ();
+  Address to = InetSocketAddress (src, m_echoReplyPort);
+
+  receivedPacket->RemoveAllPacketTags ();
+  receivedPacket->RemoveAllByteTags ();
+
+  socket->SendTo (receivedPacket, 0, to);
+}
+
+void
+LoopbackTestCase::SendData (Ptr<Socket> socket)
+{
+  Address realTo = InetSocketAddress (Ipv4Address::GetLoopback (), m_echoSendPort);
+  socket->SendTo (Create<Packet> (123), 0, realTo);
+
+  Simulator::ScheduleWithContext (socket->GetNode ()->GetId (), Seconds (1.0),
+                                  &LoopbackTestCase::SendData, this, socket);
 }
 
 void
@@ -80,23 +136,49 @@
   address.SetBase ("10.1.1.0", "255.255.255.0");
   Ipv4InterfaceContainer interfaces = address.Assign (devices);
 
-  // Setup ping
-  Ptr<V4Ping> ping = CreateObject<V4Ping> ();
-  ping->SetAttribute ("Remote", Ipv4AddressValue (Ipv4Address::GetLoopback ()));
-  nodes.Get (0)->AddApplication (ping);
-  ping->SetStartTime (Seconds (0));
-  ping->SetStopTime (Seconds (4));
-  Names::Add ("ping", ping);
-  Config::Connect ("/Names/ping/Rtt", MakeCallback (&PingRtt));
+  // Setup echos
+  Ptr<SocketFactory> socketFactory = nodes.Get (0)->GetObject<UdpSocketFactory> ();
+  m_rxSocket = socketFactory->CreateSocket ();
+  m_rxSocket->Bind (InetSocketAddress (Ipv4Address::GetLoopback (), m_echoReplyPort));
+  m_rxSocket->SetRecvCallback (MakeCallback (&LoopbackTestCase::ReceivePkt, this));
+
+  m_echoSocket = socketFactory->CreateSocket ();
+  m_echoSocket->Bind (InetSocketAddress (Ipv4Address::GetLoopback (), m_echoSendPort));
+  m_echoSocket->SetRecvCallback (MakeCallback (&LoopbackTestCase::EchoData, this));
+
+  m_txSocket = socketFactory->CreateSocket ();
+
+  Simulator::ScheduleWithContext (m_txSocket->GetNode ()->GetId (), Seconds (1.0),
+                                  &LoopbackTestCase::SendData, this, m_txSocket);
 
   // Run 
   Simulator::Stop (Seconds (5));
   Simulator::Run ();
+
+  m_txSocket->Close ();
+  m_echoSocket->Close ();
+  m_rxSocket->Close ();
+
   Simulator::Destroy ();
 
   // Check that 4 packets delivered
-  NS_TEST_ASSERT_MSG_EQ (g_count, 4, "Exactly 4 ping replies must be delivered.");
+  NS_TEST_ASSERT_MSG_EQ (m_count, 4, "Exactly 4 echo replies must be delivered.");
 }
 
+//-----------------------------------------------------------------------------
+// Test suite
+//-----------------------------------------------------------------------------
+class AodvLoopbackTestSuite : public TestSuite
+{
+public:
+  AodvLoopbackTestSuite () : TestSuite ("routing-aodv-loopback", SYSTEM)
+  {
+    SetDataDir (NS_TEST_SOURCEDIR);
+    // UDP Echo loopback test case
+    AddTestCase (new LoopbackTestCase (), TestCase::QUICK);
+  }
+} g_aodvLoopbackTestSuite;
+
+
 }
 }
diff -Naur ns-3.23/src/aodv/test/loopback.h ns-3.24/src/aodv/test/loopback.h
--- ns-3.23/src/aodv/test/loopback.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/aodv/test/loopback.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,45 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2010 IITP RAS
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Authors: Pavel Boyko <boyko@iitp.ru>
- */
-
-#ifndef AODV_LOOPBACK_H
-#define AODV_LOOPBACK_H
-#include "ns3/test.h"
-#include <string>
-
-namespace ns3
-{
-namespace aodv
-{
-/**
- * \ingroup aodv
- * 
- * \brief AODV ping 127.0.0.1 test case
- */
-struct LoopbackTestCase : public TestCase
-{
-  LoopbackTestCase () : TestCase ("Ping 127.0.0.1 test") {}
-  /// Run test
-  void DoRun ();
-};
-
-}
-}
-
-#endif /* AODV_LOOPBACK_H */
diff -Naur ns-3.23/src/aodv/test/tcp-chain-test-0-0.pcap ns-3.24/src/aodv/test/tcp-chain-test-0-0.pcap
--- ns-3.23/src/aodv/test/tcp-chain-test-0-0.pcap	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/aodv/test/tcp-chain-test-0-0.pcap	2015-09-15 11:18:44.000000000 -0700
@@ -1,259 +1,501 @@
-ÔÃ²¡          ÿÿ  i       à.  T   T   €  ÿÿÿÿÿÿ            ªª    E  0      
+ÔÃ²¡          ÿÿ  i       ˆ  T   T   €  ÿÿÿÿÿÿ            ªª    E  0      
 
 ÿŽŽ      
-    
-  Ð        ¨H T   T   €  ÿÿÿÿÿÿ            ªª    E  0      
-
-ÿŽŽ      
-    
-  Ð           X   X   €  ÿÿÿÿÿÿ           ªª    E  4     
+   
+  Ð        X  X   X   €  ÿÿÿÿÿÿ           ªª    E  4     
 
 ÿŽŽ    (     
 
     
-          `   X   X   €  ÿÿÿÿÿÿ           ªª    E  4     
+           è3  X   X   €  ÿÿÿÿÿÿ            ªª    E  4      
 
 ÿŽŽ    (    
 
     
-           @   @   €<                  ªª           
+           z @   @   €<                 ªª           
      
-       €       Ô€               @   @   €  ÿÿÿÿÿÿ          0 ªª           
+        	       Ô€               ¶ @   @   €  ÿÿÿÿÿÿ            ªª           
 ÿÿÿÿÿÿ
-       4 @   @   €<                  ªª           
+        Ø @   @   €<                  ªª           
      
-       à       Ô€               T   T   €<                @ ªª    E  0      
+        „       Ô€               d T   T   €<                0 ªª    E  0      
 
 ŽŽ     
 
     
-  ±       !       Ô€              o @   @   €  ÿÿÿÿÿÿ          0 ªª           
+  ³        t       Ô€               æ @   @   €  ÿÿÿÿÿÿ          0 ªª           
 ÿÿÿÿÿÿ
-       º @   @   €<                P ªª           
+        L @   @   €<                @ ªª           
      
-       Ê       Ô€               \   \   €<                @ ªª    E  8    @  
+        \       Ô€               ª \   \   €<                @ ªª    E  8    @  
 
 
 À 	        �€     
-  è              é       Ô€              í' @   @   €  ÿÿÿÿÿÿ          ` ªª           
+                   {        Ô€               ( @   @   €  ÿÿÿÿÿÿ          P ªª           
 ÿÿÿÿÿÿ
-       ¼(       Ô€              Ì) \   \   €<                p ªª    E  8    ?  
+        N)       Ô€               ^* \   \   €<                ` ªª    E  8    ?  
 
 
 À 	        �€     
-  è              	ž       Ô€              ¿ž \   \   €<                € ªª    E  8    8  
+                   ¤ž       Ô€               ZŸ \   \   €<                p ªª    E  8    8  
 
 
  	À       �€     
-  J  è          Ïž       Ô€              Ÿ X   X   €<                P ªª    E  4   @  
+   b               jŸ       Ô€               ¸Ÿ X   X   €<                P ªª    E  4   @  
 
 
 À 	      €€     
-  R  J         êŸ       Ô€              Ò  X   X   €<                � ªª    E  4   ?  
+   j   b          …        Ô€               I¡ X   X   €<                € ªª    E  4   ?  
 
 
 À 	      €€     
-  R  J         Hè p  p  €<                ` ªª    E L   @  
+   j   b             p  p  €<                ` ªª    E L   @  
 
 
 À 	      €€     
-  e  J                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Üë       Ô€              Vï p  p  €<                  ªª    E L   ?  
+  è   b                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ”        Ô€                p  p  €<                � ªª    E L   ?  
 
 
 À 	      €€     
-  e  J                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 '       Ô€              Ù X   X   €<                ° ªª    E  4   8  
+  è   b                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 X  T   T   €  ÿÿÿÿÿÿ          p ªª    E  0     
+
+ÿŽŽ      
+   
+  Ð       )        Ô€              Ð)  X   X   €<                  ªª    E  4   8  
 
 
  	À     €z    
-  m  e         é       Ô€              7 (  (  €<                p ªª    E    @  
+  ð  è         à)        Ô€              .*  (  (  €<                € ªª    E    @  
 
 
 À 	     €€     
-  o  m                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         l       Ô€              ª (  (  €<                À ªª    E    ?  
+  ò  ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         c-        Ô€              ¼0  (  (  €<                ° ªª    E    ?  
 
 
 À 	     €€     
-  o  m                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         �Ð p  p  €<                € ªª    E L   @  
+  ò  ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         °;  T   T   €  ÿÿÿÿÿÿ          À ªª    E  0     
+
+ÿŽŽ      
+    
+  Ð       p @   @   €  ÿÿÿÿÿÿ          � ªª           
+ÿÿÿÿÿÿ
+       r @   @   €<                Ð ªª           
+     
+       ‚       Ô€              W p  p  €<                  ªª    E L   @  
 
 
 À 	  é   €€     
-  â  m                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 $Ô       Ô€              ž× p  p  €<                Ð ªª    E L   ?  
+  e  ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ì       Ô€              `0 @   @   €  ÿÿÿÿÿÿ          à ªª           
+ÿÿÿÿÿÿ
+       /1       Ô€              Ä4 p  p  €<                ð ªª    E L   ?  
 
 
 À 	  é   €€     
-  â  m                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 “ù       Ô€              Eú X   X   €<                à ªª    E  4   8  
+  e  ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ü¿ @   @   €<                 ªª           
+     
+       ›Á       Ô€              oÑ @   @   €  ÿÿÿÿÿÿ          ªª           
+ÿÿÿÿÿÿ
+       ‘Ñ @   @   €<                ° ªª           
+     
+       >Ò       Ô€              ùÒ X   X   €<                 ªª    E  4   8  
 
 
- 	À     €z    
-  ê  â         Uú       Ô€              £ú (  (  €<                � ªª    E    @  
+ 	À     €~€    
+  «  e         	Ó       Ô€              {Ó p  p  €<                À ªª    E L   @  
 
 
 À 	     €€     
-  ì  ê                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Øý       Ô€               (  (  €<                ð ªª    E    ?  
+  â  «                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ×       Ô€              ŠÚ p  p  €<                0ªª    E L   ?  
 
 
 À 	     €€     
-  ì  ê                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Ø¸ p  p  €<                  ªª    E L   @  
+  â  «                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Û p  p  €<                Ð ªª    E L   @  
 
 
-À 	  Ñ   €€     
-  _  ê                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 l¼       Ô€              Ž¼ (  (  €<                ° ªª    E    @  
+À 	     €€     
+  â  «                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ß p  p  ˆ<                Ð ªª    E L   @  
 
 
-À 	  	é   €€     
-  _  ê                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         bÀ (  (  ˆ<                ° ªª    E    @  
+À 	     €€     
+  â  «                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ¥â       Ô€              æ p  p  €<                @ªª    E L   ?  
 
 
-À 	  	é   €€     
-  _  ê                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         —Ã       Ô€              ˜Ç p  p  ˆ<                 ªª    E L   ?  
+À 	     €€     
+  â  «                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 �æ à  à  €<                à ªª    E ¼   @  
 
 
-À 	  Ñ   €€     
-  _  ê                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ®Î (  (  €<                ªª    E    ?  
+À 	  
+1   €€     
+  â  «                                                                                                                                                                                                                                                                                                                                                                                                                 dé       Ô€              @ð à  à  €<                Pªª    E ¼   ?  
 
 
-À 	  	é   €€     
-  _  ê                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         %Ò (  (  ˆ<                ªª    E    ?  
+À 	  
+1   €€     
+  â  «                                                                                                                                                                                                                                                                                                                                                                                                                 8ô à  à  ˆ<                Pªª    E ¼   ?  
 
 
-À 	  	é   €€     
-  _  ê                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ¼Ö (  (  ˆ<                ªª    E    ?  
+À 	  
+1   €€     
+  â  «                                                                                                                                                                                                                                                                                                                                                                                                                 ¸       Ô€              j X   X   €<                `ªª    E  4   8  
+
+
+ 	À     
+1€}t    
+  ï  â         z       Ô€              Ø¸ p  p  €<                ð ªª    E L   @  
 
 
-À 	  	é   €€     
-  _  ê                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Þ (  (  ˆ<                ªª    E    ?  
+À 	  ¹   €€     
+  _  ï                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 l¼       Ô€              æ¿ p  p  €<                pªª    E L   ?  
 
 
-À 	  	é   €€     
-  _  ê                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ;é (  (  ˆ<                ªª    E    ?  
+À 	  ¹   €€     
+  _  ï                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 VÀ (  (  €<                 ªª    E  	  @  
 
 
-À 	  	é   €€     
-  _  ê                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Ô€              ² X   X   €<                 ªª    E  4   8  
+À 	  Ñ   €€     
+  _  ï                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         xÄ (  (  ˆ<                 ªª    E  	  @  
+
+
+À 	  Ñ   €€     
+  _  ï                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ­Ç       Ô€              ÇÊ (  (  €<                €ªª    E  	  ?  
+
+
+À 	  Ñ   €€     
+  _  ï                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         äê       Ô€              –ë X   X   €<                �ªª    E  4   8  
 
 
- 	À     	é€z    
-  r  _         Â       Ô€              | T   T   €<                0ªª    E  0     
-
-ŽŽ     
-    
+ 	À     Ñ€|Œ    
+  g  _         ¦ë       Ô€               ¡ p  p  €<                ªª    E L 
+  @  
+
 
-           Œ       Ô€              ð¨ X   X   €  ÿÿÿÿÿÿ          À ªª    E  4     
+À 	  ¡   €€     
+  Ü  g                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ´¤       Ô€              .¨ p  p  €<                 ªª    E L 
+  ?  
 
-ÿŽŽ          
 
-    
-          ø­ X   X   €  ÿÿÿÿÿÿ          @ªª    E  4     
-
-ÿŽŽ         
+À 	  ¡   €€     
+  Ü  g                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Ô¨ (  (  €<                 ªª    E    @  
+
 
-    
-          ß®       Ô€              È¯ T   T   €<                Pªª    E  0     
-
-ŽŽ     
+À 	  ¹   €€     
+  Ü  g                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         œ¬ (  (  ˆ<                 ªª    E    @  
+
 
-    
-  L       Ø¯       Ô€              &° p  p  €<                Ð ªª    E L   @  
+À 	  ¹   €€     
+  Ü  g                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Ñ¯       Ô€              ë² (  (  €<                °ªª    E    ?  
 
 
-À 	  ¹   €€     
-  Ü  r                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 »³       Ô€              P· p  p  €<                `ªª    E L   ?  
+À 	  ¹   €€     
+  Ü  g                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ãÕ       Ô€              •Ö X   X   €<                Àªª    E  4   8  
+
+
+ 	À     ¹€{’    
+  ä  Ü         ¥Ö       Ô€              h‰	 p  p  €<                0ªª    E L   @  
 
 
-À 	  ¹   €€     
-  Ü  r                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ;Ù       Ô€              íÙ X   X   €<                pªª    E  4   8  
+À 	  ‰   €€     
+  Y  ä                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 üŒ	       Ô€              v�	 p  p  €<                Ðªª    E L   ?  
+
+
+À 	  ‰   €€     
+  Y  ä                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 [‘	 (  (  €<                @ªª    E    @  
+
+
+À 	  ¡   €€     
+  Y  ä                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ª•	 (  (  ˆ<                @ªª    E    @  
+
+
+À 	  ¡   €€     
+  Y  ä                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ß˜	       Ô€              ù›	 (  (  €<                àªª    E    ?  
+
+
+À 	  ¡   €€     
+  Y  ä                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         >»	       Ô€              ð»	 X   X   €<                ðªª    E  4   8  
 
 
- 	À     	é€z    
-  è  Ü         ýÙ       Ô€              h‰	 p  p  €<                à ªª    E L 
-  @  
+ 	À     ¡€z˜    
+  a  Y          ¼	       Ô€              °q p  p  €<                Pªª    E L   @  
 
 
-À 	  ¡   €€     
-  Y  è                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 üŒ	       Ô€              v�	 p  p  €<                €ªª    E L 
-  ?  
+À 	  q   €€     
+  Ö  a                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Du       Ô€              ¾x p  p  €<                 ªª    E L   ?  
 
 
-À 	  ¡   €€     
-  Y  è                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 >²	       Ô€              ð²	 X   X   €<                �ªª    E  4   8  
+À 	  q   €€     
+  Ö  a                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Ry (  (  €<                `ªª    E    @  
+
+
+À 	  ‰   €€     
+  Ö  a                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         À| (  (  ˆ<                `ªª    E    @  
+
+
+À 	  ‰   €€     
+  Ö  a                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         õ       Ô€              rƒ (  (  €<                ªª    E    ?  
+
+
+À 	  ‰   €€     
+  Ö  a                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         D        Ô€              ö  X   X   €<                 ªª    E  4   8  
 
 
- 	À     	é€~ô    
-  a  Y          ³	       Ô€              Ú0 @   @   €  ÿÿÿÿÿÿ          ð ªª           
-ÿÿÿÿÿÿ
-       Ü1 @   @   €<                 ªª           
-     
-       ì1       Ô€              L2 p  p  €<                 ªª    E L   @  
+ 	À     ‰€yž    
+  Þ  Ö         ¡       Ô€              øY p  p  €<                pªª    E L   @  
 
 
-À 	  	é   €€     
-  	\  a                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 á5       Ô€              UU @   @   €  ÿÿÿÿÿÿ          °ªª           
-ÿÿÿÿÿÿ
-       $V       Ô€              §Y p  p  €<                Àªª    E L   ?  
+À 	  Y   €€     
+  S  Þ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Œ]       Ô€              a p  p  €<                0ªª    E L   ?  
+
+
+À 	  Y   €€     
+  S  Þ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 a (  (  €<                €ªª    E    @  
+
+
+À 	  q   €€     
+  S  Þ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ³e (  (  ˆ<                €ªª    E    @  
+
+
+À 	  q   €€     
+  S  Þ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         èh       Ô€              l (  (  €<                @ªª    E    ?  
+
+
+À 	  q   €€     
+  S  Þ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         LŒ       Ô€              þŒ X   X   €<                Pªª    E  4   8  
+
+
+ 	À     q€x¤    
+  [  S         �       Ô€                  p  p  €<                �ªª    E L   @  
+
+
+À 	  A   €€     
+  Ð  [                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ”        Ô€                p  p  €<                `ªª    E L   ?  
+
+
+À 	  A   €€     
+  Ð  [                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 �  (  (  €<                 ªª    E    @  
 
 
-À 	  	é   €€     
-  	\  a                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ð¨ T   T   €  ÿÿÿÿÿÿ          ªª    E  0     
+À 	  !Y   €€     
+  Ð  [                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         »  (  (  ˆ<                 ªª    E    @  
+
+
+À 	  !Y   €€     
+  Ð  [                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ð        Ô€              
+  (  (  €<                pªª    E    ?  
+
+
+À 	  !Y   €€     
+  Ð  [                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         X  T   T   €  ÿÿÿÿÿÿ          °ªª    E  0     
 
 ÿŽŽ      
-   
-  Ð       `Å T   T   €  ÿÿÿÿÿÿ          Ðªª    E  0     
+   
+  Ð       ,  T   T   €  ÿÿÿÿÿÿ          €ªª    E  0     
 
 ÿŽŽ      
     
-  Ð       ¿ã @   @   €<                àªª           
+  Ð       >        Ô€              Ð>  X   X   €<                �ªª    E  4 	  8  
+
+
+ 	À     !Y€wª    
+  Ø  Ð         à>        Ô€              Hè p  p  €<                Àªª    E L   @  
+
+
+À 	  #)   €€     
+  M  Ø                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Üë       Ô€              Vï p  p  €<                 ªª    E L   ?  
+
+
+À 	  #)   €€     
+  M  Ø                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ð (  (  €<                Ðªª    E    @  
+
+
+À 	  %A   €€     
+  M  Ø                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ô (  (  ˆ<                Ðªª    E    @  
+
+
+À 	  %A   €€     
+  M  Ø                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         A÷       Ô€              [ú (  (  €<                °ªª    E    ?  
+
+
+À 	  %A   €€     
+  M  Ø                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ç#       Ô€              ™$ X   X   €<                Àªª    E  4 
+  8  
+
+
+ 	À     %A€v°    
+  U  M         ©$       Ô€              èë @   @   €  ÿÿÿÿÿÿ          àªª           
+ÿÿÿÿÿÿ
+       êì @   @   €<                Ðªª           
+     
+       úì       Ô€              lí p  p  €<                ðªª    E L   @  
+
+
+À 	  '   €€     
+  Ê  U                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ñ       Ô€              ¡ñ (  (  €<                 ªª    E    @  
+
+
+À 	  ))   €€     
+  Ê  U                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Öô       Ô€              ½ @   @   €  ÿÿÿÿÿÿ          àªª           
+ÿÿÿÿÿÿ
+       Œ       Ô€              !	 p  p  €<                ðªª    E L   ?  
+
+
+À 	  '   €€     
+  Ê  U                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 œ (  (  €<                 ªª    E    ?  
+
+
+À 	  ))   €€     
+  Ê  U                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Ís @   @   €<                ªª           
      
-       Uå       Ô€              )õ @   @   €  ÿÿÿÿÿÿ          ðªª           
+       Qu       Ô€              ‰ @   @   €  ÿÿÿÿÿÿ           ªª           
 ÿÿÿÿÿÿ
-       Kõ @   @   €<                 ªª           
+       /‰ @   @   €<                ªª           
      
-       øõ       Ô€              éö X   X   €<                 ªª    E  4   8  
+       Ü‰       Ô€               Š X   X   €<                0ªª    E  4   8  
 
 
- 	À     Ñ€~€    
-  	£  	\         ùö       Ô€              P÷ p  p  €<                0ªª    E L   @  
+ 	À     ))€u¶    
+  		  Ê         °Š       Ô€              Ø¸ p  p  €<                 ªª    E L   @  
 
 
-À 	  Ñ   €€     
-  	Ù  	£                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 åú       Ô€              4û p  p  €<                @ªª    E L   @  
+À 	  *ù   €€     
+  	G  		                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 l¼       Ô€              æ¿ p  p  €<                @ªª    E L   ?  
 
 
-À 	  é   €€     
-  	Ù  	£                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Éþ       Ô€              y p  p  €<                ªª    E L   ?  
+À 	  *ù   €€     
+  	G  		                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ÂÀ (  (  €<                0ªª    E    @  
 
 
-À 	  Ñ   €€     
-  	Ù  	£                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 „ p  p  ˆ<                 ªª    E L   ?  
+À 	  -   €€     
+  	G  		                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         “Ä (  (  ˆ<                0ªª    E    @  
+
+
+À 	  -   €€     
+  	G  		                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ÈÇ       Ô€              âÊ (  (  €<                Pªª    E    ?  
 
 
-À 	  é   €€     
-  	Ù  	£                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ™T       Ô€              ™V X   X   ˆ<                0ªª    E  4   8  
+À 	  -   €€     
+  	G  		                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         èð       Ô€              šñ X   X   €<                `ªª    E  4   8  
 
 
- 	À     ¹€    
-  	ï  	Ù         ©V       Ô€              ÷V p  p  €<                Pªª    E L   @  
+ 	À     -€t¼    
+  	O  	G         ªñ       Ô€               ¡ p  p  €<                @ªª    E L   @  
 
 
-À 	     €€     
-  	ò  	ï                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ŒZ       Ô€              £[ L   L   €<                @ªª    E  (     
-
-ŽŽ     
+À 	  .á   €€     
+  	Ä  	O                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ´¤       Ô€              .¨ p  p  €<                pªª    E L   ?  
+
 
-           ³[       Ô€              \ p  p  €<                `ªª    E L   @  
+À 	  .á   €€     
+  	Ä  	O                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
+© (  (  €<                Pªª    E    @  
 
 
-À 	     €€     
-  	ò  	ï                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ¨_       Ô€              š` T   T   €<                Pªª    E  0     
-
-ŽŽ     
-    
+À 	  0ù   €€     
+  	Ä  	O                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ¥¬ (  (  ˆ<                Pªª    E    @  
+
 
-           ª`       Ô€              ‹a L   L   €<                `ªª    E  (     
-
-ŽŽ     
+À 	  0ù   €€     
+  	Ä  	O                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Ú¯       Ô€              ô² (  (  €<                €ªª    E    ?  
+
 
-           ›a       Ô€              ‚q       Ô€              � L   L   €<                pªª    E  (     
-
-ŽŽ     
+À 	  0ù   €€     
+  	Ä  	O                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ÕÕ       Ô€              ‡Ö X   X   €<                �ªª    E  4   8  
+
+
+ 	À     0ù€sÂ    
+  	Ì  	Ä         —Ö       Ô€              h‰	 p  p  €<                `ªª    E L   @  
+
+
+À 	  2É   €€     
+  
+A  	Ì                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 üŒ	       Ô€              v�	 p  p  €<                 ªª    E L   ?  
+
+
+À 	  2É   €€     
+  
+A  	Ì                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 I‘	 (  (  €<                pªª    E    @  
+
+
+À 	  4á   €€     
+  
+A  	Ì                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         É”	 (  (  ˆ<                pªª    E    @  
+
+
+À 	  4á   €€     
+  
+A  	Ì                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         þ—	       Ô€              N›	 (  (  €<                °ªª    E    ?  
+
+
+À 	  4á   €€     
+  
+A  	Ì                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         BÀ	       Ô€              ôÀ	 X   X   €<                Àªª    E  4   8  
+
+
+ 	À     4á€rÈ    
+  
+I  
+A         Á	       Ô€              °q p  p  €<                €ªª    E L   @  
+
+
+À 	  6±   €€     
+  
+¾  
+I                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Du       Ô€              ¾x p  p  €<                Ðªª    E L   ?  
+
+
+À 	  6±   €€     
+  
+¾  
+I                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 vy (  (  €<                �ªª    E    @  
+
+
+À 	  8É   €€     
+  
+¾  
+I                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ÿ| (  (  ˆ<                �ªª    E    @  
+
+
+À 	  8É   €€     
+  
+¾  
+I                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         4€       Ô€              Nƒ (  (  €<                àªª    E    ?  
+
 
-           .�       Ô€           
\ No newline at end of file
+À 	  8É   €€     
+  
+¾  
+I                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         `ž       Ô€              Ÿ X   X   €<                ðªª    E  4   8  
+
+
+ 	À     8É€qÎ    
+  
+Æ  
+¾         "Ÿ       Ô€              øY p  p  €<                 ªª    E L    @  
+
+
+À 	  :™   €€     
+  ;  
+Æ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Œ]       Ô€              ®] (  (  €<                °ªª    E  !  @  
+
+
+À 	  <±   €€     
+  ;  
+Æ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         	b (  (  ˆ<                °ªª    E  !  @  
+
+
+À 	  <±   €€     
+  ;  
+Æ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         œg (  (  ˆ<                °ªª    E  !  @  
+
+
+À 	  <±   €€     
+  ;  
+Æ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Ñj       Ô€              ëm (  (  €<                ªª    E  !  ?  
+
+
+À 	  <±   €€     
+  ;  
+Æ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ªŒ       Ô€              \� X   X   €<                 ªª    E  4   8  
+
+
+ 	À     <±€pÔ    
+  C  ;         l�       Ô€           
\ No newline at end of file
diff -Naur ns-3.23/src/aodv/test/tcp-chain-test-9-0.pcap ns-3.24/src/aodv/test/tcp-chain-test-9-0.pcap
--- ns-3.23/src/aodv/test/tcp-chain-test-9-0.pcap	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/aodv/test/tcp-chain-test-9-0.pcap	2015-09-15 11:18:44.000000000 -0700
@@ -5,189 +5,417 @@
 
     
 
-  Ð        ¨Ë  T   T   €  ÿÿÿÿÿÿ            ªª    E  0      
-	
-ÿŽŽ      
-	    
-	  Ð       (   T   T   €  ÿÿÿÿÿÿ           ªª    E  0     
-
-
-ÿŽŽ      
-
-    
-
-  Ð       ç¸  @   @   €  ÿÿÿÿÿÿ           ªª           
+  Ð        ç¸  @   @   €  ÿÿÿÿÿÿ            ªª           
 	ÿÿÿÿÿÿ
 
-       	¹  @   @   €<                  ªª           
+        	¹  @   @   €<                 ªª           
 
      
-	       ¶¹        Ô€              `º  T   T   €<                  ªª    E  0      
+	        ¶¹        Ô€               �º  T   T   €<                 ªª    E  0      
 	
 
 ŽŽ     
    
 
-  _       pº        Ô€              eÈ  @   @   €  ÿÿÿÿÿÿ          0 ªª           
+  _        �º        Ô€               eÈ  @   @   €  ÿÿÿÿÿÿ            ªª           
 	ÿÿÿÿÿÿ
-       4É        Ô€              &Ê  T   T   €<                @ ªª    E  0      
+        4É        Ô€               8Ê  T   T   €<                0 ªª    E  0      
 	
 ŽŽ   @ 
 
     
-  ±       HÛ  T   T   €  ÿÿÿÿÿÿ          P ªª    E  0     
+  ³        ¨Ë  T   T   €  ÿÿÿÿÿÿ          @ ªª    E  0      
 	
 ÿŽŽ      
 	    
-	  Ð       �æ  @   @   €<                ` ªª           
+	  Ð        “æ  @   @   €<                P ªª           
 	     
-       °ç        Ô€              Õ€       Ô€              ‹� \   \   €<                p ªª    E  8    8  
+        Âç        Ô€               L�       Ô€               ‚ \   \   €<                ` ªª    E  8    8  
 
 
 À 	        �€     
-  è              ›�       Ô€              • @   @   €  ÿÿÿÿÿÿ          0 ªª           
+                   ‚       Ô€               Š• @   @   €  ÿÿÿÿÿÿ            ªª           
 
 ÿÿÿÿÿÿ
-	       – @   @   €<                € ªª           
+	        Œ– @   @   €<                p ªª           
 	     
 
-       %–       Ô€              s– \   \   €<                @ ªª    E  8    @  
+        œ–       Ô€               2— \   \   €<                0 ªª    E  8    @  
 
 
  	À       �€     
-  J  è          D—       Ô€              ˜ \   \   €<                � ªª    E  8    ?  
+   b               ˜       Ô€               ¹˜ \   \   €<                € ªª    E  8    ?  
 
 
  	À       �€     
-  J  è          ¥¦       Ô€              W§ X   X   €<                  ªª    E  4   8  
+   b               §       Ô€               Î§ X   X   €<                � ªª    E  4   8  
 
 
 À 	      €€     
-  R  J         g§       Ô€              Ù       Ô€              S	 p  p  €<                ° ªª    E L   8  
+   j   b          Þ§       Ô€              ‘        Ô€              !  p  p  €<                  ªª    E L   8  
 
 
 À 	      €€     
-  e  J                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 c	       Ô€              ±	 X   X   €<                P ªª    E  4   @  
+  è   b                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 !        Ô€              i!  X   X   €<                @ ªª    E  4   @  
 
 
  	À     €z    
-  m  e         ~
-       Ô€              T X   X   €<                À ªª    E  4   ?  
+  ð  è         6"        Ô€              K#  X   X   €<                ° ªª    E  4   ?  
 
 
  	À     €z    
-  m  e         ì,       Ô€              0 (  (  €<                Ð ªª    E    8  
+  ð  è         þD        Ô€              H  (  (  €<                À ªª    E    8  
 
 
 À 	     €€     
-  o  m                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         0       Ô€              !î       Ô€              ›ñ p  p  €<                à ªª    E L   8  
+  ò  ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         (H        Ô€              (   T   T   €  ÿÿÿÿÿÿ          P ªª    E  0     
+
+
+ÿŽŽ      
+
+    
+
+  Ð       HÛ  T   T   €  ÿÿÿÿÿÿ          Ð ªª    E  0     
+	
+ÿŽŽ      
+	    
+	  Ð       ‹Ó @   @   €<                à ªª           
+	     
+       ´×       Ô€              (÷ @   @   €  ÿÿÿÿÿÿ          ð ªª           
+	ÿÿÿÿÿÿ
+
+       J÷ @   @   €<                ` ªª           
+
+     
+	       ö÷       Ô€              ”û p  p  €<                 ªª    E L   8  
 
 
 À 	  é   €€     
-  â  m                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 «ñ       Ô€              ùñ X   X   €<                ` ªª    E  4   @  
+  e  ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ¤û       Ô€               @   @   €  ÿÿÿÿÿÿ          p ªª           
+
+ÿÿÿÿÿÿ
+	        @   @   €<                ªª           
+	     
+
+              Ô€              ¶ X   X   €<                € ªª    E  4   @  
 
 
- 	À     €z    
-  ê  â         Æò       Ô€              Àó X   X   €<                ð ªª    E  4   ?  
+ 	À     €~€    
+  «  e         ƒ       Ô€              ß8 @   @   €  ÿÿÿÿÿÿ           ªª           
+	ÿÿÿÿÿÿ
+       ®9       Ô€              –: X   X   €<                0ªª    E  4   ?  
 
 
- 	À     €z    
-  ê  â         O       Ô€              i (  (  €<                 ªª    E    8  
+ 	À     €~€    
+  «  e         ñ       Ô€              ‡ô p  p  €<                @ªª    E L   8  
 
 
 À 	     €€     
-  ì  ê                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         y       Ô€              s       Ô€              í p  p  €<                ªª    E L   8  
+  â  «                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 —ô       Ô€              ^        Ô€              Ø p  p  €<                Pªª    E L   8  
 
 
-À 	  Ñ   €€     
-  _  ê                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ý       Ô€              K X   X   €<                p ªª    E  4   @  
+À 	     €€     
+  â  «                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 è       Ô€              6 X   X   €<                � ªª    E  4   @  
 
 
- 	À     	é€z    
-  r  _                Ô€              - X   X   €<                 ªª    E  4   ?  
+ 	À     
+1€}t    
+  ï  â                Ô€              ë X   X   €<                `ªª    E  4   ?  
 
 
- 	À     	é€z    
-  r  _         ¨¶       Ô€              R· T   T   €<                0ªª    E  0     
-	
+ 	À     
+1€}t    
+  ï  â         ' X   X   ˆ<                `ªª    E  4   ?  
 
-ŽŽ     
-   
+
+ 	À     
+1€}t    
+  ï  â         ™ X   X   ˆ<                `ªª    E  4   ?  
 
-  ?       b·       Ô€              ÷Í       Ô€              qÑ p  p  €<                @ªª    E L   8  
+
+ 	À     
+1€}t    
+  ï  â         X X   X   ˆ<                `ªª    E  4   ?  
+
+
+ 	À     
+1€}t    
+  ï  â                Ô€              Á à  à  €<                pªª    E ¼   8  
+
+
+À 	  
+1   €€     
+  â  «                                                                                                                                                                                                                                                                                                                                                                                                                 Ñ       Ô€              iÖ       Ô€              ãÙ p  p  €<                €ªª    E L   8  
 
 
 À 	  ¹   €€     
-  Ü  r                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 �Ñ       Ô€              ÏÑ X   X   €<                € ªª    E  4   @  
+  _  ï                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 óÙ       Ô€              AÚ X   X   €<                  ªª    E  4   @  
 
 
- 	À     	é€z    
-  è  Ü         œÒ       Ô€              iÓ X   X   €<                Pªª    E  4   ?  
+ 	À     Ñ€|Œ    
+  g  _         Û       Ô€              ÉÛ X   X   €<                �ªª    E  4   ?  
 
 
- 	À     	é€z    
-  è  Ü         ù¦	       Ô€              sª	 p  p  €<                `ªª    E L 
+ 	À     Ñ€|Œ    
+  g  _         \ê       Ô€              ví (  (  €<                 ªª    E  	  8  
+
+
+À 	  Ñ   €€     
+  _  ï                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         †í       Ô€              ±¾       Ô€              +Â p  p  €<                °ªª    E L 
   8  
 
 
 À 	  ¡   €€     
-  Y  è                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ƒª	       Ô€              Ñª	 X   X   €<                � ªª    E  4   @  
+  Ü  g                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ;Â       Ô€              ‰Â X   X   €<                ° ªª    E  4   @  
+
+
+ 	À     ¹€{’    
+  ä  Ü         VÃ       Ô€              PÄ X   X   €<                Àªª    E  4   ?  
+
+
+ 	À     ¹€{’    
+  ä  Ü         [Õ       Ô€              uØ (  (  €<                Ðªª    E    8  
+
+
+À 	  ¹   €€     
+  Ü  g                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         …Ø       Ô€              ù¦	       Ô€              sª	 p  p  €<                àªª    E L   8  
+
+
+À 	  ‰   €€     
+  Y  ä                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ƒª	       Ô€              Ñª	 X   X   €<                À ªª    E  4   @  
+
+
+ 	À     ¡€z˜    
+  a  Y         ž«	       Ô€              ¼¬	 X   X   €<                ðªª    E  4   ?  
+
+
+ 	À     ¡€z˜    
+  a  Y         ®	 X   X   ˆ<                ðªª    E  4   ?  
+
+
+ 	À     ¡€z˜    
+  a  Y         r¶	       Ô€              Œ¹	 (  (  €<                 ªª    E    8  
+
+
+À 	  ¡   €€     
+  Y  ä                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         œ¹	       Ô€              A�       Ô€              »’ p  p  €<                ªª    E L   8  
+
+
+À 	  q   €€     
+  Ö  a                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Ë’       Ô€              “ X   X   €<                Ð ªª    E  4   @  
+
+
+ 	À     ‰€yž    
+  Þ  Ö         æ“       Ô€              Î” X   X   €<                 ªª    E  4   ?  
+
+
+ 	À     ‰€yž    
+  Þ  Ö         w™       Ô€              _š X   X   ˆ<                 ªª    E  4   ?  
+
+
+ 	À     ‰€yž    
+  Þ  Ö         ¿ž (  (  €<                0ªª    E    8  
+
+
+À 	  ‰   €€     
+  Ö  a                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Ïž       Ô€              ‰w       Ô€              { p  p  €<                @ªª    E L   8  
+
+
+À 	  Y   €€     
+  S  Þ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 {       Ô€              a{ X   X   €<                à ªª    E  4   @  
+
+
+ 	À     q€x¤    
+  [  S         .|       Ô€              } X   X   €<                Pªª    E  4   ?  
+
+
+ 	À     q€x¤    
+  [  S         ë~ X   X   ˆ<                Pªª    E  4   ?  
 
 
- 	À     	é€~ô    
-  a  Y         ž«	       Ô€              k¬	 X   X   €<                pªª    E  4   ?  
+ 	À     q€x¤    
+  [  S         n‡       Ô€              ˆŠ (  (  €<                `ªª    E    8  
+
+
+À 	  q   €€     
+  S  Þ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ˜Š       Ô€              ‘        Ô€              !  p  p  €<                pªª    E L   8  
+
+
+À 	  A   €€     
+  Ð  [                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 !        Ô€              i!  X   X   €<                ð ªª    E  4 	  @  
 
 
- 	À     	é€~ô    
-  a  Y         @œ  T   T   €  ÿÿÿÿÿÿ            ªª    E  0     
+ 	À     !Y€wª    
+  Ø  Ð         6"        Ô€              ]#  X   X   €<                €ªª    E  4 	  ?  
+
+
+ 	À     !Y€wª    
+  Ø  Ð         a=        Ô€              {@  (  (  €<                �ªª    E    8  
+
+
+À 	  !Y   €€     
+  Ð  [                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ‹@        Ô€              @œ  T   T   €  ÿÿÿÿÿÿ           ªª    E  0     
 
 
 ÿŽŽ      
 
     
 
-  Ð       �Ï  T   T   €  ÿÿÿÿÿÿ          €ªª    E  0     
+  Ð       �Ï  T   T   €  ÿÿÿÿÿÿ           ªª    E  0     
 	
 ÿŽŽ      
 	    
-	  Ð       ø @   @   €<                �ªª           
+	  Ð       Ù       Ô€              S	 p  p  €<                °ªª    E L   8  
+
+
+À 	  #)   €€     
+  M  Ø                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 c	       Ô€              ±	 X   X   €<                ªª    E  4 
+  @  
+
+
+ 	À     %A€v°    
+  U  M         ~
+       Ô€              � X   X   €<                Àªª    E  4 
+  ?  
+
+
+ 	À     %A€v°    
+  U  M         ü"       Ô€              & (  (  €<                Ðªª    E    8  
+
+
+À 	  %A   €€     
+  M  Ø                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         &&       Ô€              « @   @   €<                àªª           
 	     
-       aü       Ô€              Õ @   @   €  ÿÿÿÿÿÿ           ªª           
+       "¯       Ô€              ÿ²       Ô€              ÞÂ @   @   €  ÿÿÿÿÿÿ          ðªª           
 	ÿÿÿÿÿÿ
 
-       ÷ @   @   €<                ° ªª           
+        Ã @   @   €<                 ªª           
 
      
-	       £       Ô€              A  p  p  €<                °ªª    E L   8  
+	       ¬Ã       Ô€              nÇ p  p  €<                 ªª    E L   8  
 
 
-À 	  	é   €€     
-  	\  a                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Q        Ô€              ±7 @   @   €  ÿÿÿÿÿÿ          À ªª           
+À 	  '   €€     
+  Ê  U                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ~Ç       Ô€              òÊ (  (  €<                ªª    E    8  
+
+
+À 	  ))   €€     
+  Ê  U                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Ë       Ô€              ÞÞ @   @   €  ÿÿÿÿÿÿ          0ªª           
 
 ÿÿÿÿÿÿ
-	       ´8 @   @   €<                Àªª           
+	       áß @   @   €<                 ªª           
 	     
 
-       Ä8       Ô€              Q9 X   X   €<                Ð ªª    E  4   @  
+       ñß       Ô€              Zà X   X   €<                @ªª    E  4   @  
 
 
- 	À     Ñ€~€    
-  	£  	\         :       Ô€              z] @   @   €  ÿÿÿÿÿÿ          Ðªª           
+ 	À     ))€u¶    
+  		  Ê         'á       Ô€              ³ü @   @   €  ÿÿÿÿÿÿ          0ªª           
 	ÿÿÿÿÿÿ
-       I^       Ô€              _ X   X   €<                àªª    E  4   ?  
+       ‚ý       Ô€              =þ X   X   €<                @ªª    E  4   ?  
 
 
- 	À     Ñ€~€    
-  	£  	\         †>       Ô€              ZL p  p  ˆ<                ðªª    E L   8  
+ 	À     ))€u¶    
+  		  Ê         iÖ       Ô€              ãÙ p  p  €<                Pªª    E L   8  
 
 
-À 	  Ñ   €€     
-  	Ù  	£                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 jL       Ô€              ¸L X   X   €<                à ªª    E  4   @  
+À 	  *ù   €€     
+  	G  		                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 óÙ       Ô€              AÚ X   X   €<                Pªª    E  4   @  
 
 
- 	À     ¹€    
-  	ï  	Ù         „M       Ô€              ¢N X   X   €<                 ªª    E  4   ?  
+ 	À     -€t¼    
+  	O  	G         Û       Ô€              #Ü X   X   €<                `ªª    E  4   ?  
 
 
- 	À     ¹€    
-  	ï  	Ù      
\ No newline at end of file
+ 	À     -€t¼    
+  	O  	G         `ð       Ô€              zó (  (  €<                pªª    E    8  
+
+
+À 	  -   €€     
+  	G  		                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Šó       Ô€              ±¾       Ô€              +Â p  p  €<                €ªª    E L   8  
+
+
+À 	  .á   €€     
+  	Ä  	O                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ;Â       Ô€              ‰Â X   X   €<                `ªª    E  4   @  
+
+
+ 	À     0ù€sÂ    
+  	Ì  	Ä         VÃ       Ô€              PÄ X   X   €<                �ªª    E  4   ?  
+
+
+ 	À     0ù€sÂ    
+  	Ì  	Ä         Ñ       Ô€              5Ô (  (  €<                 ªª    E    8  
+
+
+À 	  0ù   €€     
+  	Ä  	O                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         EÔ       Ô€              ù¦	       Ô€              sª	 p  p  €<                °ªª    E L   8  
+
+
+À 	  2É   €€     
+  
+A  	Ì                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ƒª	       Ô€              Ñª	 X   X   €<                pªª    E  4   @  
+
+
+ 	À     4á€rÈ    
+  
+I  
+A         ž«	       Ô€              Å¬	 X   X   €<                Àªª    E  4   ?  
+
+
+ 	À     4á€rÈ    
+  
+I  
+A         £®	 X   X   ˆ<                Àªª    E  4   ?  
+
+
+ 	À     4á€rÈ    
+  
+I  
+A         d»	       Ô€              ~¾	 (  (  €<                Ðªª    E    8  
+
+
+À 	  4á   €€     
+  
+A  	Ì                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Ž¾	       Ô€              A�       Ô€              »’ p  p  €<                àªª    E L   8  
+
+
+À 	  6±   €€     
+  
+¾  
+I                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Ë’       Ô€              “ X   X   €<                €ªª    E  4   @  
+
+
+ 	À     8É€qÎ    
+  
+Æ  
+¾         æ“       Ô€              • X   X   €<                ðªª    E  4   ?  
+
+
+ 	À     8É€qÎ    
+  
+Æ  
+¾         ž       Ô€               ¡ (  (  €<                 ªª    E    8  
+
+
+À 	  8É   €€     
+  
+¾  
+I                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         0¡       Ô€              ‰w       Ô€              { p  p  €<                ªª    E L    8  
+
+
+À 	  :™   €€     
+  ;  
+Æ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 {       Ô€              a{ X   X   €<                �ªª    E  4   @  
+
+
+ 	À     <±€pÔ    
+  C  ;         .|       Ô€              ò| X   X   €<                 ªª    E  4   ?  
+
+
+ 	À     <±€pÔ    
+  C  ;         ±‡       Ô€              ËŠ (  (  €<                0ªª    E  !  8  
+
+
+À 	  <±   €€     
+  ;  
+Æ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ÛŠ       Ô€           
\ No newline at end of file
diff -Naur ns-3.23/src/aodv/test/udp-chain-test-0-0.pcap ns-3.24/src/aodv/test/udp-chain-test-0-0.pcap
--- ns-3.23/src/aodv/test/udp-chain-test-0-0.pcap	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/aodv/test/udp-chain-test-0-0.pcap	2015-09-15 11:18:44.000000000 -0700
@@ -8,221 +8,220 @@
 
 ÿŽŽ      
     
-  Ð       ˆ  T   T   €  ÿÿÿÿÿÿ     	     	 ªª    E  0     
-
-ÿŽŽ      
-    
-  Ð       xP T   T   €  ÿÿÿÿÿÿ     
-     
- ªª    E  0     
-
-ÿŽŽ      
-    
-  Ð       ð X   X   €  ÿÿÿÿÿÿ     	     	  ªª    E  4     
+  Ð           X   X   €  ÿÿÿÿÿÿ     	     	 ªª    E  4     
 
 ÿŽŽ    (     
 
     
-          Ø  X   X   €  ÿÿÿÿÿÿ     
+          `   X   X   €  ÿÿÿÿÿÿ     
      
-  ªª    E  4     
+ ªª    E  4     
 
 ÿŽŽ    (    
 
     
-          ³Æ @   @   €<           
+           @   @   €<           
      
-0 ªª           
+  ªª           
 
      
-       È       Ô€              ïÈ @   @   €  ÿÿÿÿÿÿ     
+       €       Ô€               @   @   €  ÿÿÿÿÿÿ     
      
-@ ªª           
+0 ªª           
 
 ÿÿÿÿÿÿ
-       É @   @   €<      
-     	     	0 ªª           	
+       4 @   @   €<      
+     	     	  ªª           	
      
 
-       ½É       Ô€       	       ¯Ê T   T   €<      	     
+       à       Ô€       	        T   T   €<      	     
      
-P ªª    E  0      
+@ ªª    E  0      
 
 ŽŽ     
 
     
-  C       ¿Ê       Ô€       
-       Ë @   @   €  ÿÿÿÿÿÿ     	     	@ ªª           	
+  ±       !       Ô€       
+       o @   @   €  ÿÿÿÿÿÿ     	     	0 ªª           	
 ÿÿÿÿÿÿ
-       jÌ @   @   €<      	     
+       º @   @   €<      	     
      
-` ªª           
+P ªª           
 
      	
-       zÌ       Ô€       
-       ÈÌ (  (  €<      
-     	     	P ªª    E     @  
+       Ê       Ô€       
+        (  (  €<      
+     	     	@ ªª    E     @  
 
 
-À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ©Ò       Ô€       	       ­Ú @   @   €  ÿÿÿÿÿÿ     
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ù$       Ô€       	       ý, @   @   €  ÿÿÿÿÿÿ     
      
-p ªª           
+` ªª           
 
 ÿÿÿÿÿÿ
-       |Û       Ô€              Tá (  (  €<           
+       Ì-       Ô€              ì3 (  (  €<           
      
-€ ªª    E     ?  
+p ªª    E     ?  
+
+
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Hè (  (  €<      
+     	     	P ªª    E    @  
+
+
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (î       Ô€       	       îó (  (  €<           
+     
+€ ªª    E    ?  
 
 
 À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 �Ð (  (  €<      
-     	     	` ªª    E    @  
+     	     	` ªª    E    @  
 
 
 À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 pÖ       Ô€       	       6Ü (  (  €<           
      
-� ªª    E    ?  
+� ªª    E    ?  
 
 
 À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Ø¸ (  (  €<      
-     	     	p ªª    E    @  
+     	     	p ªª    E    @  
 
 
 À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ¸¾       Ô€       	       ~Ä (  (  €<           
      
-  ªª    E    ?  
+  ªª    E    ?  
 
 
 À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  ¡ (  (  €<      
-     	     	€ ªª    E    @  
+     	     	€ ªª    E    @  
 
 
 À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  §       Ô€       	       Æ¬ (  (  €<           
      
-° ªª    E    ?  
+° ªª    E    ?  
 
 
 À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 h‰	 (  (  €<      
-     	     	� ªª    E    @  
+     	     	� ªª    E    @  
 
 
 À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 H�	       Ô€       	       •	 (  (  €<           
      
-À ªª    E    ?  
+À ªª    E    ?  
 
 
 À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 °q (  (  €<      
-     	     	  ªª    E    @  
+     	     	  ªª    E    @  
 
 
 À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 �w       Ô€       	       V} (  (  €<           
      
-Ð ªª    E    ?  
+Ð ªª    E    ?  
 
 
 À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 øY (  (  €<      
-     	     	° ªª    E    @  
+     	     	° ªª    E    @  
 
 
 À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Ø_       Ô€       	       že (  (  €<           
      
-à ªª    E    ?  
+à ªª    E    ?  
 
 
 À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     (  (  €<      
-     	     	À ªª    E    @  
+     	     	À ªª    E    @  
 
 
 À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 à        Ô€       	       ¦  (  (  €<           
      
-ð ªª    E    ?  
+ð ªª    E    ?  
 
 
-À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Hè (  (  €<      
-     	     	Ð ªª    E    @  
-
-
-À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (î       Ô€       	       îó (  (  €<           
-     
- ªª    E    ?  
-
-
-À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 gô T   T   €  ÿÿÿÿÿÿ     	     	à ªª    E  0     
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 (  T   T   €  ÿÿÿÿÿÿ     	     	Ð ªª    E  0     
 
 ÿŽŽ      
    
-  Ð       û T   T   €  ÿÿÿÿÿÿ     
+  Ð       ò  T   T   €  ÿÿÿÿÿÿ     
      
-ªª    E  0     
+ ªª    E  0     
 
 ÿŽŽ      
     
-  Ð       ¸ó @   @   €  ÿÿÿÿÿÿ     	     	ð ªª           	
+  Ð       p @   @   €  ÿÿÿÿÿÿ     	     	à ªª           	
 ÿÿÿÿÿÿ
-       ºô @   @   €<      	     
+       r @   @   €<      	     
      
- ªª           
+ªª           
 
      	
-       Êô       Ô€       
-       „õ (  (  €<      
-     	     	 ªª    E  	  @  
+       ‚       Ô€       
+       â (  (  €<      
+     	     	ð ªª    E  	  @  
 
 
-À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 eû       Ô€       	       Ù @   @   €  ÿÿÿÿÿÿ     
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Ã       Ô€       	       72 @   @   €  ÿÿÿÿÿÿ     
      
-0ªª           
+ ªª           
 
 ÿÿÿÿÿÿ
-       ¨       Ô€              ¶! (  (  €<           
+       3       Ô€              Õ8 (  (  €<           
      
-@ªª    E  	  ?  
+0ªª    E  	  ?  
 
 
-À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Ø¸ (  (  €<      
-     	     	ªª    E  
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 �Ð (  (  €<      
+     	     	 ªª    E  
   @  
 
 
-À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ¸¾       Ô€       	       ~Ä (  (  €<           
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 pÖ       Ô€       	       6Ü (  (  €<           
      
-Pªª    E  
+@ªª    E  
   ?  
 
 
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Ø¸ (  (  €<      
+     	     	ªª    E    @  
+
+
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ¸¾       Ô€       	       ~Ä (  (  €<           
+     
+Pªª    E    ?  
+
+
 À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  ¡ (  (  €<      
-     	     	 ªª    E    @  
+     	     	 ªª    E    @  
 
 
 À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  §       Ô€       	       Æ¬ (  (  €<           
      
-`ªª    E    ?  
+`ªª    E    ?  
 
 
 À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 h‰	 (  (  €<      
-     	     	0ªª    E    @  
+     	     	0ªª    E    @  
 
 
 À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 H�	       Ô€       	       •	 (  (  €<           
      
-pªª    E    ?  
+pªª    E    ?  
 
 
 À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 °q (  (  €<      
-     	     	@ªª    E    @  
+     	     	@ªª    E    @  
 
 
 À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 �w       Ô€       	       V} (  (  €<           
      
-€ªª    E    ?  
+€ªª    E    ?  
 
 
 À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 øY (  (  €<      
-     	     	Pªª    E    @  
+     	     	Pªª    E    @  
 
 
 À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Ø_       Ô€       	       že (  (  €<           
      
-�ªª    E    ?  
+�ªª    E    ?  
 
 
 À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
\ No newline at end of file
diff -Naur ns-3.23/src/aodv/test/udp-chain-test-9-0.pcap ns-3.24/src/aodv/test/udp-chain-test-9-0.pcap
--- ns-3.23/src/aodv/test/udp-chain-test-9-0.pcap	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/aodv/test/udp-chain-test-9-0.pcap	2015-09-15 11:18:44.000000000 -0700
@@ -16,53 +16,56 @@
 
     
 
-  Ð       HÛ  T   T   €  ÿÿÿÿÿÿ           ªª    E  0     
-	
-ÿŽŽ      
-	    
-	  Ð       —f @   @   €  ÿÿÿÿÿÿ            ªª           
+  Ð       ç¸  @   @   €  ÿÿÿÿÿÿ           ªª           
 	ÿÿÿÿÿÿ
 
-       ¹f @   @   €<                  ªª           
+       	¹  @   @   €<                  ªª           
 
      
-	       fg       Ô€              jh T   T   €<                0 ªª    E  0      
+	       ¶¹        Ô€              `º  T   T   €<                  ªª    E  0      
 	
 
 ŽŽ     
    
 
-  _       zh       Ô€              v @   @   €  ÿÿÿÿÿÿ          @ ªª           
+  _       pº        Ô€              eÈ  @   @   €  ÿÿÿÿÿÿ          0 ªª           
 	ÿÿÿÿÿÿ
-       äv       Ô€               w T   T   €<                P ªª    E  0      
+       4É        Ô€              &Ê  T   T   €<                @ ªª    E  0      
 	
 ŽŽ   @ 
 
     
-  C       û“ @   @   €<                ` ªª           
+  ±       HÛ  T   T   €  ÿÿÿÿÿÿ          P ªª    E  0     
+	
+ÿŽŽ      
+	    
+	  Ð       �æ  @   @   €<                ` ªª           
 	     
-       *•       Ô€              °W       Ô€              v] (  (  €<                p ªª    E     8  
+       °ç        Ô€              U©       Ô€              ¯ (  (  €<                p ªª    E     8  
 
 
-À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 †]       Ô€              �        Ô€              G (  (  €<                € ªª    E    8  
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 +¯       Ô€              9       Ô€              ÿ (  (  €<                € ªª    E    8  
 
 
-À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 W       Ô€              Éè       Ô€              �î (  (  €<                � ªª    E    8  
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Ô€              �        Ô€              G (  (  €<                � ªª    E    8  
 
 
-À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Ÿî       Ô€              Ñ       Ô€              ×Ö (  (  €<                  ªª    E    8  
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 W       Ô€              Éè       Ô€              �î (  (  €<                  ªª    E    8  
 
 
-À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 çÖ       Ô€              Y¹	       Ô€              ¿	 (  (  €<                ° ªª    E    8  
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Ÿî       Ô€              Ñ       Ô€              ×Ö (  (  €<                ° ªª    E    8  
 
 
-À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 /¿	       Ô€              ¡¡       Ô€              g§ (  (  €<                À ªª    E    8  
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 çÖ       Ô€              Y¹	       Ô€              ¿	 (  (  €<                À ªª    E    8  
 
 
-À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 w§       Ô€              é‰       Ô€              ¯� (  (  €<                Ð ªª    E    8  
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 /¿	       Ô€              ¡¡       Ô€              g§ (  (  €<                Ð ªª    E    8  
 
 
-À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ¿�       Ô€              ñ/        Ô€              ·5  (  (  €<                à ªª    E    8  
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 w§       Ô€              é‰       Ô€              ¯� (  (  €<                à ªª    E    8  
+
+
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ¿�       Ô€              ñ/        Ô€              ·5  (  (  €<                ð ªª    E    8  
 
 
 À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Ç5        Ô€              @œ  T   T   €  ÿÿÿÿÿÿ          0 ªª    E  0     
@@ -72,39 +75,38 @@
 
     
 
-  Ð       �Ï  T   T   €  ÿÿÿÿÿÿ          ð ªª    E  0     
+  Ð       �Ï  T   T   €  ÿÿÿÿÿÿ           ªª    E  0     
 	
 ÿŽŽ      
 	    
-	  Ð       9       Ô€              ÿ (  (  €<                 ªª    E    8  
-
-
-À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Ô€              wÌ @   @   €<                ªª           
+	  Ð       Eã @   @   €<                ªª           
 	     
-       ÈÒ       Ô€              <ò @   @   €  ÿÿÿÿÿÿ           ªª           
+       ±é       Ô€              %	 @   @   €  ÿÿÿÿÿÿ           ªª           
 	ÿÿÿÿÿÿ
 
-       ^ò @   @   €<                @ ªª           
+       G	 @   @   €<                @ ªª           
 
      
-	       
-ó       Ô€              ù (  (  €<                0ªª    E  	  8  
+	       ó	       Ô€              ï (  (  €<                0ªª    E  	  8  
 
 
-À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ù       Ô€              Éè       Ô€              �î (  (  €<                @ªª    E  
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ÿ       Ô€              �        Ô€              G (  (  €<                @ªª    E  
   8  
 
 
-À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Ÿî       Ô€              Ñ       Ô€              ×Ö (  (  €<                Pªª    E    8  
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 W       Ô€              Éè       Ô€              �î (  (  €<                Pªª    E    8  
+
+
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Ÿî       Ô€              Ñ       Ô€              ×Ö (  (  €<                `ªª    E    8  
 
 
-À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 çÖ       Ô€              Y¹	       Ô€              ¿	 (  (  €<                `ªª    E    8  
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 çÖ       Ô€              Y¹	       Ô€              ¿	 (  (  €<                pªª    E    8  
 
 
-À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 /¿	       Ô€              ¡¡       Ô€              g§ (  (  €<                pªª    E    8  
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 /¿	       Ô€              ¡¡       Ô€              g§ (  (  €<                €ªª    E    8  
 
 
-À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 w§       Ô€              é‰       Ô€              ¯� (  (  €<                €ªª    E    8  
+À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 w§       Ô€              é‰       Ô€              ¯� (  (  €<                �ªª    E    8  
 
 
 À 	ð                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ¿�       Ô€           
\ No newline at end of file
diff -Naur ns-3.23/src/aodv/wscript ns-3.24/src/aodv/wscript
--- ns-3.23/src/aodv/wscript	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/aodv/wscript	2015-09-15 11:18:44.000000000 -0700
@@ -1,7 +1,7 @@
 ## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
 
 def build(bld):
-    module = bld.create_ns3_module('aodv', ['internet', 'wifi', 'applications'])
+    module = bld.create_ns3_module('aodv', ['internet', 'wifi'])
     module.includes = '.'
     module.source = [
         'model/aodv-id-cache.cc',
diff -Naur ns-3.23/src/applications/bindings/modulegen__gcc_ILP32.py ns-3.24/src/applications/bindings/modulegen__gcc_ILP32.py
--- ns-3.23/src/applications/bindings/modulegen__gcc_ILP32.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/applications/bindings/modulegen__gcc_ILP32.py	2015-09-15 11:18:44.000000000 -0700
@@ -110,6 +110,8 @@
     module.add_class('NodeContainer', import_from_module='ns.network')
     ## node-list.h (module 'network'): ns3::NodeList [class]
     module.add_class('NodeList', import_from_module='ns.network')
+    ## non-copyable.h (module 'core'): ns3::NonCopyable [class]
+    module.add_class('NonCopyable', destructor_visibility='protected', import_from_module='ns.core')
     ## object-base.h (module 'core'): ns3::ObjectBase [class]
     module.add_class('ObjectBase', allow_subclassing=True, import_from_module='ns.core')
     ## object.h (module 'core'): ns3::ObjectDeleter [struct]
@@ -155,7 +157,7 @@
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
+    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SSL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
     ## ping6-helper.h (module 'applications'): ns3::Ping6Helper [class]
@@ -234,6 +236,16 @@
     module.add_enum('', ['FRAME_FLAG_NONE', 'FRAME_FLAG_CFP', 'FRAME_FLAG_SHORT_PREAMBLE', 'FRAME_FLAG_WEP', 'FRAME_FLAG_FRAGMENTED', 'FRAME_FLAG_FCS_INCLUDED', 'FRAME_FLAG_DATA_PADDING', 'FRAME_FLAG_BAD_FCS', 'FRAME_FLAG_SHORT_GUARD'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
     ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
     module.add_enum('', ['CHANNEL_FLAG_NONE', 'CHANNEL_FLAG_TURBO', 'CHANNEL_FLAG_CCK', 'CHANNEL_FLAG_OFDM', 'CHANNEL_FLAG_SPECTRUM_2GHZ', 'CHANNEL_FLAG_SPECTRUM_5GHZ', 'CHANNEL_FLAG_PASSIVE', 'CHANNEL_FLAG_DYNAMIC', 'CHANNEL_FLAG_GFSK'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
+    module.add_enum('', ['MCS_KNOWN_NONE', 'MCS_KNOWN_BANDWIDTH', 'MCS_KNOWN_INDEX', 'MCS_KNOWN_GUARD_INTERVAL', 'MCS_KNOWN_HT_FORMAT', 'MCS_KNOWN_FEC_TYPE', 'MCS_KNOWN_STBC', 'MCS_KNOWN_NESS', 'MCS_KNOWN_NESS_BIT_1'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
+    module.add_enum('', ['MCS_FLAGS_NONE', 'MCS_FLAGS_BANDWIDTH_40', 'MCS_FLAGS_BANDWIDTH_20L', 'MCS_FLAGS_BANDWIDTH_20U', 'MCS_FLAGS_GUARD_INTERVAL', 'MCS_FLAGS_HT_GREENFIELD', 'MCS_FLAGS_FEC_TYPE', 'MCS_FLAGS_STBC_STREAMS', 'MCS_FLAGS_NESS_BIT_0'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
+    module.add_enum('', ['A_MPDU_STATUS_NONE', 'A_MPDU_STATUS_REPORT_ZERO_LENGTH', 'A_MPDU_STATUS_IS_ZERO_LENGTH', 'A_MPDU_STATUS_LAST_KNOWN', 'A_MPDU_STATUS_LAST', 'A_MPDU_STATUS_DELIMITER_CRC_ERROR', 'A_MPDU_STATUS_DELIMITER_CRC_KNOWN'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
+    module.add_enum('', ['VHT_KNOWN_NONE', 'VHT_KNOWN_STBC', 'VHT_KNOWN_TXOP_PS_NOT_ALLOWED', 'VHT_KNOWN_GUARD_INTERVAL', 'VHT_KNOWN_SHORT_GI_NSYM_DISAMBIGUATION', 'VHT_KNOWN_LDPC_EXTRA_OFDM_SYMBOL', 'VHT_KNOWN_BEAMFORMED', 'VHT_KNOWN_BANDWIDTH', 'VHT_KNOWN_GROUP_ID', 'VHT_KNOWN_PARTIAL_AID'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
+    module.add_enum('', ['VHT_FLAGS_NONE', 'VHT_FLAGS_STBC', 'VHT_FLAGS_TXOP_PS_NOT_ALLOWED', 'VHT_FLAGS_GUARD_INTERVAL', 'VHT_FLAGS_SHORT_GI_NSYM_DISAMBIGUATION', 'VHT_FLAGS__LDPC_EXTRA_OFDM_SYMBOL', 'VHT_FLAGS_BEAMFORMED'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
     ## random-variable-stream.h (module 'core'): ns3::RandomVariableStream [class]
     module.add_class('RandomVariableStream', import_from_module='ns.core', parent=root_module['ns3::Object'])
     ## red-queue.h (module 'network'): ns3::RedQueue [class]
@@ -544,9 +556,6 @@
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >', u'ns3::SequenceNumber8')
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >*', u'ns3::SequenceNumber8*')
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >&', u'ns3::SequenceNumber8&')
-    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *', u'ns3::SequenceNumber32TracedValueCallback')
-    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) **', u'ns3::SequenceNumber32TracedValueCallback*')
-    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *&', u'ns3::SequenceNumber32TracedValueCallback&')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::GenericPhyRxEndErrorCallback')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::GenericPhyRxEndErrorCallback*')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::GenericPhyRxEndErrorCallback&')
@@ -569,6 +578,12 @@
     register_types_ns3_Hash(nested_module)
     
     
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
+    
     ## Register a nested module for the namespace addressUtils
     
     nested_module = module.add_cpp_namespace('addressUtils')
@@ -615,6 +630,40 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *', u'ns3::TracedValueCallback::Double')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) **', u'ns3::TracedValueCallback::Double*')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *&', u'ns3::TracedValueCallback::Double&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *', u'ns3::TracedValueCallback::SequenceNumber32')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) **', u'ns3::TracedValueCallback::SequenceNumber32*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *&', u'ns3::TracedValueCallback::SequenceNumber32&')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *', u'ns3::TracedValueCallback::Int8')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) **', u'ns3::TracedValueCallback::Int8*')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *&', u'ns3::TracedValueCallback::Int8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *', u'ns3::TracedValueCallback::Uint8')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) **', u'ns3::TracedValueCallback::Uint8*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *&', u'ns3::TracedValueCallback::Uint8&')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *', u'ns3::TracedValueCallback::Int32')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) **', u'ns3::TracedValueCallback::Int32*')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *&', u'ns3::TracedValueCallback::Int32&')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *', u'ns3::TracedValueCallback::Bool')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) **', u'ns3::TracedValueCallback::Bool*')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *&', u'ns3::TracedValueCallback::Bool&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *', u'ns3::TracedValueCallback::Uint16')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) **', u'ns3::TracedValueCallback::Uint16*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *&', u'ns3::TracedValueCallback::Uint16&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *', u'ns3::TracedValueCallback::Uint32')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) **', u'ns3::TracedValueCallback::Uint32*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *&', u'ns3::TracedValueCallback::Uint32&')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *', u'ns3::TracedValueCallback::Int16')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) **', u'ns3::TracedValueCallback::Int16*')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *&', u'ns3::TracedValueCallback::Int16&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_types_ns3_addressUtils(module):
     root_module = module.get_root()
     
@@ -659,6 +708,7 @@
     register_Ns3NetDeviceContainer_methods(root_module, root_module['ns3::NetDeviceContainer'])
     register_Ns3NodeContainer_methods(root_module, root_module['ns3::NodeContainer'])
     register_Ns3NodeList_methods(root_module, root_module['ns3::NodeList'])
+    register_Ns3NonCopyable_methods(root_module, root_module['ns3::NonCopyable'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
     register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
     register_Ns3ObjectFactory_methods(root_module, root_module['ns3::ObjectFactory'])
@@ -1242,17 +1292,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -1274,11 +1324,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -1288,16 +1333,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -1561,14 +1596,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -1629,11 +1668,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3ChannelList_methods(root_module, cls):
@@ -2644,6 +2678,12 @@
                    is_static=True)
     return
 
+def register_Ns3NonCopyable_methods(root_module, cls):
+    ## non-copyable.h (module 'core'): ns3::NonCopyable::NonCopyable() [constructor]
+    cls.add_constructor([], 
+                        visibility='protected')
+    return
+
 def register_Ns3ObjectBase_methods(root_module, cls):
     ## object-base.h (module 'core'): ns3::ObjectBase::ObjectBase() [constructor]
     cls.add_constructor([])
@@ -3097,7 +3137,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -3321,10 +3361,10 @@
     cls.add_method('Close', 
                    'void', 
                    [])
-    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
+    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t & packets, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
     cls.add_method('Diff', 
                    'bool', 
-                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
+                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t &', 'packets'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
                    is_static=True)
     ## pcap-file.h (module 'network'): bool ns3::PcapFile::Eof() const [member function]
     cls.add_method('Eof', 
@@ -3388,10 +3428,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header & header, ns3::Ptr<ns3::Packet const> p) [member function]
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header const & header, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file.h (module 'network'): ns3::PcapFile::SNAPLEN_DEFAULT [variable]
     cls.add_static_attribute('SNAPLEN_DEFAULT', 'uint32_t const', is_const=True)
     ## pcap-file.h (module 'network'): ns3::PcapFile::ZONE_DEFAULT [variable]
@@ -3651,10 +3691,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -3997,6 +4037,11 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetParent() [member function]
+    cls.add_method('SetParent', 
+                   'ns3::TypeId', 
+                   [], 
+                   template_parameters=['ns3::Object'])
     ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
     cls.add_method('SetSize', 
                    'ns3::TypeId', 
@@ -4683,10 +4728,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header & header, ns3::Ptr<ns3::Packet const> p) [member function]
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header const & header, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('ns3::Time', 't'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('ns3::Time', 't'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, uint8_t const * buffer, uint32_t length) [member function]
     cls.add_method('Write', 
                    'void', 
@@ -4819,6 +4864,16 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_virtual=True)
+    ## radiotap-header.h (module 'network'): uint16_t ns3::RadiotapHeader::GetAmpduStatusFlags() const [member function]
+    cls.add_method('GetAmpduStatusFlags', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint32_t ns3::RadiotapHeader::GetAmpduStatusRef() const [member function]
+    cls.add_method('GetAmpduStatusRef', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetAntennaNoisePower() const [member function]
     cls.add_method('GetAntennaNoisePower', 
                    'uint8_t', 
@@ -4849,6 +4904,21 @@
                    'ns3::TypeId', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetMcsFlags() const [member function]
+    cls.add_method('GetMcsFlags', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetMcsKnown() const [member function]
+    cls.add_method('GetMcsKnown', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetMcsRate() const [member function]
+    cls.add_method('GetMcsRate', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetRate() const [member function]
     cls.add_method('GetRate', 
                    'uint8_t', 
@@ -4869,6 +4939,56 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetVhtBandwidth() const [member function]
+    cls.add_method('GetVhtBandwidth', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetVhtCoding() const [member function]
+    cls.add_method('GetVhtCoding', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetVhtFlags() const [member function]
+    cls.add_method('GetVhtFlags', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetVhtGroupId() const [member function]
+    cls.add_method('GetVhtGroupId', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint16_t ns3::RadiotapHeader::GetVhtKnown() const [member function]
+    cls.add_method('GetVhtKnown', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetVhtMcsNssUser1() const [member function]
+    cls.add_method('GetVhtMcsNssUser1', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetVhtMcsNssUser2() const [member function]
+    cls.add_method('GetVhtMcsNssUser2', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetVhtMcsNssUser3() const [member function]
+    cls.add_method('GetVhtMcsNssUser3', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetVhtMcsNssUser4() const [member function]
+    cls.add_method('GetVhtMcsNssUser4', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetVhtPartialAid() const [member function]
+    cls.add_method('GetVhtPartialAid', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## radiotap-header.h (module 'network'): void ns3::RadiotapHeader::Print(std::ostream & os) const [member function]
     cls.add_method('Print', 
                    'void', 
@@ -4879,6 +4999,10 @@
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
+    ## radiotap-header.h (module 'network'): void ns3::RadiotapHeader::SetAmpduStatus(uint32_t referenceNumber, uint16_t flags, uint8_t crc) [member function]
+    cls.add_method('SetAmpduStatus', 
+                   'void', 
+                   [param('uint32_t', 'referenceNumber'), param('uint16_t', 'flags'), param('uint8_t', 'crc')])
     ## radiotap-header.h (module 'network'): void ns3::RadiotapHeader::SetAntennaNoisePower(double noise) [member function]
     cls.add_method('SetAntennaNoisePower', 
                    'void', 
@@ -4895,6 +5019,10 @@
     cls.add_method('SetFrameFlags', 
                    'void', 
                    [param('uint8_t', 'flags')])
+    ## radiotap-header.h (module 'network'): void ns3::RadiotapHeader::SetMcsFields(uint8_t known, uint8_t flags, uint8_t mcs) [member function]
+    cls.add_method('SetMcsFields', 
+                   'void', 
+                   [param('uint8_t', 'known'), param('uint8_t', 'flags'), param('uint8_t', 'mcs')])
     ## radiotap-header.h (module 'network'): void ns3::RadiotapHeader::SetRate(uint8_t rate) [member function]
     cls.add_method('SetRate', 
                    'void', 
@@ -4903,6 +5031,10 @@
     cls.add_method('SetTsft', 
                    'void', 
                    [param('uint64_t', 'tsft')])
+    ## radiotap-header.h (module 'network'): void ns3::RadiotapHeader::SetVhtFields(uint16_t known, uint8_t flags, uint8_t bandwidth, uint8_t * mcs_nss, uint8_t coding, uint8_t group_id, uint16_t partial_aid) [member function]
+    cls.add_method('SetVhtFields', 
+                   'void', 
+                   [param('uint16_t', 'known'), param('uint8_t', 'flags'), param('uint8_t', 'bandwidth'), param('uint8_t *', 'mcs_nss'), param('uint8_t', 'coding'), param('uint8_t', 'group_id'), param('uint16_t', 'partial_aid')])
     return
 
 def register_Ns3RandomVariableStream_methods(root_module, cls):
@@ -6609,11 +6741,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -6732,6 +6874,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## data-calculator.h (module 'stats'): static ns3::TypeId ns3::DataCalculator::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Output(ns3::DataOutputCallback & callback) const [member function]
     cls.add_method('Output', 
                    'void', 
@@ -6806,6 +6953,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## data-output-interface.h (module 'stats'): static ns3::TypeId ns3::DataOutputInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## data-output-interface.h (module 'stats'): void ns3::DataOutputInterface::Output(ns3::DataCollector & dc) [member function]
     cls.add_method('Output', 
                    'void', 
@@ -6924,10 +7076,11 @@
     cls.add_constructor([param('ns3::DropTailQueue const &', 'arg0')])
     ## drop-tail-queue.h (module 'network'): ns3::DropTailQueue::DropTailQueue() [constructor]
     cls.add_constructor([])
-    ## drop-tail-queue.h (module 'network'): ns3::Queue::QueueMode ns3::DropTailQueue::GetMode() [member function]
+    ## drop-tail-queue.h (module 'network'): ns3::Queue::QueueMode ns3::DropTailQueue::GetMode() const [member function]
     cls.add_method('GetMode', 
                    'ns3::Queue::QueueMode', 
-                   [])
+                   [], 
+                   is_const=True)
     ## drop-tail-queue.h (module 'network'): static ns3::TypeId ns3::DropTailQueue::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -6976,10 +7129,10 @@
                    'double', 
                    [], 
                    is_virtual=True)
-    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
     cls.add_method('Interpolate', 
                    'double', 
-                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
                    visibility='private', is_virtual=True)
     ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
     cls.add_method('Validate', 
@@ -7804,6 +7957,11 @@
     cls.add_constructor([param('ns3::MinMaxAvgTotalCalculator< double > const &', 'arg0')])
     ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<double>::MinMaxAvgTotalCalculator() [constructor]
     cls.add_constructor([])
+    ## basic-data-calculators.h (module 'stats'): static ns3::TypeId ns3::MinMaxAvgTotalCalculator<double>::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<double>::Output(ns3::DataOutputCallback & callback) const [member function]
     cls.add_method('Output', 
                    'void', 
@@ -7869,6 +8027,11 @@
     cls.add_constructor([param('ns3::MinMaxAvgTotalCalculator< unsigned int > const &', 'arg0')])
     ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<unsigned int>::MinMaxAvgTotalCalculator() [constructor]
     cls.add_constructor([])
+    ## basic-data-calculators.h (module 'stats'): static ns3::TypeId ns3::MinMaxAvgTotalCalculator<unsigned int>::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::Output(ns3::DataOutputCallback & callback) const [member function]
     cls.add_method('Output', 
                    'void', 
@@ -8562,6 +8725,11 @@
     cls.add_method('FrameUpdate', 
                    'void', 
                    [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Mac48Address', 'realto')])
+    ## packet-data-calculators.h (module 'network'): static ns3::TypeId ns3::PacketSizeMinMaxAvgTotalCalculator::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## packet-data-calculators.h (module 'network'): void ns3::PacketSizeMinMaxAvgTotalCalculator::PacketUpdate(std::string path, ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('PacketUpdate', 
                    'void', 
@@ -10294,6 +10462,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::SimpleNetDevice >', 'device')], 
                    is_virtual=True)
+    ## simple-channel.h (module 'network'): void ns3::SimpleChannel::BlackList(ns3::Ptr<ns3::SimpleNetDevice> from, ns3::Ptr<ns3::SimpleNetDevice> to) [member function]
+    cls.add_method('BlackList', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SimpleNetDevice >', 'from'), param('ns3::Ptr< ns3::SimpleNetDevice >', 'to')], 
+                   is_virtual=True)
     ## simple-channel.h (module 'network'): ns3::Ptr<ns3::NetDevice> ns3::SimpleChannel::GetDevice(uint32_t i) const [member function]
     cls.add_method('GetDevice', 
                    'ns3::Ptr< ns3::NetDevice >', 
@@ -10314,6 +10487,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::Packet >', 'p'), param('uint16_t', 'protocol'), param('ns3::Mac48Address', 'to'), param('ns3::Mac48Address', 'from'), param('ns3::Ptr< ns3::SimpleNetDevice >', 'sender')], 
                    is_virtual=True)
+    ## simple-channel.h (module 'network'): void ns3::SimpleChannel::UnBlackList(ns3::Ptr<ns3::SimpleNetDevice> from, ns3::Ptr<ns3::SimpleNetDevice> to) [member function]
+    cls.add_method('UnBlackList', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SimpleNetDevice >', 'from'), param('ns3::Ptr< ns3::SimpleNetDevice >', 'to')], 
+                   is_virtual=True)
     return
 
 def register_Ns3SimpleNetDevice_methods(root_module, cls):
@@ -10956,6 +11134,11 @@
                    'unsigned int', 
                    [], 
                    is_const=True)
+    ## basic-data-calculators.h (module 'stats'): static ns3::TypeId ns3::CounterCalculator<unsigned int>::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## basic-data-calculators.h (module 'stats'): void ns3::CounterCalculator<unsigned int>::Output(ns3::DataOutputCallback & callback) const [member function]
     cls.add_method('Output', 
                    'void', 
@@ -10985,6 +11168,11 @@
     cls.add_method('FrameUpdate', 
                    'void', 
                    [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Mac48Address', 'realto')])
+    ## packet-data-calculators.h (module 'network'): static ns3::TypeId ns3::PacketCounterCalculator::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## packet-data-calculators.h (module 'network'): void ns3::PacketCounterCalculator::PacketUpdate(std::string path, ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('PacketUpdate', 
                    'void', 
@@ -11180,6 +11368,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     register_functions_ns3_addressUtils(module.get_submodule('addressUtils'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
@@ -11194,6 +11383,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def register_functions_ns3_addressUtils(module, root_module):
     return
 
diff -Naur ns-3.23/src/applications/bindings/modulegen__gcc_LP64.py ns-3.24/src/applications/bindings/modulegen__gcc_LP64.py
--- ns-3.23/src/applications/bindings/modulegen__gcc_LP64.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/applications/bindings/modulegen__gcc_LP64.py	2015-09-15 11:18:44.000000000 -0700
@@ -110,6 +110,8 @@
     module.add_class('NodeContainer', import_from_module='ns.network')
     ## node-list.h (module 'network'): ns3::NodeList [class]
     module.add_class('NodeList', import_from_module='ns.network')
+    ## non-copyable.h (module 'core'): ns3::NonCopyable [class]
+    module.add_class('NonCopyable', destructor_visibility='protected', import_from_module='ns.core')
     ## object-base.h (module 'core'): ns3::ObjectBase [class]
     module.add_class('ObjectBase', allow_subclassing=True, import_from_module='ns.core')
     ## object.h (module 'core'): ns3::ObjectDeleter [struct]
@@ -155,7 +157,7 @@
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
+    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SSL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
     ## ping6-helper.h (module 'applications'): ns3::Ping6Helper [class]
@@ -234,6 +236,16 @@
     module.add_enum('', ['FRAME_FLAG_NONE', 'FRAME_FLAG_CFP', 'FRAME_FLAG_SHORT_PREAMBLE', 'FRAME_FLAG_WEP', 'FRAME_FLAG_FRAGMENTED', 'FRAME_FLAG_FCS_INCLUDED', 'FRAME_FLAG_DATA_PADDING', 'FRAME_FLAG_BAD_FCS', 'FRAME_FLAG_SHORT_GUARD'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
     ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
     module.add_enum('', ['CHANNEL_FLAG_NONE', 'CHANNEL_FLAG_TURBO', 'CHANNEL_FLAG_CCK', 'CHANNEL_FLAG_OFDM', 'CHANNEL_FLAG_SPECTRUM_2GHZ', 'CHANNEL_FLAG_SPECTRUM_5GHZ', 'CHANNEL_FLAG_PASSIVE', 'CHANNEL_FLAG_DYNAMIC', 'CHANNEL_FLAG_GFSK'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
+    module.add_enum('', ['MCS_KNOWN_NONE', 'MCS_KNOWN_BANDWIDTH', 'MCS_KNOWN_INDEX', 'MCS_KNOWN_GUARD_INTERVAL', 'MCS_KNOWN_HT_FORMAT', 'MCS_KNOWN_FEC_TYPE', 'MCS_KNOWN_STBC', 'MCS_KNOWN_NESS', 'MCS_KNOWN_NESS_BIT_1'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
+    module.add_enum('', ['MCS_FLAGS_NONE', 'MCS_FLAGS_BANDWIDTH_40', 'MCS_FLAGS_BANDWIDTH_20L', 'MCS_FLAGS_BANDWIDTH_20U', 'MCS_FLAGS_GUARD_INTERVAL', 'MCS_FLAGS_HT_GREENFIELD', 'MCS_FLAGS_FEC_TYPE', 'MCS_FLAGS_STBC_STREAMS', 'MCS_FLAGS_NESS_BIT_0'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
+    module.add_enum('', ['A_MPDU_STATUS_NONE', 'A_MPDU_STATUS_REPORT_ZERO_LENGTH', 'A_MPDU_STATUS_IS_ZERO_LENGTH', 'A_MPDU_STATUS_LAST_KNOWN', 'A_MPDU_STATUS_LAST', 'A_MPDU_STATUS_DELIMITER_CRC_ERROR', 'A_MPDU_STATUS_DELIMITER_CRC_KNOWN'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
+    module.add_enum('', ['VHT_KNOWN_NONE', 'VHT_KNOWN_STBC', 'VHT_KNOWN_TXOP_PS_NOT_ALLOWED', 'VHT_KNOWN_GUARD_INTERVAL', 'VHT_KNOWN_SHORT_GI_NSYM_DISAMBIGUATION', 'VHT_KNOWN_LDPC_EXTRA_OFDM_SYMBOL', 'VHT_KNOWN_BEAMFORMED', 'VHT_KNOWN_BANDWIDTH', 'VHT_KNOWN_GROUP_ID', 'VHT_KNOWN_PARTIAL_AID'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
+    module.add_enum('', ['VHT_FLAGS_NONE', 'VHT_FLAGS_STBC', 'VHT_FLAGS_TXOP_PS_NOT_ALLOWED', 'VHT_FLAGS_GUARD_INTERVAL', 'VHT_FLAGS_SHORT_GI_NSYM_DISAMBIGUATION', 'VHT_FLAGS__LDPC_EXTRA_OFDM_SYMBOL', 'VHT_FLAGS_BEAMFORMED'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
     ## random-variable-stream.h (module 'core'): ns3::RandomVariableStream [class]
     module.add_class('RandomVariableStream', import_from_module='ns.core', parent=root_module['ns3::Object'])
     ## red-queue.h (module 'network'): ns3::RedQueue [class]
@@ -544,9 +556,6 @@
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >', u'ns3::SequenceNumber8')
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >*', u'ns3::SequenceNumber8*')
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >&', u'ns3::SequenceNumber8&')
-    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *', u'ns3::SequenceNumber32TracedValueCallback')
-    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) **', u'ns3::SequenceNumber32TracedValueCallback*')
-    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *&', u'ns3::SequenceNumber32TracedValueCallback&')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::GenericPhyRxEndErrorCallback')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::GenericPhyRxEndErrorCallback*')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::GenericPhyRxEndErrorCallback&')
@@ -569,6 +578,12 @@
     register_types_ns3_Hash(nested_module)
     
     
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
+    
     ## Register a nested module for the namespace addressUtils
     
     nested_module = module.add_cpp_namespace('addressUtils')
@@ -615,6 +630,40 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *', u'ns3::TracedValueCallback::Double')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) **', u'ns3::TracedValueCallback::Double*')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *&', u'ns3::TracedValueCallback::Double&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *', u'ns3::TracedValueCallback::SequenceNumber32')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) **', u'ns3::TracedValueCallback::SequenceNumber32*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *&', u'ns3::TracedValueCallback::SequenceNumber32&')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *', u'ns3::TracedValueCallback::Int8')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) **', u'ns3::TracedValueCallback::Int8*')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *&', u'ns3::TracedValueCallback::Int8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *', u'ns3::TracedValueCallback::Uint8')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) **', u'ns3::TracedValueCallback::Uint8*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *&', u'ns3::TracedValueCallback::Uint8&')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *', u'ns3::TracedValueCallback::Int32')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) **', u'ns3::TracedValueCallback::Int32*')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *&', u'ns3::TracedValueCallback::Int32&')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *', u'ns3::TracedValueCallback::Bool')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) **', u'ns3::TracedValueCallback::Bool*')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *&', u'ns3::TracedValueCallback::Bool&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *', u'ns3::TracedValueCallback::Uint16')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) **', u'ns3::TracedValueCallback::Uint16*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *&', u'ns3::TracedValueCallback::Uint16&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *', u'ns3::TracedValueCallback::Uint32')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) **', u'ns3::TracedValueCallback::Uint32*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *&', u'ns3::TracedValueCallback::Uint32&')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *', u'ns3::TracedValueCallback::Int16')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) **', u'ns3::TracedValueCallback::Int16*')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *&', u'ns3::TracedValueCallback::Int16&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_types_ns3_addressUtils(module):
     root_module = module.get_root()
     
@@ -659,6 +708,7 @@
     register_Ns3NetDeviceContainer_methods(root_module, root_module['ns3::NetDeviceContainer'])
     register_Ns3NodeContainer_methods(root_module, root_module['ns3::NodeContainer'])
     register_Ns3NodeList_methods(root_module, root_module['ns3::NodeList'])
+    register_Ns3NonCopyable_methods(root_module, root_module['ns3::NonCopyable'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
     register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
     register_Ns3ObjectFactory_methods(root_module, root_module['ns3::ObjectFactory'])
@@ -1242,17 +1292,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -1274,11 +1324,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -1288,16 +1333,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -1561,14 +1596,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -1629,11 +1668,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3ChannelList_methods(root_module, cls):
@@ -2644,6 +2678,12 @@
                    is_static=True)
     return
 
+def register_Ns3NonCopyable_methods(root_module, cls):
+    ## non-copyable.h (module 'core'): ns3::NonCopyable::NonCopyable() [constructor]
+    cls.add_constructor([], 
+                        visibility='protected')
+    return
+
 def register_Ns3ObjectBase_methods(root_module, cls):
     ## object-base.h (module 'core'): ns3::ObjectBase::ObjectBase() [constructor]
     cls.add_constructor([])
@@ -3097,7 +3137,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -3321,10 +3361,10 @@
     cls.add_method('Close', 
                    'void', 
                    [])
-    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
+    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t & packets, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
     cls.add_method('Diff', 
                    'bool', 
-                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
+                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t &', 'packets'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
                    is_static=True)
     ## pcap-file.h (module 'network'): bool ns3::PcapFile::Eof() const [member function]
     cls.add_method('Eof', 
@@ -3388,10 +3428,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header & header, ns3::Ptr<ns3::Packet const> p) [member function]
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header const & header, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file.h (module 'network'): ns3::PcapFile::SNAPLEN_DEFAULT [variable]
     cls.add_static_attribute('SNAPLEN_DEFAULT', 'uint32_t const', is_const=True)
     ## pcap-file.h (module 'network'): ns3::PcapFile::ZONE_DEFAULT [variable]
@@ -3651,10 +3691,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -3997,6 +4037,11 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetParent() [member function]
+    cls.add_method('SetParent', 
+                   'ns3::TypeId', 
+                   [], 
+                   template_parameters=['ns3::Object'])
     ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
     cls.add_method('SetSize', 
                    'ns3::TypeId', 
@@ -4683,10 +4728,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header & header, ns3::Ptr<ns3::Packet const> p) [member function]
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header const & header, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('ns3::Time', 't'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('ns3::Time', 't'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, uint8_t const * buffer, uint32_t length) [member function]
     cls.add_method('Write', 
                    'void', 
@@ -4819,6 +4864,16 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_virtual=True)
+    ## radiotap-header.h (module 'network'): uint16_t ns3::RadiotapHeader::GetAmpduStatusFlags() const [member function]
+    cls.add_method('GetAmpduStatusFlags', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint32_t ns3::RadiotapHeader::GetAmpduStatusRef() const [member function]
+    cls.add_method('GetAmpduStatusRef', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetAntennaNoisePower() const [member function]
     cls.add_method('GetAntennaNoisePower', 
                    'uint8_t', 
@@ -4849,6 +4904,21 @@
                    'ns3::TypeId', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetMcsFlags() const [member function]
+    cls.add_method('GetMcsFlags', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetMcsKnown() const [member function]
+    cls.add_method('GetMcsKnown', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetMcsRate() const [member function]
+    cls.add_method('GetMcsRate', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetRate() const [member function]
     cls.add_method('GetRate', 
                    'uint8_t', 
@@ -4869,6 +4939,56 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetVhtBandwidth() const [member function]
+    cls.add_method('GetVhtBandwidth', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetVhtCoding() const [member function]
+    cls.add_method('GetVhtCoding', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetVhtFlags() const [member function]
+    cls.add_method('GetVhtFlags', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetVhtGroupId() const [member function]
+    cls.add_method('GetVhtGroupId', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint16_t ns3::RadiotapHeader::GetVhtKnown() const [member function]
+    cls.add_method('GetVhtKnown', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetVhtMcsNssUser1() const [member function]
+    cls.add_method('GetVhtMcsNssUser1', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetVhtMcsNssUser2() const [member function]
+    cls.add_method('GetVhtMcsNssUser2', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetVhtMcsNssUser3() const [member function]
+    cls.add_method('GetVhtMcsNssUser3', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetVhtMcsNssUser4() const [member function]
+    cls.add_method('GetVhtMcsNssUser4', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetVhtPartialAid() const [member function]
+    cls.add_method('GetVhtPartialAid', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## radiotap-header.h (module 'network'): void ns3::RadiotapHeader::Print(std::ostream & os) const [member function]
     cls.add_method('Print', 
                    'void', 
@@ -4879,6 +4999,10 @@
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
+    ## radiotap-header.h (module 'network'): void ns3::RadiotapHeader::SetAmpduStatus(uint32_t referenceNumber, uint16_t flags, uint8_t crc) [member function]
+    cls.add_method('SetAmpduStatus', 
+                   'void', 
+                   [param('uint32_t', 'referenceNumber'), param('uint16_t', 'flags'), param('uint8_t', 'crc')])
     ## radiotap-header.h (module 'network'): void ns3::RadiotapHeader::SetAntennaNoisePower(double noise) [member function]
     cls.add_method('SetAntennaNoisePower', 
                    'void', 
@@ -4895,6 +5019,10 @@
     cls.add_method('SetFrameFlags', 
                    'void', 
                    [param('uint8_t', 'flags')])
+    ## radiotap-header.h (module 'network'): void ns3::RadiotapHeader::SetMcsFields(uint8_t known, uint8_t flags, uint8_t mcs) [member function]
+    cls.add_method('SetMcsFields', 
+                   'void', 
+                   [param('uint8_t', 'known'), param('uint8_t', 'flags'), param('uint8_t', 'mcs')])
     ## radiotap-header.h (module 'network'): void ns3::RadiotapHeader::SetRate(uint8_t rate) [member function]
     cls.add_method('SetRate', 
                    'void', 
@@ -4903,6 +5031,10 @@
     cls.add_method('SetTsft', 
                    'void', 
                    [param('uint64_t', 'tsft')])
+    ## radiotap-header.h (module 'network'): void ns3::RadiotapHeader::SetVhtFields(uint16_t known, uint8_t flags, uint8_t bandwidth, uint8_t * mcs_nss, uint8_t coding, uint8_t group_id, uint16_t partial_aid) [member function]
+    cls.add_method('SetVhtFields', 
+                   'void', 
+                   [param('uint16_t', 'known'), param('uint8_t', 'flags'), param('uint8_t', 'bandwidth'), param('uint8_t *', 'mcs_nss'), param('uint8_t', 'coding'), param('uint8_t', 'group_id'), param('uint16_t', 'partial_aid')])
     return
 
 def register_Ns3RandomVariableStream_methods(root_module, cls):
@@ -6609,11 +6741,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -6732,6 +6874,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## data-calculator.h (module 'stats'): static ns3::TypeId ns3::DataCalculator::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Output(ns3::DataOutputCallback & callback) const [member function]
     cls.add_method('Output', 
                    'void', 
@@ -6806,6 +6953,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## data-output-interface.h (module 'stats'): static ns3::TypeId ns3::DataOutputInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## data-output-interface.h (module 'stats'): void ns3::DataOutputInterface::Output(ns3::DataCollector & dc) [member function]
     cls.add_method('Output', 
                    'void', 
@@ -6924,10 +7076,11 @@
     cls.add_constructor([param('ns3::DropTailQueue const &', 'arg0')])
     ## drop-tail-queue.h (module 'network'): ns3::DropTailQueue::DropTailQueue() [constructor]
     cls.add_constructor([])
-    ## drop-tail-queue.h (module 'network'): ns3::Queue::QueueMode ns3::DropTailQueue::GetMode() [member function]
+    ## drop-tail-queue.h (module 'network'): ns3::Queue::QueueMode ns3::DropTailQueue::GetMode() const [member function]
     cls.add_method('GetMode', 
                    'ns3::Queue::QueueMode', 
-                   [])
+                   [], 
+                   is_const=True)
     ## drop-tail-queue.h (module 'network'): static ns3::TypeId ns3::DropTailQueue::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -6976,10 +7129,10 @@
                    'double', 
                    [], 
                    is_virtual=True)
-    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
     cls.add_method('Interpolate', 
                    'double', 
-                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
                    visibility='private', is_virtual=True)
     ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
     cls.add_method('Validate', 
@@ -7804,6 +7957,11 @@
     cls.add_constructor([param('ns3::MinMaxAvgTotalCalculator< double > const &', 'arg0')])
     ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<double>::MinMaxAvgTotalCalculator() [constructor]
     cls.add_constructor([])
+    ## basic-data-calculators.h (module 'stats'): static ns3::TypeId ns3::MinMaxAvgTotalCalculator<double>::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<double>::Output(ns3::DataOutputCallback & callback) const [member function]
     cls.add_method('Output', 
                    'void', 
@@ -7869,6 +8027,11 @@
     cls.add_constructor([param('ns3::MinMaxAvgTotalCalculator< unsigned int > const &', 'arg0')])
     ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<unsigned int>::MinMaxAvgTotalCalculator() [constructor]
     cls.add_constructor([])
+    ## basic-data-calculators.h (module 'stats'): static ns3::TypeId ns3::MinMaxAvgTotalCalculator<unsigned int>::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::Output(ns3::DataOutputCallback & callback) const [member function]
     cls.add_method('Output', 
                    'void', 
@@ -8562,6 +8725,11 @@
     cls.add_method('FrameUpdate', 
                    'void', 
                    [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Mac48Address', 'realto')])
+    ## packet-data-calculators.h (module 'network'): static ns3::TypeId ns3::PacketSizeMinMaxAvgTotalCalculator::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## packet-data-calculators.h (module 'network'): void ns3::PacketSizeMinMaxAvgTotalCalculator::PacketUpdate(std::string path, ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('PacketUpdate', 
                    'void', 
@@ -10294,6 +10462,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::SimpleNetDevice >', 'device')], 
                    is_virtual=True)
+    ## simple-channel.h (module 'network'): void ns3::SimpleChannel::BlackList(ns3::Ptr<ns3::SimpleNetDevice> from, ns3::Ptr<ns3::SimpleNetDevice> to) [member function]
+    cls.add_method('BlackList', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SimpleNetDevice >', 'from'), param('ns3::Ptr< ns3::SimpleNetDevice >', 'to')], 
+                   is_virtual=True)
     ## simple-channel.h (module 'network'): ns3::Ptr<ns3::NetDevice> ns3::SimpleChannel::GetDevice(uint32_t i) const [member function]
     cls.add_method('GetDevice', 
                    'ns3::Ptr< ns3::NetDevice >', 
@@ -10314,6 +10487,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::Packet >', 'p'), param('uint16_t', 'protocol'), param('ns3::Mac48Address', 'to'), param('ns3::Mac48Address', 'from'), param('ns3::Ptr< ns3::SimpleNetDevice >', 'sender')], 
                    is_virtual=True)
+    ## simple-channel.h (module 'network'): void ns3::SimpleChannel::UnBlackList(ns3::Ptr<ns3::SimpleNetDevice> from, ns3::Ptr<ns3::SimpleNetDevice> to) [member function]
+    cls.add_method('UnBlackList', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SimpleNetDevice >', 'from'), param('ns3::Ptr< ns3::SimpleNetDevice >', 'to')], 
+                   is_virtual=True)
     return
 
 def register_Ns3SimpleNetDevice_methods(root_module, cls):
@@ -10956,6 +11134,11 @@
                    'unsigned int', 
                    [], 
                    is_const=True)
+    ## basic-data-calculators.h (module 'stats'): static ns3::TypeId ns3::CounterCalculator<unsigned int>::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## basic-data-calculators.h (module 'stats'): void ns3::CounterCalculator<unsigned int>::Output(ns3::DataOutputCallback & callback) const [member function]
     cls.add_method('Output', 
                    'void', 
@@ -10985,6 +11168,11 @@
     cls.add_method('FrameUpdate', 
                    'void', 
                    [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Mac48Address', 'realto')])
+    ## packet-data-calculators.h (module 'network'): static ns3::TypeId ns3::PacketCounterCalculator::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## packet-data-calculators.h (module 'network'): void ns3::PacketCounterCalculator::PacketUpdate(std::string path, ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('PacketUpdate', 
                    'void', 
@@ -11180,6 +11368,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     register_functions_ns3_addressUtils(module.get_submodule('addressUtils'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
@@ -11194,6 +11383,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def register_functions_ns3_addressUtils(module, root_module):
     return
 
diff -Naur ns-3.23/src/applications/model/application-packet-probe.cc ns-3.24/src/applications/model/application-packet-probe.cc
--- ns-3.23/src/applications/model/application-packet-probe.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/applications/model/application-packet-probe.cc	2015-09-15 11:18:44.000000000 -0700
@@ -45,11 +45,11 @@
                       "The packet plus its socket address that serve "
                       "as the output for this probe",
                       MakeTraceSourceAccessor (&ApplicationPacketProbe::m_output),
-                      "ns3::Packet::PacketAddressTracedCallback")
+                      "ns3::Packet::AddressTracedCallback")
     .AddTraceSource ( "OutputBytes",
                       "The number of bytes in the packet",
                       MakeTraceSourceAccessor (&ApplicationPacketProbe::m_outputBytes),
-                      "ns3::Packet::PacketSizeTracedCallback")
+                      "ns3::Packet::SizeTracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.23/src/applications/model/packet-sink.cc ns-3.24/src/applications/model/packet-sink.cc
--- ns-3.23/src/applications/model/packet-sink.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/applications/model/packet-sink.cc	2015-09-15 11:18:44.000000000 -0700
@@ -58,7 +58,7 @@
     .AddTraceSource ("Rx",
                      "A packet has been received",
                      MakeTraceSourceAccessor (&PacketSink::m_rxTrace),
-                     "ns3::Packet::PacketAddressTracedCallback")
+                     "ns3::Packet::AddressTracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.23/src/applications/model/radvd-interface.h ns-3.24/src/applications/model/radvd-interface.h
--- ns-3.23/src/applications/model/radvd-interface.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/applications/model/radvd-interface.h	2015-09-15 11:18:44.000000000 -0700
@@ -317,7 +317,7 @@
 
   /**
    * \brief Set the last RA send time. It also decrements the initial Rtr Advertisements counter.
-   * \param the last RA send time
+   * \param now the last RA send time
    */
   void SetLastRaTxTime (Time now);
 
diff -Naur ns-3.23/src/bridge/bindings/modulegen__gcc_ILP32.py ns-3.24/src/bridge/bindings/modulegen__gcc_ILP32.py
--- ns-3.23/src/bridge/bindings/modulegen__gcc_ILP32.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/bridge/bindings/modulegen__gcc_ILP32.py	2015-09-15 11:18:44.000000000 -0700
@@ -172,6 +172,12 @@
     nested_module = module.add_cpp_namespace('Hash')
     register_types_ns3_Hash(nested_module)
     
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -207,6 +213,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -417,11 +430,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3Hasher_methods(root_module, cls):
@@ -1935,11 +1943,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -2811,6 +2829,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -2823,6 +2842,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.23/src/bridge/bindings/modulegen__gcc_LP64.py ns-3.24/src/bridge/bindings/modulegen__gcc_LP64.py
--- ns-3.23/src/bridge/bindings/modulegen__gcc_LP64.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/bridge/bindings/modulegen__gcc_LP64.py	2015-09-15 11:18:44.000000000 -0700
@@ -172,6 +172,12 @@
     nested_module = module.add_cpp_namespace('Hash')
     register_types_ns3_Hash(nested_module)
     
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -207,6 +213,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -417,11 +430,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3Hasher_methods(root_module, cls):
@@ -1935,11 +1943,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -2811,6 +2829,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -2823,6 +2842,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.23/src/bridge/helper/bridge-helper.h ns-3.24/src/bridge/helper/bridge-helper.h
--- ns-3.23/src/bridge/helper/bridge-helper.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/bridge/helper/bridge-helper.h	2015-09-15 11:18:44.000000000 -0700
@@ -31,6 +31,7 @@
 class AttributeValue;
 
 /**
+ * \ingroup bridge
  * \brief Add capability to bridge multiple LAN segments (IEEE 802.1D bridging)
  */
 class BridgeHelper
diff -Naur ns-3.23/src/bridge/model/bridge-channel.h ns-3.24/src/bridge/model/bridge-channel.h
--- ns-3.23/src/bridge/model/bridge-channel.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/bridge/model/bridge-channel.h	2015-09-15 11:18:44.000000000 -0700
@@ -36,10 +36,18 @@
 class BridgeChannel : public Channel
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   BridgeChannel ();
   virtual ~BridgeChannel ();
 
+  /**
+   * Adds a channel to the bridged pool
+   * \param bridgedChannel  the channel to add to the pool
+   */
   void AddChannel (Ptr<Channel> bridgedChannel);
 
   // virtual methods implementation, from Channel
@@ -48,10 +56,22 @@
 
 private:
 
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   */
   BridgeChannel (const BridgeChannel &);
+
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   * \returns
+   */
   BridgeChannel &operator = (const BridgeChannel &);
 
-  std::vector< Ptr<Channel> > m_bridgedChannels;
+  std::vector< Ptr<Channel> > m_bridgedChannels; //!< pool of bridged channels
 
 };
 
diff -Naur ns-3.23/src/bridge/model/bridge-net-device.h ns-3.24/src/bridge/model/bridge-net-device.h
--- ns-3.23/src/bridge/model/bridge-net-device.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/bridge/model/bridge-net-device.h	2015-09-15 11:18:44.000000000 -0700
@@ -65,12 +65,17 @@
 class BridgeNetDevice : public NetDevice
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   BridgeNetDevice ();
   virtual ~BridgeNetDevice ();
 
   /** 
    * \brief Add a 'port' to a bridge device
+   * \param bridgePort the NetDevice to add
    *
    * This method adds a new bridge port to a BridgeNetDevice, so that
    * the new bridge port NetDevice becomes part of the bridge and L2
@@ -84,8 +89,18 @@
    */
   void AddBridgePort (Ptr<NetDevice> bridgePort);
 
+  /**
+   * \brief Gets the number of bridged 'ports', i.e., the NetDevices currently bridged.
+   *
+   * \return the number of bridged ports.
+   */
   uint32_t GetNBridgePorts (void) const;
 
+  /**
+   * \brief Gets the n-th bridged port.
+   * \param n the port index
+   * \return the n-th bridged NetDevice
+   */
   Ptr<NetDevice> GetBridgePort (uint32_t n) const;
 
   // inherited from NetDevice base class.
@@ -117,36 +132,92 @@
 protected:
   virtual void DoDispose (void);
 
+  /**
+   * \brief Receives a packet from one bridged port.
+   * \param device the originating port
+   * \param packet the received packet
+   * \param protocol the packet protocol (e.g., Ethertype)
+   * \param source the packet source
+   * \param destination the packet destination
+   * \param packetType the packet type (e.g., host, broadcast, etc.)
+   */
   void ReceiveFromDevice (Ptr<NetDevice> device, Ptr<const Packet> packet, uint16_t protocol,
                           Address const &source, Address const &destination, PacketType packetType);
+
+  /**
+   * \brief Forwards a unicast packet
+   * \param incomingPort the packet incoming port
+   * \param packet the packet
+   * \param protocol the packet protocol (e.g., Ethertype)
+   * \param src the packet source
+   * \param dst the packet destination
+   */
   void ForwardUnicast (Ptr<NetDevice> incomingPort, Ptr<const Packet> packet,
                        uint16_t protocol, Mac48Address src, Mac48Address dst);
+
+  /**
+   * \brief Forwards a broadcast or a multicast packet
+   * \param incomingPort the packet incoming port
+   * \param packet the packet
+   * \param protocol the packet protocol (e.g., Ethertype)
+   * \param src the packet source
+   * \param dst the packet destination
+   */
   void ForwardBroadcast (Ptr<NetDevice> incomingPort, Ptr<const Packet> packet,
                          uint16_t protocol, Mac48Address src, Mac48Address dst);
+
+  /**
+   * \brief Learns the port a MAC address is sending from
+   * \param source source address
+   * \param port the port the source is sending from
+   */
   void Learn (Mac48Address source, Ptr<NetDevice> port);
+
+  /**
+   * \brief Gets the port associated to a source address
+   * \param source the source address
+   * \returns the port the source is associated to, or NULL if no association is known.
+   */
   Ptr<NetDevice> GetLearnedState (Mac48Address source);
 
 private:
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   */
   BridgeNetDevice (const BridgeNetDevice &);
+
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   * \returns
+   */
   BridgeNetDevice &operator = (const BridgeNetDevice &);
 
-  NetDevice::ReceiveCallback m_rxCallback;
-  NetDevice::PromiscReceiveCallback m_promiscRxCallback;
+  NetDevice::ReceiveCallback m_rxCallback; //!< receive callback
+  NetDevice::PromiscReceiveCallback m_promiscRxCallback; //!< promiscuous receive callback
 
-  Mac48Address m_address;
-  Time m_expirationTime; // time it takes for learned MAC state to expire
+  Mac48Address m_address; //!< MAC address of the NetDevice
+  Time m_expirationTime;  //!< time it takes for learned MAC state to expire
+
+  /**
+   * \ingroup bridge
+   * Structure holding the status of an address
+   */
   struct LearnedState
   {
-    Ptr<NetDevice> associatedPort;
-    Time expirationTime;
+    Ptr<NetDevice> associatedPort; //!< port associated with the address
+    Time expirationTime;  //!< time it takes for learned MAC state to expire
   };
-  std::map<Mac48Address, LearnedState> m_learnState;
-  Ptr<Node> m_node;
-  Ptr<BridgeChannel> m_channel;
-  std::vector< Ptr<NetDevice> > m_ports;
-  uint32_t m_ifIndex;
-  uint16_t m_mtu;
-  bool m_enableLearning;
+  std::map<Mac48Address, LearnedState> m_learnState; //!< Container for known address statuses
+  Ptr<Node> m_node; //!< node owning this NetDevice
+  Ptr<BridgeChannel> m_channel; //!< virtual bridged channel
+  std::vector< Ptr<NetDevice> > m_ports; //!< bridged ports
+  uint32_t m_ifIndex; //!< Interface index
+  uint16_t m_mtu; //!< MTU of the bridged NetDevice
+  bool m_enableLearning; //!< true if the bridge will learn the node status
 };
 
 } // namespace ns3
diff -Naur ns-3.23/src/buildings/bindings/modulegen__gcc_ILP32.py ns-3.24/src/buildings/bindings/modulegen__gcc_ILP32.py
--- ns-3.23/src/buildings/bindings/modulegen__gcc_ILP32.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/buildings/bindings/modulegen__gcc_ILP32.py	2015-09-15 11:18:44.000000000 -0700
@@ -296,6 +296,12 @@
     nested_module = module.add_cpp_namespace('Hash')
     register_types_ns3_Hash(nested_module)
     
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -331,6 +337,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -721,11 +734,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3ConstantVelocityHelper_methods(root_module, cls):
@@ -3108,11 +3116,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -3222,10 +3240,10 @@
                    'double', 
                    [], 
                    is_virtual=True)
-    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
     cls.add_method('Interpolate', 
                    'double', 
-                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
                    visibility='private', is_virtual=True)
     ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
     cls.add_method('Validate', 
@@ -4631,6 +4649,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -4643,6 +4662,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.23/src/buildings/bindings/modulegen__gcc_LP64.py ns-3.24/src/buildings/bindings/modulegen__gcc_LP64.py
--- ns-3.23/src/buildings/bindings/modulegen__gcc_LP64.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/buildings/bindings/modulegen__gcc_LP64.py	2015-09-15 11:18:44.000000000 -0700
@@ -296,6 +296,12 @@
     nested_module = module.add_cpp_namespace('Hash')
     register_types_ns3_Hash(nested_module)
     
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -331,6 +337,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -721,11 +734,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3ConstantVelocityHelper_methods(root_module, cls):
@@ -3108,11 +3116,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -3222,10 +3240,10 @@
                    'double', 
                    [], 
                    is_virtual=True)
-    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
     cls.add_method('Interpolate', 
                    'double', 
-                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
                    visibility='private', is_virtual=True)
     ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
     cls.add_method('Validate', 
@@ -4631,6 +4649,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -4643,6 +4662,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.23/src/click/model/ipv4-l3-click-protocol.cc ns-3.24/src/click/model/ipv4-l3-click-protocol.cc
--- ns-3.23/src/click/model/ipv4-l3-click-protocol.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/click/model/ipv4-l3-click-protocol.cc	2015-09-15 11:18:44.000000000 -0700
@@ -108,7 +108,7 @@
           this->SetNode (node);
         }
     }
-  Object::NotifyNewAggregate ();
+  Ipv4::NotifyNewAggregate ();
 }
 
 void
diff -Naur ns-3.23/src/click/model/ipv4-l3-click-protocol.h ns-3.24/src/click/model/ipv4-l3-click-protocol.h
--- ns-3.23/src/click/model/ipv4-l3-click-protocol.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/click/model/ipv4-l3-click-protocol.h	2015-09-15 11:18:44.000000000 -0700
@@ -264,8 +264,11 @@
 
   Ptr<Node> m_node;
 
+  /** \todo Remove; this TracedCallback is never invoked. */
   TracedCallback<const Ipv4Header &, Ptr<const Packet>, uint32_t> m_sendOutgoingTrace;
+  /** \todo Remove: this TracedCallback is never invoked. */
   TracedCallback<const Ipv4Header &, Ptr<const Packet>, uint32_t> m_unicastForwardTrace;
+  /** \todo This TracedCallback is invoked but not accessible. */
   TracedCallback<const Ipv4Header &, Ptr<const Packet>, uint32_t> m_localDeliverTrace;
 
   SocketList m_sockets;
diff -Naur ns-3.23/src/config-store/bindings/modulegen__gcc_ILP32.py ns-3.24/src/config-store/bindings/modulegen__gcc_ILP32.py
--- ns-3.23/src/config-store/bindings/modulegen__gcc_ILP32.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/config-store/bindings/modulegen__gcc_ILP32.py	2015-09-15 11:18:44.000000000 -0700
@@ -175,11 +175,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3FileConfig_methods(root_module, cls):
@@ -792,11 +787,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
diff -Naur ns-3.23/src/config-store/bindings/modulegen__gcc_LP64.py ns-3.24/src/config-store/bindings/modulegen__gcc_LP64.py
--- ns-3.23/src/config-store/bindings/modulegen__gcc_LP64.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/config-store/bindings/modulegen__gcc_LP64.py	2015-09-15 11:18:44.000000000 -0700
@@ -175,11 +175,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3FileConfig_methods(root_module, cls):
@@ -792,11 +787,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
diff -Naur ns-3.23/src/config-store/model/config-store.cc ns-3.24/src/config-store/model/config-store.cc
--- ns-3.23/src/config-store/model/config-store.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/config-store/model/config-store.cc	2015-09-15 11:18:44.000000000 -0700
@@ -1,3 +1,23 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2009 INRIA
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
+ */
+
 #include "config-store.h"
 #include "raw-text-config.h"
 #include "ns3/abort.h"
diff -Naur ns-3.23/src/config-store/model/config-store.h ns-3.24/src/config-store/model/config-store.h
--- ns-3.23/src/config-store/model/config-store.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/config-store/model/config-store.h	2015-09-15 11:18:44.000000000 -0700
@@ -1,3 +1,23 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2009 INRIA
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
+ */
+
 #ifndef CONFIG_STORE_H
 #define CONFIG_STORE_H
 
diff -Naur ns-3.23/src/config-store/model/file-config.cc ns-3.24/src/config-store/model/file-config.cc
--- ns-3.23/src/config-store/model/file-config.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/config-store/model/file-config.cc	2015-09-15 11:18:44.000000000 -0700
@@ -1,3 +1,23 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2009 INRIA
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
+ */
+
 #include "file-config.h"
 
 namespace ns3 {
diff -Naur ns-3.23/src/config-store/model/file-config.h ns-3.24/src/config-store/model/file-config.h
--- ns-3.23/src/config-store/model/file-config.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/config-store/model/file-config.h	2015-09-15 11:18:44.000000000 -0700
@@ -1,3 +1,23 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2009 INRIA
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
+ */
+
 #ifndef FILE_CONFIG_H
 #define FILE_CONFIG_H
 
diff -Naur ns-3.23/src/config-store/model/raw-text-config.cc ns-3.24/src/config-store/model/raw-text-config.cc
--- ns-3.23/src/config-store/model/raw-text-config.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/config-store/model/raw-text-config.cc	2015-09-15 11:18:44.000000000 -0700
@@ -1,3 +1,23 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2009 INRIA
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
+ */
+
 #include "raw-text-config.h"
 #include "attribute-iterator.h"
 #include "attribute-default-iterator.h"
diff -Naur ns-3.23/src/config-store/model/raw-text-config.h ns-3.24/src/config-store/model/raw-text-config.h
--- ns-3.23/src/config-store/model/raw-text-config.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/config-store/model/raw-text-config.h	2015-09-15 11:18:44.000000000 -0700
@@ -1,3 +1,23 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2009 INRIA
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
+ */
+
 #ifndef RAW_TEXT_CONFIG_H
 #define RAW_TEXT_CONFIG_H
 
diff -Naur ns-3.23/src/config-store/model/xml-config.cc ns-3.24/src/config-store/model/xml-config.cc
--- ns-3.23/src/config-store/model/xml-config.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/config-store/model/xml-config.cc	2015-09-15 11:18:44.000000000 -0700
@@ -1,3 +1,23 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2009 INRIA
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
+ */
+
 #include "xml-config.h"
 #include "attribute-default-iterator.h"
 #include "attribute-iterator.h"
diff -Naur ns-3.23/src/config-store/model/xml-config.h ns-3.24/src/config-store/model/xml-config.h
--- ns-3.23/src/config-store/model/xml-config.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/config-store/model/xml-config.h	2015-09-15 11:18:44.000000000 -0700
@@ -1,3 +1,23 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2009 INRIA
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
+ */
+
 #ifndef XML_CONFIG_STORE_H
 #define XML_CONFIG_STORE_H
 
diff -Naur ns-3.23/src/core/bindings/modulegen__gcc_ILP32.py ns-3.24/src/core/bindings/modulegen__gcc_ILP32.py
--- ns-3.23/src/core/bindings/modulegen__gcc_ILP32.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/bindings/modulegen__gcc_ILP32.py	2015-09-15 11:18:44.000000000 -0700
@@ -72,6 +72,8 @@
     module.add_class('LogComponent')
     ## names.h (module 'core'): ns3::Names [class]
     module.add_class('Names')
+    ## non-copyable.h (module 'core'): ns3::NonCopyable [class]
+    module.add_class('NonCopyable', destructor_visibility='protected')
     ## object-base.h (module 'core'): ns3::ObjectBase [class]
     module.add_class('ObjectBase', allow_subclassing=True)
     ## object.h (module 'core'): ns3::ObjectDeleter [struct]
@@ -346,6 +348,12 @@
     register_types_ns3_SystemPath(nested_module)
     
     
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
+    
     ## Register a nested module for the namespace internal
     
     nested_module = module.add_cpp_namespace('internal')
@@ -403,6 +411,37 @@
     
     module.add_container('std::list< std::string >', 'std::string', container_type=u'list')
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *', u'ns3::TracedValueCallback::Uint8')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) **', u'ns3::TracedValueCallback::Uint8*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *&', u'ns3::TracedValueCallback::Uint8&')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *', u'ns3::TracedValueCallback::Int8')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) **', u'ns3::TracedValueCallback::Int8*')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *&', u'ns3::TracedValueCallback::Int8&')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *', u'ns3::TracedValueCallback::Double')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) **', u'ns3::TracedValueCallback::Double*')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *&', u'ns3::TracedValueCallback::Double&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *', u'ns3::TracedValueCallback::Uint32')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) **', u'ns3::TracedValueCallback::Uint32*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *&', u'ns3::TracedValueCallback::Uint32&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *', u'ns3::TracedValueCallback::Bool')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) **', u'ns3::TracedValueCallback::Bool*')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *&', u'ns3::TracedValueCallback::Bool&')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *', u'ns3::TracedValueCallback::Int16')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) **', u'ns3::TracedValueCallback::Int16*')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *&', u'ns3::TracedValueCallback::Int16&')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *', u'ns3::TracedValueCallback::Int32')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) **', u'ns3::TracedValueCallback::Int32*')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *&', u'ns3::TracedValueCallback::Int32&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *', u'ns3::TracedValueCallback::Uint16')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) **', u'ns3::TracedValueCallback::Uint16*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *&', u'ns3::TracedValueCallback::Uint16&')
+
 def register_types_ns3_internal(module):
     root_module = module.get_root()
     
@@ -426,6 +465,7 @@
     register_Ns3IntToType__6_methods(root_module, root_module['ns3::IntToType< 6 >'])
     register_Ns3LogComponent_methods(root_module, root_module['ns3::LogComponent'])
     register_Ns3Names_methods(root_module, root_module['ns3::Names'])
+    register_Ns3NonCopyable_methods(root_module, root_module['ns3::NonCopyable'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
     register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
     register_Ns3ObjectFactory_methods(root_module, root_module['ns3::ObjectFactory'])
@@ -585,11 +625,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CommandLine_methods(root_module, cls):
@@ -933,6 +968,12 @@
                    is_static=True)
     return
 
+def register_Ns3NonCopyable_methods(root_module, cls):
+    ## non-copyable.h (module 'core'): ns3::NonCopyable::NonCopyable() [constructor]
+    cls.add_constructor([], 
+                        visibility='protected')
+    return
+
 def register_Ns3ObjectBase_methods(root_module, cls):
     ## object-base.h (module 'core'): ns3::ObjectBase::ObjectBase() [constructor]
     cls.add_constructor([])
@@ -1096,8 +1137,8 @@
 def register_Ns3RngStream_methods(root_module, cls):
     ## rng-stream.h (module 'core'): ns3::RngStream::RngStream(uint32_t seed, uint64_t stream, uint64_t substream) [constructor]
     cls.add_constructor([param('uint32_t', 'seed'), param('uint64_t', 'stream'), param('uint64_t', 'substream')])
-    ## rng-stream.h (module 'core'): ns3::RngStream::RngStream(ns3::RngStream const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::RngStream const &', 'arg0')])
+    ## rng-stream.h (module 'core'): ns3::RngStream::RngStream(ns3::RngStream const & r) [copy constructor]
+    cls.add_constructor([param('ns3::RngStream const &', 'r')])
     ## rng-stream.h (module 'core'): double ns3::RngStream::RandU01() [member function]
     cls.add_method('RandU01', 
                    'double', 
@@ -1189,10 +1230,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -2088,10 +2129,10 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): ns3::EventId ns3::SimulatorImpl::Schedule(ns3::Time const & time, ns3::EventImpl * event) [member function]
+    ## simulator-impl.h (module 'core'): ns3::EventId ns3::SimulatorImpl::Schedule(ns3::Time const & delay, ns3::EventImpl * event) [member function]
     cls.add_method('Schedule', 
                    'ns3::EventId', 
-                   [param('ns3::Time const &', 'time'), param('ns3::EventImpl *', 'event')], 
+                   [param('ns3::Time const &', 'delay'), param('ns3::EventImpl *', 'event')], 
                    is_pure_virtual=True, is_virtual=True)
     ## simulator-impl.h (module 'core'): ns3::EventId ns3::SimulatorImpl::ScheduleDestroy(ns3::EventImpl * event) [member function]
     cls.add_method('ScheduleDestroy', 
@@ -2103,10 +2144,10 @@
                    'ns3::EventId', 
                    [param('ns3::EventImpl *', 'event')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): void ns3::SimulatorImpl::ScheduleWithContext(uint32_t context, ns3::Time const & time, ns3::EventImpl * event) [member function]
+    ## simulator-impl.h (module 'core'): void ns3::SimulatorImpl::ScheduleWithContext(uint32_t context, ns3::Time const & delay, ns3::EventImpl * event) [member function]
     cls.add_method('ScheduleWithContext', 
                    'void', 
-                   [param('uint32_t', 'context'), param('ns3::Time const &', 'time'), param('ns3::EventImpl *', 'event')], 
+                   [param('uint32_t', 'context'), param('ns3::Time const &', 'delay'), param('ns3::EventImpl *', 'event')], 
                    is_pure_virtual=True, is_virtual=True)
     ## simulator-impl.h (module 'core'): void ns3::SimulatorImpl::SetScheduler(ns3::ObjectFactory schedulerFactory) [member function]
     cls.add_method('SetScheduler', 
@@ -2118,10 +2159,10 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): void ns3::SimulatorImpl::Stop(ns3::Time const & time) [member function]
+    ## simulator-impl.h (module 'core'): void ns3::SimulatorImpl::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_pure_virtual=True, is_virtual=True)
     return
 
@@ -2951,11 +2992,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -3084,10 +3135,10 @@
                    'void', 
                    [], 
                    is_virtual=True)
-    ## default-simulator-impl.h (module 'core'): ns3::EventId ns3::DefaultSimulatorImpl::Schedule(ns3::Time const & time, ns3::EventImpl * event) [member function]
+    ## default-simulator-impl.h (module 'core'): ns3::EventId ns3::DefaultSimulatorImpl::Schedule(ns3::Time const & delay, ns3::EventImpl * event) [member function]
     cls.add_method('Schedule', 
                    'ns3::EventId', 
-                   [param('ns3::Time const &', 'time'), param('ns3::EventImpl *', 'event')], 
+                   [param('ns3::Time const &', 'delay'), param('ns3::EventImpl *', 'event')], 
                    is_virtual=True)
     ## default-simulator-impl.h (module 'core'): ns3::EventId ns3::DefaultSimulatorImpl::ScheduleDestroy(ns3::EventImpl * event) [member function]
     cls.add_method('ScheduleDestroy', 
@@ -3099,10 +3150,10 @@
                    'ns3::EventId', 
                    [param('ns3::EventImpl *', 'event')], 
                    is_virtual=True)
-    ## default-simulator-impl.h (module 'core'): void ns3::DefaultSimulatorImpl::ScheduleWithContext(uint32_t context, ns3::Time const & time, ns3::EventImpl * event) [member function]
+    ## default-simulator-impl.h (module 'core'): void ns3::DefaultSimulatorImpl::ScheduleWithContext(uint32_t context, ns3::Time const & delay, ns3::EventImpl * event) [member function]
     cls.add_method('ScheduleWithContext', 
                    'void', 
-                   [param('uint32_t', 'context'), param('ns3::Time const &', 'time'), param('ns3::EventImpl *', 'event')], 
+                   [param('uint32_t', 'context'), param('ns3::Time const &', 'delay'), param('ns3::EventImpl *', 'event')], 
                    is_virtual=True)
     ## default-simulator-impl.h (module 'core'): void ns3::DefaultSimulatorImpl::SetScheduler(ns3::ObjectFactory schedulerFactory) [member function]
     cls.add_method('SetScheduler', 
@@ -3114,10 +3165,10 @@
                    'void', 
                    [], 
                    is_virtual=True)
-    ## default-simulator-impl.h (module 'core'): void ns3::DefaultSimulatorImpl::Stop(ns3::Time const & time) [member function]
+    ## default-simulator-impl.h (module 'core'): void ns3::DefaultSimulatorImpl::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_virtual=True)
     ## default-simulator-impl.h (module 'core'): void ns3::DefaultSimulatorImpl::DoDispose() [member function]
     cls.add_method('DoDispose', 
@@ -3205,10 +3256,10 @@
                    'double', 
                    [], 
                    is_virtual=True)
-    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
     cls.add_method('Interpolate', 
                    'double', 
-                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
                    visibility='private', is_virtual=True)
     ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
     cls.add_method('Validate', 
@@ -4001,10 +4052,10 @@
                    'void', 
                    [], 
                    is_virtual=True)
-    ## realtime-simulator-impl.h (module 'core'): ns3::EventId ns3::RealtimeSimulatorImpl::Schedule(ns3::Time const & time, ns3::EventImpl * event) [member function]
+    ## realtime-simulator-impl.h (module 'core'): ns3::EventId ns3::RealtimeSimulatorImpl::Schedule(ns3::Time const & delay, ns3::EventImpl * event) [member function]
     cls.add_method('Schedule', 
                    'ns3::EventId', 
-                   [param('ns3::Time const &', 'time'), param('ns3::EventImpl *', 'event')], 
+                   [param('ns3::Time const &', 'delay'), param('ns3::EventImpl *', 'event')], 
                    is_virtual=True)
     ## realtime-simulator-impl.h (module 'core'): ns3::EventId ns3::RealtimeSimulatorImpl::ScheduleDestroy(ns3::EventImpl * event) [member function]
     cls.add_method('ScheduleDestroy', 
@@ -4016,10 +4067,10 @@
                    'ns3::EventId', 
                    [param('ns3::EventImpl *', 'event')], 
                    is_virtual=True)
-    ## realtime-simulator-impl.h (module 'core'): void ns3::RealtimeSimulatorImpl::ScheduleRealtime(ns3::Time const & time, ns3::EventImpl * event) [member function]
+    ## realtime-simulator-impl.h (module 'core'): void ns3::RealtimeSimulatorImpl::ScheduleRealtime(ns3::Time const & delay, ns3::EventImpl * event) [member function]
     cls.add_method('ScheduleRealtime', 
                    'void', 
-                   [param('ns3::Time const &', 'time'), param('ns3::EventImpl *', 'event')])
+                   [param('ns3::Time const &', 'delay'), param('ns3::EventImpl *', 'event')])
     ## realtime-simulator-impl.h (module 'core'): void ns3::RealtimeSimulatorImpl::ScheduleRealtimeNow(ns3::EventImpl * event) [member function]
     cls.add_method('ScheduleRealtimeNow', 
                    'void', 
@@ -4028,14 +4079,14 @@
     cls.add_method('ScheduleRealtimeNowWithContext', 
                    'void', 
                    [param('uint32_t', 'context'), param('ns3::EventImpl *', 'event')])
-    ## realtime-simulator-impl.h (module 'core'): void ns3::RealtimeSimulatorImpl::ScheduleRealtimeWithContext(uint32_t context, ns3::Time const & time, ns3::EventImpl * event) [member function]
+    ## realtime-simulator-impl.h (module 'core'): void ns3::RealtimeSimulatorImpl::ScheduleRealtimeWithContext(uint32_t context, ns3::Time const & delay, ns3::EventImpl * event) [member function]
     cls.add_method('ScheduleRealtimeWithContext', 
                    'void', 
-                   [param('uint32_t', 'context'), param('ns3::Time const &', 'time'), param('ns3::EventImpl *', 'event')])
-    ## realtime-simulator-impl.h (module 'core'): void ns3::RealtimeSimulatorImpl::ScheduleWithContext(uint32_t context, ns3::Time const & time, ns3::EventImpl * event) [member function]
+                   [param('uint32_t', 'context'), param('ns3::Time const &', 'delay'), param('ns3::EventImpl *', 'event')])
+    ## realtime-simulator-impl.h (module 'core'): void ns3::RealtimeSimulatorImpl::ScheduleWithContext(uint32_t context, ns3::Time const & delay, ns3::EventImpl * event) [member function]
     cls.add_method('ScheduleWithContext', 
                    'void', 
-                   [param('uint32_t', 'context'), param('ns3::Time const &', 'time'), param('ns3::EventImpl *', 'event')], 
+                   [param('uint32_t', 'context'), param('ns3::Time const &', 'delay'), param('ns3::EventImpl *', 'event')], 
                    is_virtual=True)
     ## realtime-simulator-impl.h (module 'core'): void ns3::RealtimeSimulatorImpl::SetHardLimit(ns3::Time limit) [member function]
     cls.add_method('SetHardLimit', 
@@ -4055,10 +4106,10 @@
                    'void', 
                    [], 
                    is_virtual=True)
-    ## realtime-simulator-impl.h (module 'core'): void ns3::RealtimeSimulatorImpl::Stop(ns3::Time const & time) [member function]
+    ## realtime-simulator-impl.h (module 'core'): void ns3::RealtimeSimulatorImpl::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_virtual=True)
     ## realtime-simulator-impl.h (module 'core'): void ns3::RealtimeSimulatorImpl::DoDispose() [member function]
     cls.add_method('DoDispose', 
@@ -4763,6 +4814,7 @@
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_SystemPath(module.get_submodule('SystemPath'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
@@ -4895,6 +4947,9 @@
                         [param('std::string', 'path')])
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def register_functions_ns3_internal(module, root_module):
     ## double.h (module 'core'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::internal::MakeDoubleChecker(double min, double max, std::string name) [free function]
     module.add_function('MakeDoubleChecker', 
diff -Naur ns-3.23/src/core/bindings/modulegen__gcc_LP64.py ns-3.24/src/core/bindings/modulegen__gcc_LP64.py
--- ns-3.23/src/core/bindings/modulegen__gcc_LP64.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/bindings/modulegen__gcc_LP64.py	2015-09-15 11:18:44.000000000 -0700
@@ -72,6 +72,8 @@
     module.add_class('LogComponent')
     ## names.h (module 'core'): ns3::Names [class]
     module.add_class('Names')
+    ## non-copyable.h (module 'core'): ns3::NonCopyable [class]
+    module.add_class('NonCopyable', destructor_visibility='protected')
     ## object-base.h (module 'core'): ns3::ObjectBase [class]
     module.add_class('ObjectBase', allow_subclassing=True)
     ## object.h (module 'core'): ns3::ObjectDeleter [struct]
@@ -346,6 +348,12 @@
     register_types_ns3_SystemPath(nested_module)
     
     
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
+    
     ## Register a nested module for the namespace internal
     
     nested_module = module.add_cpp_namespace('internal')
@@ -403,6 +411,37 @@
     
     module.add_container('std::list< std::string >', 'std::string', container_type=u'list')
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *', u'ns3::TracedValueCallback::Uint8')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) **', u'ns3::TracedValueCallback::Uint8*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *&', u'ns3::TracedValueCallback::Uint8&')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *', u'ns3::TracedValueCallback::Int8')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) **', u'ns3::TracedValueCallback::Int8*')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *&', u'ns3::TracedValueCallback::Int8&')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *', u'ns3::TracedValueCallback::Double')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) **', u'ns3::TracedValueCallback::Double*')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *&', u'ns3::TracedValueCallback::Double&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *', u'ns3::TracedValueCallback::Uint32')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) **', u'ns3::TracedValueCallback::Uint32*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *&', u'ns3::TracedValueCallback::Uint32&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *', u'ns3::TracedValueCallback::Bool')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) **', u'ns3::TracedValueCallback::Bool*')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *&', u'ns3::TracedValueCallback::Bool&')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *', u'ns3::TracedValueCallback::Int16')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) **', u'ns3::TracedValueCallback::Int16*')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *&', u'ns3::TracedValueCallback::Int16&')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *', u'ns3::TracedValueCallback::Int32')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) **', u'ns3::TracedValueCallback::Int32*')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *&', u'ns3::TracedValueCallback::Int32&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *', u'ns3::TracedValueCallback::Uint16')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) **', u'ns3::TracedValueCallback::Uint16*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *&', u'ns3::TracedValueCallback::Uint16&')
+
 def register_types_ns3_internal(module):
     root_module = module.get_root()
     
@@ -426,6 +465,7 @@
     register_Ns3IntToType__6_methods(root_module, root_module['ns3::IntToType< 6 >'])
     register_Ns3LogComponent_methods(root_module, root_module['ns3::LogComponent'])
     register_Ns3Names_methods(root_module, root_module['ns3::Names'])
+    register_Ns3NonCopyable_methods(root_module, root_module['ns3::NonCopyable'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
     register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
     register_Ns3ObjectFactory_methods(root_module, root_module['ns3::ObjectFactory'])
@@ -585,11 +625,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CommandLine_methods(root_module, cls):
@@ -933,6 +968,12 @@
                    is_static=True)
     return
 
+def register_Ns3NonCopyable_methods(root_module, cls):
+    ## non-copyable.h (module 'core'): ns3::NonCopyable::NonCopyable() [constructor]
+    cls.add_constructor([], 
+                        visibility='protected')
+    return
+
 def register_Ns3ObjectBase_methods(root_module, cls):
     ## object-base.h (module 'core'): ns3::ObjectBase::ObjectBase() [constructor]
     cls.add_constructor([])
@@ -1096,8 +1137,8 @@
 def register_Ns3RngStream_methods(root_module, cls):
     ## rng-stream.h (module 'core'): ns3::RngStream::RngStream(uint32_t seed, uint64_t stream, uint64_t substream) [constructor]
     cls.add_constructor([param('uint32_t', 'seed'), param('uint64_t', 'stream'), param('uint64_t', 'substream')])
-    ## rng-stream.h (module 'core'): ns3::RngStream::RngStream(ns3::RngStream const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::RngStream const &', 'arg0')])
+    ## rng-stream.h (module 'core'): ns3::RngStream::RngStream(ns3::RngStream const & r) [copy constructor]
+    cls.add_constructor([param('ns3::RngStream const &', 'r')])
     ## rng-stream.h (module 'core'): double ns3::RngStream::RandU01() [member function]
     cls.add_method('RandU01', 
                    'double', 
@@ -1189,10 +1230,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -2088,10 +2129,10 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): ns3::EventId ns3::SimulatorImpl::Schedule(ns3::Time const & time, ns3::EventImpl * event) [member function]
+    ## simulator-impl.h (module 'core'): ns3::EventId ns3::SimulatorImpl::Schedule(ns3::Time const & delay, ns3::EventImpl * event) [member function]
     cls.add_method('Schedule', 
                    'ns3::EventId', 
-                   [param('ns3::Time const &', 'time'), param('ns3::EventImpl *', 'event')], 
+                   [param('ns3::Time const &', 'delay'), param('ns3::EventImpl *', 'event')], 
                    is_pure_virtual=True, is_virtual=True)
     ## simulator-impl.h (module 'core'): ns3::EventId ns3::SimulatorImpl::ScheduleDestroy(ns3::EventImpl * event) [member function]
     cls.add_method('ScheduleDestroy', 
@@ -2103,10 +2144,10 @@
                    'ns3::EventId', 
                    [param('ns3::EventImpl *', 'event')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): void ns3::SimulatorImpl::ScheduleWithContext(uint32_t context, ns3::Time const & time, ns3::EventImpl * event) [member function]
+    ## simulator-impl.h (module 'core'): void ns3::SimulatorImpl::ScheduleWithContext(uint32_t context, ns3::Time const & delay, ns3::EventImpl * event) [member function]
     cls.add_method('ScheduleWithContext', 
                    'void', 
-                   [param('uint32_t', 'context'), param('ns3::Time const &', 'time'), param('ns3::EventImpl *', 'event')], 
+                   [param('uint32_t', 'context'), param('ns3::Time const &', 'delay'), param('ns3::EventImpl *', 'event')], 
                    is_pure_virtual=True, is_virtual=True)
     ## simulator-impl.h (module 'core'): void ns3::SimulatorImpl::SetScheduler(ns3::ObjectFactory schedulerFactory) [member function]
     cls.add_method('SetScheduler', 
@@ -2118,10 +2159,10 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
-    ## simulator-impl.h (module 'core'): void ns3::SimulatorImpl::Stop(ns3::Time const & time) [member function]
+    ## simulator-impl.h (module 'core'): void ns3::SimulatorImpl::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_pure_virtual=True, is_virtual=True)
     return
 
@@ -2951,11 +2992,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -3084,10 +3135,10 @@
                    'void', 
                    [], 
                    is_virtual=True)
-    ## default-simulator-impl.h (module 'core'): ns3::EventId ns3::DefaultSimulatorImpl::Schedule(ns3::Time const & time, ns3::EventImpl * event) [member function]
+    ## default-simulator-impl.h (module 'core'): ns3::EventId ns3::DefaultSimulatorImpl::Schedule(ns3::Time const & delay, ns3::EventImpl * event) [member function]
     cls.add_method('Schedule', 
                    'ns3::EventId', 
-                   [param('ns3::Time const &', 'time'), param('ns3::EventImpl *', 'event')], 
+                   [param('ns3::Time const &', 'delay'), param('ns3::EventImpl *', 'event')], 
                    is_virtual=True)
     ## default-simulator-impl.h (module 'core'): ns3::EventId ns3::DefaultSimulatorImpl::ScheduleDestroy(ns3::EventImpl * event) [member function]
     cls.add_method('ScheduleDestroy', 
@@ -3099,10 +3150,10 @@
                    'ns3::EventId', 
                    [param('ns3::EventImpl *', 'event')], 
                    is_virtual=True)
-    ## default-simulator-impl.h (module 'core'): void ns3::DefaultSimulatorImpl::ScheduleWithContext(uint32_t context, ns3::Time const & time, ns3::EventImpl * event) [member function]
+    ## default-simulator-impl.h (module 'core'): void ns3::DefaultSimulatorImpl::ScheduleWithContext(uint32_t context, ns3::Time const & delay, ns3::EventImpl * event) [member function]
     cls.add_method('ScheduleWithContext', 
                    'void', 
-                   [param('uint32_t', 'context'), param('ns3::Time const &', 'time'), param('ns3::EventImpl *', 'event')], 
+                   [param('uint32_t', 'context'), param('ns3::Time const &', 'delay'), param('ns3::EventImpl *', 'event')], 
                    is_virtual=True)
     ## default-simulator-impl.h (module 'core'): void ns3::DefaultSimulatorImpl::SetScheduler(ns3::ObjectFactory schedulerFactory) [member function]
     cls.add_method('SetScheduler', 
@@ -3114,10 +3165,10 @@
                    'void', 
                    [], 
                    is_virtual=True)
-    ## default-simulator-impl.h (module 'core'): void ns3::DefaultSimulatorImpl::Stop(ns3::Time const & time) [member function]
+    ## default-simulator-impl.h (module 'core'): void ns3::DefaultSimulatorImpl::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_virtual=True)
     ## default-simulator-impl.h (module 'core'): void ns3::DefaultSimulatorImpl::DoDispose() [member function]
     cls.add_method('DoDispose', 
@@ -3205,10 +3256,10 @@
                    'double', 
                    [], 
                    is_virtual=True)
-    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
     cls.add_method('Interpolate', 
                    'double', 
-                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
                    visibility='private', is_virtual=True)
     ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
     cls.add_method('Validate', 
@@ -4001,10 +4052,10 @@
                    'void', 
                    [], 
                    is_virtual=True)
-    ## realtime-simulator-impl.h (module 'core'): ns3::EventId ns3::RealtimeSimulatorImpl::Schedule(ns3::Time const & time, ns3::EventImpl * event) [member function]
+    ## realtime-simulator-impl.h (module 'core'): ns3::EventId ns3::RealtimeSimulatorImpl::Schedule(ns3::Time const & delay, ns3::EventImpl * event) [member function]
     cls.add_method('Schedule', 
                    'ns3::EventId', 
-                   [param('ns3::Time const &', 'time'), param('ns3::EventImpl *', 'event')], 
+                   [param('ns3::Time const &', 'delay'), param('ns3::EventImpl *', 'event')], 
                    is_virtual=True)
     ## realtime-simulator-impl.h (module 'core'): ns3::EventId ns3::RealtimeSimulatorImpl::ScheduleDestroy(ns3::EventImpl * event) [member function]
     cls.add_method('ScheduleDestroy', 
@@ -4016,10 +4067,10 @@
                    'ns3::EventId', 
                    [param('ns3::EventImpl *', 'event')], 
                    is_virtual=True)
-    ## realtime-simulator-impl.h (module 'core'): void ns3::RealtimeSimulatorImpl::ScheduleRealtime(ns3::Time const & time, ns3::EventImpl * event) [member function]
+    ## realtime-simulator-impl.h (module 'core'): void ns3::RealtimeSimulatorImpl::ScheduleRealtime(ns3::Time const & delay, ns3::EventImpl * event) [member function]
     cls.add_method('ScheduleRealtime', 
                    'void', 
-                   [param('ns3::Time const &', 'time'), param('ns3::EventImpl *', 'event')])
+                   [param('ns3::Time const &', 'delay'), param('ns3::EventImpl *', 'event')])
     ## realtime-simulator-impl.h (module 'core'): void ns3::RealtimeSimulatorImpl::ScheduleRealtimeNow(ns3::EventImpl * event) [member function]
     cls.add_method('ScheduleRealtimeNow', 
                    'void', 
@@ -4028,14 +4079,14 @@
     cls.add_method('ScheduleRealtimeNowWithContext', 
                    'void', 
                    [param('uint32_t', 'context'), param('ns3::EventImpl *', 'event')])
-    ## realtime-simulator-impl.h (module 'core'): void ns3::RealtimeSimulatorImpl::ScheduleRealtimeWithContext(uint32_t context, ns3::Time const & time, ns3::EventImpl * event) [member function]
+    ## realtime-simulator-impl.h (module 'core'): void ns3::RealtimeSimulatorImpl::ScheduleRealtimeWithContext(uint32_t context, ns3::Time const & delay, ns3::EventImpl * event) [member function]
     cls.add_method('ScheduleRealtimeWithContext', 
                    'void', 
-                   [param('uint32_t', 'context'), param('ns3::Time const &', 'time'), param('ns3::EventImpl *', 'event')])
-    ## realtime-simulator-impl.h (module 'core'): void ns3::RealtimeSimulatorImpl::ScheduleWithContext(uint32_t context, ns3::Time const & time, ns3::EventImpl * event) [member function]
+                   [param('uint32_t', 'context'), param('ns3::Time const &', 'delay'), param('ns3::EventImpl *', 'event')])
+    ## realtime-simulator-impl.h (module 'core'): void ns3::RealtimeSimulatorImpl::ScheduleWithContext(uint32_t context, ns3::Time const & delay, ns3::EventImpl * event) [member function]
     cls.add_method('ScheduleWithContext', 
                    'void', 
-                   [param('uint32_t', 'context'), param('ns3::Time const &', 'time'), param('ns3::EventImpl *', 'event')], 
+                   [param('uint32_t', 'context'), param('ns3::Time const &', 'delay'), param('ns3::EventImpl *', 'event')], 
                    is_virtual=True)
     ## realtime-simulator-impl.h (module 'core'): void ns3::RealtimeSimulatorImpl::SetHardLimit(ns3::Time limit) [member function]
     cls.add_method('SetHardLimit', 
@@ -4055,10 +4106,10 @@
                    'void', 
                    [], 
                    is_virtual=True)
-    ## realtime-simulator-impl.h (module 'core'): void ns3::RealtimeSimulatorImpl::Stop(ns3::Time const & time) [member function]
+    ## realtime-simulator-impl.h (module 'core'): void ns3::RealtimeSimulatorImpl::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_virtual=True)
     ## realtime-simulator-impl.h (module 'core'): void ns3::RealtimeSimulatorImpl::DoDispose() [member function]
     cls.add_method('DoDispose', 
@@ -4763,6 +4814,7 @@
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_SystemPath(module.get_submodule('SystemPath'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
@@ -4895,6 +4947,9 @@
                         [param('std::string', 'path')])
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def register_functions_ns3_internal(module, root_module):
     ## double.h (module 'core'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::internal::MakeDoubleChecker(double min, double max, std::string name) [free function]
     module.add_function('MakeDoubleChecker', 
diff -Naur ns-3.23/src/core/doc/deprecated-example.h ns-3.24/src/core/doc/deprecated-example.h
--- ns-3.23/src/core/doc/deprecated-example.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.24/src/core/doc/deprecated-example.h	2015-09-15 11:18:44.000000000 -0700
@@ -0,0 +1,38 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 Lawrence Livermore National Laboratory
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Authors: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
+ */
+
+/* 
+ * This is an example included in the doxygen-generated documentation
+ * for NS_DEPRECATED.
+ */
+
+// [doxygen snippet]
+/*
+ * Do something useful.
+ *
+ * \deprecated This method will go away in future versions of ns-3.
+ * See instead TheNewWay()
+ */
+void SomethingUseful (void); 
+/*
+ * Do something more useful.
+ */
+void TheNewWay (void);
+// [doxygen snippet]
diff -Naur ns-3.23/src/core/examples/sample-simulator.cc ns-3.24/src/core/examples/sample-simulator.cc
--- ns-3.23/src/core/examples/sample-simulator.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/examples/sample-simulator.cc	2015-09-15 11:18:44.000000000 -0700
@@ -33,11 +33,18 @@
 
 using namespace ns3;
 
+/** Simple model object to illustrate event handling. */
 class MyModel
 {
 public:
+  /** Start model execution by scheduling a HandleEvent. */
   void Start (void);
 private:
+  /**
+   *  Simple event handler.
+   *
+   * \param [in] eventValue Event argument.
+   */
   void HandleEvent (double eventValue);
 };
 
@@ -56,6 +63,11 @@
             << "s started at " << value << "s" << std::endl;
 }
 
+/**
+ * Simple function event handler which Starts a MyModel object.
+ *
+ * \param [in] model The MyModel object to start.
+ */
 static void
 ExampleFunction (MyModel *model)
 {
@@ -64,6 +76,9 @@
   model->Start ();
 }
 
+/**
+ * Simple function event handler; this function is called randomly.
+ */
 static void
 RandomFunction (void)
 {
@@ -71,6 +86,7 @@
             << Simulator::Now ().GetSeconds () << "s" << std::endl;
 }
 
+/** Simple function event handler; the corresponding event is cancelled. */
 static void
 CancelledEvent (void)
 {
diff -Naur ns-3.23/src/core/examples/sample-simulator.py ns-3.24/src/core/examples/sample-simulator.py
--- ns-3.23/src/core/examples/sample-simulator.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/examples/sample-simulator.py	2015-09-15 11:18:44.000000000 -0700
@@ -23,11 +23,17 @@
 import ns.core
 
 class MyModel(object):
+    """Simple model object to illustrate event handling."""
 
+    ## \returns None.
     def Start(self):
+        """Start model execution by scheduling a HandleEvent."""
         ns.core.Simulator.Schedule(ns.core.Seconds(10.0), self.HandleEvent, ns.core.Simulator.Now().GetSeconds())
 
+    ## \param [in] value Event argument.
+    ## \return None.
     def HandleEvent(self, value):
+        """Simple event handler."""
         print "Member method received event at", ns.core.Simulator.Now().GetSeconds(), \
             "s started at", value, "s"
 
diff -Naur ns-3.23/src/core/model/abort.h ns-3.24/src/core/model/abort.h
--- ns-3.23/src/core/model/abort.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/abort.h	2015-09-15 11:18:44.000000000 -0700
@@ -34,11 +34,11 @@
  *
  * \brief Unconditional abnormal program termination with a message.
  *
- * \param msg The message to output when this macro is hit.
+ * \param [in] msg The message to output when this macro is hit.
  *
  * This macro is essentially equivalent to NS_FATAL_ERROR,
- * excepts it prepends the error message with the string
- * "aborted. ". When this macro is hit a runtime, the
+ * except it prepends the error message with the string
+ * "aborted. ". When this macro is hit at runtime, the
  * program will be halted using \c std::terminate, which
  * triggers clean up code registered by \c std::set_terminate.
  *
@@ -59,7 +59,7 @@
  *
  * \brief Abnormal program termination if a condition is \c true.
  *
- * \param cond The condition to be evaluated.
+ * \param [in] cond The condition to be evaluated.
  *
  * This is similar to \c NS_ASSERT(!(cond)), except this check
  * is enabled in all builds. If \c cond is evaluated to \c true,
@@ -89,8 +89,8 @@
  * \brief Abnormal program termination if a condition is \c true,
  * with a message.
  *
- * \param cond The ondition to be evaluated.
- * \param msg The message to output when cond is \c true.
+ * \param [in] cond The condition to be evaluated.
+ * \param [in] msg The message to output when cond is \c true.
  *
  * This is similar to NS_ASSERT_MSG(!(cond)), except this
  * check is enabled in all builds. If \c cond is evaluated to
@@ -119,7 +119,7 @@
  *
  * \brief Abnormal program termination if a condition is \c false.
  *
- * \param cond The condition to be evaluated.
+ * \param [in] cond The condition to be evaluated.
  *
  * This is an alias for NS_ABORT_IF(!(cond))
  *
@@ -134,8 +134,8 @@
  * \brief Abnormal program termination if a condition is \c false,
  * with a message.
  *
- * \param cond Thecondition to be evaluated.
- * \param msg The message to output if cond is false.
+ * \param [in] cond The condition to be evaluated.
+ * \param [in] msg The message to output if cond is false.
  *
  * This is an alias for NS_ABORT_MSG_IF(!(cond))
  *
diff -Naur ns-3.23/src/core/model/assert.h ns-3.24/src/core/model/assert.h
--- ns-3.23/src/core/model/assert.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/assert.h	2015-09-15 11:18:44.000000000 -0700
@@ -62,7 +62,7 @@
  * true, the program prints the source file, line number and 
  * unverified condition and halts by calling std::terminate
  *
- * \param condition condition to verify.
+ * \param [in] condition Condition to verify.
  */
 #define NS_ASSERT(condition)                                    \
   do                                                            \
@@ -84,8 +84,8 @@
  * true, the program prints the message to output and
  * halts by calling std::terminate.
  *
- * \param condition condition to verify.
- * \param message message to output
+ * \param [in] condition Condition to verify.
+ * \param [in] message Message to output
  */
 #define NS_ASSERT_MSG(condition, message)             \
   do                                                  \
diff -Naur ns-3.23/src/core/model/attribute-accessor-helper.h ns-3.24/src/core/model/attribute-accessor-helper.h
--- ns-3.23/src/core/model/attribute-accessor-helper.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/attribute-accessor-helper.h	2015-09-15 11:18:44.000000000 -0700
@@ -56,12 +56,13 @@
  * In the case of a \p setter returning \p bool, the return value
  * should be \c true if the value could be set successfully.
  *
- * \tparam V  (If present) The specific AttributeValue type to use to represent
- *            the Attribute.  (If not present, the type \p V is implicit
- *            in the name of this function as "Make<V>Accessor"
- * \tparam T1 The type of the class data member,
+ * \tparam V  \explicit (If present) The specific AttributeValue type
+ *            to use to represent the Attribute.  (If not present,
+ *            the type \p V is implicit in the name of this function,
+ *            as "Make<V>Accessor"
+ * \tparam T1 \deduced The type of the class data member,
  *            or the type of the class get functor or set method.
- * \param  a1 The address of the data member,
+ * \param [in] a1 The address of the data member,
  *            or the get or set method.
  * \returns   The AttributeAccessor
  */
@@ -99,15 +100,15 @@
  * In practice the setter and getter arguments can appear in either order,
  * but setter first is preferred.
  *
- * \tparam V  (If present) The specific AttributeValue type to use to represent
+ * \tparam V  \explicit (If present) The specific AttributeValue type to use to represent
  *            the Attribute.  (If not present, the type \p V is implicit
  *            in the name of this function as "Make<V>Accessor"
- * \tparam T1 The type of the class data member,
+ * \tparam T1 \deduced The type of the class data member,
  *            or the type of the class get functor or set method.
  *
- * \tparam T2 The type of the getter class functor method.
- * \param  a2 The address of the class method to set the attribute.
- * \param  a1 The address of the data member,
+ * \tparam T2 \deduced The type of the getter class functor method.
+ * \param [in] a2 The address of the class method to set the attribute.
+ * \param [in] a1 The address of the data member,
  *            or the get or set method.
  * \returns   The AttributeAccessor
  */
@@ -134,7 +135,7 @@
  *
  * The non-const and non-reference type equivalent to \p T.
  *
- * \tparam T The original (possibly qualified) type.
+ * \tparam T \explicit The original (possibly qualified) type.
  */
 template <typename T>
 struct AccessorTrait
@@ -150,8 +151,8 @@
  * Basic functionality for accessing class attributes via
  * class data members, or get functor/set methods.
  *
- * \tparam T Class of object holding the attribute.
- * \tparam U AttributeValue type for the underlying class member
+ * \tparam T \explicit Class of object holding the attribute.
+ * \tparam U \explicit AttributeValue type for the underlying class member
  *           which is an attribute.
  */
 template <typename T, typename U>
@@ -169,8 +170,8 @@
    *
    * Forwards to DoSet method.
    *
-   * \param object Generic object pointer, to upcast to \p T.
-   * \param val Generic AttributeValue, to upcast to \p U.
+   * \param [in] object Generic object pointer, to upcast to \p T.
+   * \param [in] val Generic AttributeValue, to upcast to \p U.
    * \returns true if the member was set successfully.
    */
   virtual bool Set (ObjectBase * object, const AttributeValue & val) const {
@@ -195,8 +196,8 @@
    *
    * Forwards to DoGet method.
    *
-   * \param object Generic object pointer, to upcast to \p T.
-   * \param val Generic AttributeValue, to upcast to \p U.
+   * \param [out] object Generic object pointer, to upcast to \p T.
+   * \param [out] val Generic AttributeValue, to upcast to \p U.
    * \returns true if the member value could be retrieved successfully
    */
   virtual bool Get (const ObjectBase * object, AttributeValue &val) const {
@@ -218,8 +219,8 @@
    * Setter implementation.
    *
    * \see Set()
-   * \param object The parent object holding the attribute.
-   * \param v The specific AttributeValue to set.
+   * \param [in] object The parent object holding the attribute.
+   * \param [in] v The specific AttributeValue to set.
    * \returns true if the member was set successfully.
    */
   virtual bool DoSet (T *object, const U *v) const = 0;
@@ -227,8 +228,8 @@
    * Getter implementation.
    *
    * \see Get()
-   * \param object The parent object holding the attribute.
-   * \param v The specific AttributeValue to set.
+   * \param [out] object The parent object holding the attribute.
+   * \param [out] v The specific AttributeValue to set.
    * \returns true if the member value could be retrieved successfully
    */
   virtual bool DoGet (const T *object, U *v) const = 0;
@@ -241,11 +242,11 @@
  *
  * MakeAccessorHelper implementation for a class data member.
  *
- * \tparam V  The specific AttributeValue type to use to represent
+ * \tparam V  \explicit The specific AttributeValue type to use to represent
  *            the Attribute.
- * \tparam T  The class holding the data member.
- * \tparam U  The type of the data member.
- * \param  memberVariable  The address of the data member.
+ * \tparam T  \deduced The class holding the data member.
+ * \tparam U  \deduced The type of the data member.
+ * \param [in]  memberVariable  The address of the data member.
  * \returns The AttributeAccessor.
  */
 template <typename V, typename T, typename U>
@@ -259,7 +260,7 @@
 public:
     /*
      * Construct from a class data member address.
-     * \param memberVariable The class data member address.
+     * \param [in] memberVariable The class data member address.
      */
     MemberVariable (U T::*memberVariable)
       : AccessorHelper<T,V> (),
@@ -298,11 +299,11 @@
  *
  * MakeAccessorHelper implementation for a class get functor method.
  *
- * \tparam V  The specific AttributeValue type to use to represent
+ * \tparam V  \explicit The specific AttributeValue type to use to represent
  *            the Attribute.
- * \tparam T  The class holding the get functor method.
- * \tparam U  The return type of the get functor method.
- * \param  getter  The address of the class get functor method.
+ * \tparam T  \deduced The class holding the get functor method.
+ * \tparam U  \deduced The return type of the get functor method.
+ * \param [in] getter  The address of the class get functor method.
  * \returns The AttributeAccessor.
  */
 template <typename V, typename T, typename U>
@@ -316,7 +317,7 @@
 public:
     /*
      * Construct from a class get functor method.
-     * \param getter The class get functor method pointer.
+     * \param [in] getter The class get functor method pointer.
      */
     MemberMethod (U (T::*getter)(void) const)
       : AccessorHelper<T,V> (),
@@ -348,11 +349,11 @@
  * MakeAccessorHelper implementation for a class set method
  * returning void.
  *
- * \tparam V  The specific AttributeValue type to use to represent
+ * \tparam V  \explicit The specific AttributeValue type to use to represent
  *            the Attribute.
- * \tparam T  The class holding the set method.
- * \tparam U  The argument type of the set method.
- * \param  setter  The address of the class set method, returning void.
+ * \tparam T  \deduced The class holding the set method.
+ * \tparam U  \deduced The argument type of the set method.
+ * \param [in] setter  The address of the class set method, returning void.
  * \returns The AttributeAccessor.
  */
 template <typename V, typename T, typename U>
@@ -366,7 +367,7 @@
 public:
     /*
      * Construct from a class set method.
-     * \param setter The class set method pointer.
+     * \param [in] setter The class set method pointer.
      */
     MemberMethod (void (T::*setter)(U))
       : AccessorHelper<T,V> (),
@@ -406,13 +407,13 @@
  *
  * The two versions of this function differ only in argument order.
  *
- * \tparam W  The specific AttributeValue type to use to represent
+ * \tparam W  \explicit The specific AttributeValue type to use to represent
  *            the Attribute.
- * \tparam T  The class holding the functor methods.
- * \tparam U  The argument type of the set method.
- * \tparam V  The return type of the get functor method.
- * \param  setter  The address of the class set method, returning void.
- * \param  getter  The address of the class get functor method.
+ * \tparam T  \deduced The class holding the functor methods.
+ * \tparam U  \deduced The argument type of the set method.
+ * \tparam V  \deduced The return type of the get functor method.
+ * \param [in] setter The address of the class set method, returning void.
+ * \param [in] getter The address of the class get functor method.
  * \returns The AttributeAccessor.
  */
 template <typename W, typename T, typename U, typename V>
@@ -430,8 +431,8 @@
 public:
     /*
      * Construct from class get functor and set methods.
-     * \param setter The class set method pointer, returning void.
-     * \param getter The class get functor method pointer.
+     * \param [in] setter The class set method pointer, returning void.
+     * \param [in] getter The class get functor method pointer.
      */
     MemberMethod (void (T::*setter)(U),
                   V (T::*getter)(void) const)
@@ -489,13 +490,13 @@
  *
  * The two versions of this function differ only in argument order.
  *
- * \tparam W  The specific AttributeValue type to use to represent
+ * \tparam W  \explicit The specific AttributeValue type to use to represent
  *            the Attribute.
- * \tparam T  The class holding the functor methods.
- * \tparam U  The argument type of the set method.
- * \tparam V  The return type of the get functor method.
- * \param  setter  The address of the class set method, returning bool.
- * \param  getter  The address of the class get functor method.
+ * \tparam T  \deduced The class holding the functor methods.
+ * \tparam U  \deduced The argument type of the set method.
+ * \tparam V  \deduced The return type of the get functor method.
+ * \param [in] setter The address of the class set method, returning bool.
+ * \param [in] getter The address of the class get functor method.
  * \returns The AttributeAccessor.
  */
 template <typename W, typename T, typename U, typename V>
@@ -513,8 +514,8 @@
 public:
     /*
      * Construct from class get functor and set method, returning bool.
-     * \param setter The class set method pointer, returning bool.
-     * \param getter The class get functor method pointer.
+     * \param [in] setter The class set method pointer, returning bool.
+     * \param [in] getter The class get functor method pointer.
      */
     MemberMethod (bool (T::*setter)(U),
                   V (T::*getter)(void) const)
diff -Naur ns-3.23/src/core/model/attribute.h ns-3.24/src/core/model/attribute.h
--- ns-3.23/src/core/model/attribute.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/attribute.h	2015-09-15 11:18:44.000000000 -0700
@@ -76,8 +76,8 @@
    */
   virtual Ptr<AttributeValue> Copy (void) const = 0;
   /**
-   * \param checker the checker associated to the attribute
-   * \returns a string representation of this value.
+   * \param [in] checker The checker associated to the attribute
+   * \returns A string representation of this value.
    *
    * In most cases, this method will not make any use of the checker argument.
    * However, in a very limited set of cases, the checker argument is needed to
@@ -86,8 +86,8 @@
    */
   virtual std::string SerializeToString (Ptr<const AttributeChecker> checker) const = 0;
   /**
-   * \param value a string representation of the value
-   * \param checker a pointer to the checker associated to the attribute.
+   * \param [in] value A string representation of the value
+   * \param [in] checker A pointer to the checker associated to the attribute.
    * \returns true if the input string was correctly-formatted and could be
    *          successfully deserialized, false otherwise.
    *
@@ -118,8 +118,8 @@
   virtual ~AttributeAccessor ();
 
   /**
-   * \param object the object instance to set the value in
-   * \param value the value to set
+   * \param [in,out] object The object instance to set the value in
+   * \param [in] value The value to set
    * \returns true if the value could be set successfully, false otherwise.
    *
    * This method expects that the caller has checked that the input value is
@@ -127,8 +127,8 @@
    */
   virtual bool Set (ObjectBase * object, const AttributeValue &value) const = 0;
   /**
-   * \param object the object instance to get the value from
-   * \param attribute a pointer to where the value should be set.
+   * \param [in,out] object The object instance to get the value from
+   * \param [out] attribute A pointer to where the value should be set.
    * \returns true if the value could be read successfully, and
    *          stored in the input value, false otherwise.
    *
@@ -173,12 +173,12 @@
    * Create a valid value from the argument value,
    * or reinterpret the argument as a string.
    *
-   * \param value the AttributeValue to check
+   * \param [in] value The AttributeValue to check
    * \return Ptr to a valid value
    */
   Ptr<AttributeValue> CreateValidValue (const AttributeValue &value) const;
   /**
-   * \param value a pointer to the value to check
+   * \param [in] value A pointer to the value to check
    * \returns true if the input value is both of the right type
    *          and if its value is within the requested range. Returns
    *          false otherwise.
@@ -217,8 +217,8 @@
   /**
    * Copy the source to the destination
 
-   * \param source source AttributeValue
-   * \param destination destination AttributeValue
+   * \param [in] source Source AttributeValue
+   * \param [out] destination Destination AttributeValue
    * \return true if copy was successful
    */
   virtual bool Copy (const AttributeValue &source, AttributeValue &destination) const = 0;
@@ -242,15 +242,15 @@
    */
   virtual Ptr<AttributeValue> Copy (void) const;
   /**
-   * \param checker the checker associated to the attribute
+   * \param [in] checker The checker associated to the attribute
    * \returns a string representation of this value.
    *
    * In the EmptyAttributeValue case, the string returned will be simply ""
    */
   virtual std::string SerializeToString (Ptr<const AttributeChecker> checker) const;
   /**
-   * \param value a string representation of the value
-   * \param checker a pointer to the checker associated to the attribute.
+   * \param [in] value A string representation of the value
+   * \param [in] checker A pointer to the checker associated to the attribute.
    * \returns true if the input string was correctly-formatted and could be
    *          successfully deserialized, false otherwise.
    *
diff -Naur ns-3.23/src/core/model/attribute-helper.h ns-3.24/src/core/model/attribute-helper.h
--- ns-3.23/src/core/model/attribute-helper.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/attribute-helper.h	2015-09-15 11:18:44.000000000 -0700
@@ -85,12 +85,12 @@
  *
  * A simple string-based attribute checker
  *
- * \tparam T    The specific AttributeValue type used to represent
+ * \tparam T    \explicit The specific AttributeValue type used to represent
  *              the Attribute.
- * \tparam BASE The AttributeChecker type corresponding to \p T.
- * \param name  The name of the AttributeValue type, essentially the
+ * \tparam BASE \explicit The AttributeChecker type corresponding to \p T.
+ * \param [in] name  The name of the AttributeValue type, essentially the
  *              string form of \p T.
- * \param underlying Underlying type name.
+ * \param [in] underlying Underlying type name.
  * \return Ptr to AttributeChecker.
  */
 template <typename T, typename BASE>
@@ -141,7 +141,7 @@
  * Define the attribute accessor functions \c MakeTypeAccessor
  * for class \p type.
  *
- * \param type the name of the class
+ * \param [in] type The name of the class
  *
  * This macro defines and generates the code for the implementation 
  * of the \c MakeTypeAccessor template functions. This macro is typically
@@ -167,8 +167,8 @@
  * Declare the attribute value class \p \<name>Value
  * for underlying class \p type.
  *
- * \param type The underlying type name
- * \param name The token to use in defining the accessor name.
+ * \param [in] type The underlying type name
+ * \param [in] name The token to use in defining the accessor name.
  *
  * This macro declares the class \c TypeValue associated with class \c type.
  * This macro is typically invoked in the class header file.
@@ -207,7 +207,7 @@
  * Declare the attribute value class \p \<Name>Value
  * for the class \p Name
  *
- * \param Name the name of the class.
+ * \param [in] Name The name of the class.
  *
  * This macro declares the class \c NameValue associated to class \c Name.
  * This macro is typically invoked in the class header file.
@@ -222,7 +222,7 @@
  * Define the conversion operators class \p type and
  * Attribute instances.
  *
- * \param type the name of the class
+ * \param [in] type The name of the class
  *
  * This macro defines the conversion operators for class \c type to and
  * from instances of type Attribute.
@@ -239,7 +239,7 @@
  * Declare the AttributeChecker class \p \<type>Checker
  * and the \c MakeTypeChecker function for class \p type.
  *
- * \param type the name of the class
+ * \param [in] type The name of the class
  *
  * This macro declares the \p \<type>Checker class and the associated
  * \c MakeTypeChecker function.
@@ -261,8 +261,8 @@
  * the attribute value class \p \<name>Value 
  * of the underlying class \p type.
  *
- * \param type The underlying type name
- * \param name The token to use in defining the accessor name.
+ * \param [in] type The underlying type name
+ * \param [in] name The token to use in defining the accessor name.
  *
  * This macro implements the \p \<type>Value class methods
  * (including the \p \<type>Value::SerializeToString
@@ -305,7 +305,7 @@
  * Define the class methods belonging to
  * attribute value class \p \<type>Value for class \p type.
  *
- * \param type the name of the class.
+ * \param [in] type The name of the class.
  *
  * This macro implements the \p \<type>Value class methods
  * (including the \p \<type>Value::SerializeToString
@@ -322,7 +322,7 @@
  *
  * Define the \c MakeTypeChecker function for class \p type.
  *
- * \param type the name of the class
+ * \param [in] type The name of the class
  *
  * This macro implements the \c MakeTypeChecker function.
  *
@@ -339,8 +339,8 @@
  *
  * Define the \c MakeTypeChecker function for class \p type.
  *
- * \param type the name of the class.
- * \param name the string name of the underlying type.
+ * \param [in] type The name of the class.
+ * \param [in] name The string name of the underlying type.
  *
  * This macro implements the \c MakeTypeChecker function
  * for class \p type.
@@ -358,7 +358,7 @@
  *
  * Declare the attribute value, accessor and checkers for class \p type
  *
- * \param type the name of the class
+ * \param [in] type The name of the class
  *
  * This macro declares:
  *
@@ -384,7 +384,7 @@
  *
  * Define the attribute value, accessor and checkers for class \p type
  *
- * \param type the name of the class
+ * \param [in] type The name of the class
  *
  * This macro implements
  *
diff -Naur ns-3.23/src/core/model/build-profile.h ns-3.24/src/core/model/build-profile.h
--- ns-3.23/src/core/model/build-profile.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.24/src/core/model/build-profile.h	2015-09-15 11:18:44.000000000 -0700
@@ -0,0 +1,93 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 LLNL
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
+ */
+
+#ifndef NS3_BUILD_PROFILE_H
+#define NS3_BUILD_PROFILE_H
+
+/**
+ * \file
+ * \ingroup debugging
+ * Definition of build profile macros NS_BUILD_DEBUG, NS_BUILD_RELEASE,
+ * and NS_BUILD_OPTIMIZED.
+ */
+
+/**
+ * \ingroup debugging
+ * Build profile no-op macro.
+ * \param [in] code The code to skip.
+ */
+#define NS_BUILD_PROFILE_NOOP(code)             \
+  do                                            \
+      if (false)                                \
+        {                                       \
+          code ;                                \
+        }                                       \
+  while (false)
+
+/**
+ * \ingroup debugging
+ * Build profile macro to execute a code snippet.
+ * \param [in] code The code to execute.
+ */
+#define NS_BUILD_PROFILE_OP(code) \
+  do                                            \
+    {                                           \
+      code ;                                    \
+    }                                           \
+  while (false)
+
+
+#ifdef NS3_BUILD_PROFILE_DEBUG
+/**
+ * \ingroup debugging
+ * Execute a code snippet in debug builds.
+ * \param [in] code The code to execute.
+ */
+#define NS_BUILD_DEBUG(code)     NS_BUILD_PROFILE_OP (code)
+#else
+#define NS_BUILD_DEBUG(code)     NS_BUILD_PROFILE_NOOP (code)
+#endif
+
+#ifdef NS3_BUILD_PROFILE_RELEASE
+/**
+ * \ingroup debugging
+ * Execute a code snippet in release builds.
+ * \param [in] code The code to execute.
+ */
+#define NS_BUILD_RELEASE(code)   NS_BUILD_PROFILE_OP (code)
+#else
+#define NS_BUILD_RELEASE(code)   NS_BUILD_PROFILE_NOOP (code)
+#endif
+
+#ifdef NS3_BUILD_PROFILE_OPTIMIZED
+/**
+ * \ingroup debugging
+ * Execute a code snippet in optimized builds.
+ * \param [in] code The code to execute.
+ */
+#define NS_BUILD_OPTIMIZED(code) NS_BUILD_PROFILE_OP (code)
+#else
+#define NS_BUILD_OPTIMIZED(code) NS_BUILD_PROFILE_NOOP (code)
+#endif
+
+
+
+
+#endif /* NS3_BUILD_PROFILE_H */
diff -Naur ns-3.23/src/core/model/cairo-wideint.c ns-3.24/src/core/model/cairo-wideint.c
--- ns-3.23/src/core/model/cairo-wideint.c	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/cairo-wideint.c	2015-09-15 11:18:44.000000000 -0700
@@ -1,3 +1,4 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /* cairo - a vector graphics library with display and print output
  *
  * Copyright Â© 2004 Keith Packard
diff -Naur ns-3.23/src/core/model/cairo-wideint-private.h ns-3.24/src/core/model/cairo-wideint-private.h
--- ns-3.23/src/core/model/cairo-wideint-private.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/cairo-wideint-private.h	2015-09-15 11:18:44.000000000 -0700
@@ -1,3 +1,4 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /* cairo - a vector graphics library with display and print output
  *
  * Copyright Â© 2004 Keith Packard
diff -Naur ns-3.23/src/core/model/calendar-scheduler.h ns-3.24/src/core/model/calendar-scheduler.h
--- ns-3.23/src/core/model/calendar-scheduler.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/calendar-scheduler.h	2015-09-15 11:18:44.000000000 -0700
@@ -39,58 +39,113 @@
  * \ingroup scheduler
  * \brief a calendar queue event scheduler
  *
- * This event scheduler is a direct implementation of the algorithm known as a calendar queue.
- * first published in 1988 in "Calendar Queues: A Fast O(1) Priority Queue Implementation for
- * the Simulation Event Set Problem" by Randy Brown. There are many refinements published
- * later but this class implements the original algorithm (to the best of my knowledge).
+ * This event scheduler is a direct implementation of the algorithm
+ * known as a calendar queue, first published in 1988 in
+ * "Calendar Queues: A Fast O(1) Priority Queue Implementation for
+ * the Simulation Event Set Problem" by Randy Brown. There are many
+ * refinements published later but this class implements
+ * the original algorithm (to the best of my knowledge).
  *
- * Note: This queue is much slower than I expected (much slower than the std::map queue)
- * and this seems to be because the original resizing policy is horribly bad. This is
- * most likely the reason why there have been so many variations published which all
- * slightly tweak the resizing heuristics to obtain a better distribution of events
- * across buckets.
+ * \note
+ * This queue is much slower than I expected (much slower than the
+ * std::map queue) and this seems to be because the original resizing policy
+ * is horribly bad.  This is most likely the reason why there have been
+ * so many variations published which all slightly tweak the resizing
+ * heuristics to obtain a better distribution of events across buckets.
  */
 class CalendarScheduler : public Scheduler
 {
 public:
+  /**
+   *  Register this type.
+   *  \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
 
+  /** Constructor. */
   CalendarScheduler ();
+  /** Destructor. */
   virtual ~CalendarScheduler ();
 
-  virtual void Insert (const Event &ev);
+  // Inherited
+  virtual void Insert (const Scheduler::Event &ev);
   virtual bool IsEmpty (void) const;
-  virtual Event PeekNext (void) const;
-  virtual Event RemoveNext (void);
-  virtual void Remove (const Event &ev);
+  virtual Scheduler::Event PeekNext (void) const;
+  virtual Scheduler::Event RemoveNext (void);
+  virtual void Remove (const Scheduler::Event &ev);
 
 private:
+  /** Double the number of buckets if necessary. */
   void ResizeUp (void);
+  /** Halve the number of buckets if necessary. */
   void ResizeDown (void);
+  /**
+   * Resize to a new number of buckets, with automatically computed width.
+   *
+   * \param [in] newSize The new number of buckets.
+   */
   void Resize (uint32_t newSize);
+  /**
+   * Compute the new bucket size, based on up to the first 25 entries.
+   *
+   * \returns The new width.
+   */
   uint32_t CalculateNewWidth (void);
+  /**
+   * Initialize the calendar queue.
+   *
+   * \param [in] nBuckets The number of buckets.
+   * \param [in] width The bucket size, in dimensionless time units.
+   * \param [in] startPrio The starting time.
+   */
   void Init (uint32_t nBuckets,
              uint64_t width,
              uint64_t startPrio);
+  /**
+   * Hash the dimensionless time to a bucket.
+   *
+   * \param [in] key The dimensionless time.
+   * \returns The bucket index.
+   */
   inline uint32_t Hash (uint64_t key) const;
+  /** Print the configuration and bucket size distribution. */
   void PrintInfo (void);
+  /**
+   * Resize the number of buckets and width.
+   *
+   * \param [in] newSize The number of buckets.
+   * \param [in] newWidth The size of the new buckets.
+   */
   void DoResize (uint32_t newSize, uint32_t newWidth);
+  /**
+   * Remove the earliest event.
+   *
+   * \returns The earliest event.
+   */
   Scheduler::Event DoRemoveNext (void);
-  void DoInsert (const Event &ev);
+  /**
+   * Insert a new event in to the correct bucket.
+   *
+   * \param [in] ev The new Event.
+   */
+  void DoInsert (const Scheduler::Event &ev);
 
+  /** Calendar bucket type: a list of Events. */
   typedef std::list<Scheduler::Event> Bucket;
+  
+  /** Array of buckets. */
   Bucket *m_buckets;
-  // number of buckets in array
+  /** Number of buckets in the array. */
   uint32_t m_nBuckets;
-  // duration of a bucket
+  /** Duration of a bucket, in dimensionless time units. */
   uint64_t m_width;
-  // bucket index from which the last event was dequeued
+  /** Bucket index from which the last event was dequeued. */
   uint32_t m_lastBucket;
-  // priority at the top of the bucket from which last event was dequeued
+  /** Priority at the top of the bucket from which last event was dequeued. */
   uint64_t m_bucketTop;
-  // the priority of the last event removed
+  /** The priority of the last event removed. */
   uint64_t m_lastPrio;
-  // number of events in queue
+  /** Number of events in queue. */
   uint32_t m_qSize;
 };
 
diff -Naur ns-3.23/src/core/model/callback.cc ns-3.24/src/core/model/callback.cc
--- ns-3.23/src/core/model/callback.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/callback.cc	2015-09-15 11:18:44.000000000 -0700
@@ -85,7 +85,7 @@
 namespace ns3 {
 
 std::string
-CallbackBase::Demangle (const std::string& mangled)
+CallbackImplBase::Demangle (const std::string& mangled)
 {
   NS_LOG_FUNCTION (mangled);
 
diff -Naur ns-3.23/src/core/model/callback.h ns-3.24/src/core/model/callback.h
--- ns-3.23/src/core/model/callback.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/callback.h	2015-09-15 11:18:44.000000000 -0700
@@ -122,8 +122,8 @@
 struct CallbackTraits<T *>
 {
   /**
-   * \param p object pointer
-   * \return a reference to the object pointed to by p
+   * \param [in] p Object pointer
+   * \return A reference to the object pointed to by p
    */
   static T & GetReference (T * const p)
   {
@@ -144,10 +144,41 @@
   /**
    * Equality test
    *
-   * \param other Callback Ptr
-   * \return true if we are equal
+   * \param [in] other Callback Ptr
+   * \return \c true if we are equal
    */
   virtual bool IsEqual (Ptr<const CallbackImplBase> other) const = 0;
+  /** Get the type as a string. */
+  virtual std::string GetTypeid (void) const = 0;
+
+protected:
+  /**
+   * \param [in] mangled The mangled string
+   * \return The demangled form of mangled
+   */
+  static std::string Demangle (const std::string& mangled);
+  /**
+   * Helper to get the C++ typeid as a string.
+   *
+   * \tparam T The type of the argument.
+   * \param t The object.
+   * \returns The result of applying typeid to the argument.
+   */
+  template <typename T>
+  static std::string GetCppTypeid (void)
+  {
+    std::string typeName;
+    try
+      {
+        typeName = typeid (T).name ();
+        typeName = Demangle (typeName);
+      }
+    catch (const std::bad_typeid &e)
+      {
+        typeName = e.what ();
+      }
+    return typeName;
+  }
 };
 
 /**
@@ -169,6 +200,17 @@
 public:
   virtual ~CallbackImpl () {}
   virtual R operator() (void) = 0;      //!< Abstract operator
+  virtual std::string GetTypeid (void) const
+  {
+    return DoGetTypeid ();
+  }
+  static std::string DoGetTypeid (void)
+  {
+    static std::string id = "CallbackImpl<" +
+      GetCppTypeid<R> () +
+      ">";
+    return id;
+  }
 };
 /** CallbackImpl class with one argument. */
 template <typename R, typename T1>
@@ -176,6 +218,18 @@
 public:
   virtual ~CallbackImpl () {}
   virtual R operator() (T1) = 0;        //!< Abstract operator
+  virtual std::string GetTypeid (void) const
+  {
+    return DoGetTypeid ();
+  }
+  static std::string DoGetTypeid (void)
+  {
+    static std::string id = "CallbackImpl<" +
+      GetCppTypeid<R> () + "," +
+      GetCppTypeid<T1> () +
+      ">";
+    return id;
+  }
 };
 /** CallbackImpl class with two arguments. */
 template <typename R, typename T1, typename T2>
@@ -183,6 +237,19 @@
 public:
   virtual ~CallbackImpl () {}
   virtual R operator() (T1, T2) = 0;    //!< Abstract operator
+  virtual std::string GetTypeid (void) const
+  {
+    return DoGetTypeid ();
+  }
+  static std::string DoGetTypeid (void)
+  {
+    static std::string id = "CallbackImpl<" +
+      GetCppTypeid<R> () + "," +
+      GetCppTypeid<T1> () + "," +
+      GetCppTypeid<T2> () +
+      ">";
+    return id;
+  }
 };
 /** CallbackImpl class with three arguments. */
 template <typename R, typename T1, typename T2, typename T3>
@@ -190,6 +257,20 @@
 public:
   virtual ~CallbackImpl () {}
   virtual R operator() (T1, T2, T3) = 0;  //!< Abstract operator
+  virtual std::string GetTypeid (void) const
+  {
+    return DoGetTypeid ();
+  }
+  static std::string DoGetTypeid (void)
+  {
+    static std::string id = "CallbackImpl<" +
+      GetCppTypeid<R> () + "," +
+      GetCppTypeid<T1> () + "," +
+      GetCppTypeid<T2> () + "," +
+      GetCppTypeid<T3> () +
+      ">";
+    return id;
+  }
 };
 /** CallbackImpl class with four arguments. */
 template <typename R, typename T1, typename T2, typename T3, typename T4>
@@ -197,6 +278,21 @@
 public:
   virtual ~CallbackImpl () {}
   virtual R operator() (T1, T2, T3, T4) = 0;  //!< Abstract operator
+  virtual std::string GetTypeid (void) const
+  {
+    return DoGetTypeid ();
+  }
+  static std::string DoGetTypeid (void)
+  {
+    static std::string id = "CallbackImpl<" +
+      GetCppTypeid<R> () + "," +
+      GetCppTypeid<T1> () + "," +
+      GetCppTypeid<T2> () + "," +
+      GetCppTypeid<T3> () + "," +
+      GetCppTypeid<T4> () +
+      ">";
+    return id;
+  }
 };
 /** CallbackImpl class with five arguments. */
 template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5>
@@ -204,6 +300,22 @@
 public:
   virtual ~CallbackImpl () {}
   virtual R operator() (T1, T2, T3, T4, T5) = 0;  //!< Abstract operator
+  virtual std::string GetTypeid (void) const
+  {
+    return DoGetTypeid ();
+  }
+  static std::string DoGetTypeid (void)
+  {
+    static std::string id = "CallbackImpl<" +
+      GetCppTypeid<R> () + "," +
+      GetCppTypeid<T1> () + "," +
+      GetCppTypeid<T2> () + "," +
+      GetCppTypeid<T3> () + "," +
+      GetCppTypeid<T4> () + "," +
+      GetCppTypeid<T5> () +
+      ">";
+    return id;
+  }
 };
 /** CallbackImpl class with six arguments. */
 template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
@@ -211,6 +323,23 @@
 public:
   virtual ~CallbackImpl () {}
   virtual R operator() (T1, T2, T3, T4, T5, T6) = 0;  //!< Abstract operator
+  virtual std::string GetTypeid (void) const
+  {
+    return DoGetTypeid ();
+  }
+  static std::string DoGetTypeid (void)
+  {
+    static std::string id = "CallbackImpl<" +
+      GetCppTypeid<R> () + "," +
+      GetCppTypeid<T1> () + "," +
+      GetCppTypeid<T2> () + "," +
+      GetCppTypeid<T3> () + "," +
+      GetCppTypeid<T4> () + "," +
+      GetCppTypeid<T5> () + "," +
+      GetCppTypeid<T6> () +
+      ">";
+    return id;
+  }
 };
 /** CallbackImpl class with seven arguments. */
 template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
@@ -218,6 +347,24 @@
 public:
   virtual ~CallbackImpl () {}
   virtual R operator() (T1, T2, T3, T4, T5, T6, T7) = 0;  //!< Abstract operator
+  virtual std::string GetTypeid (void) const
+  {
+    return DoGetTypeid ();
+  }
+  static std::string DoGetTypeid (void)
+  {
+    static std::string id = "CallbackImpl<" +
+      GetCppTypeid<R> () + "," +
+      GetCppTypeid<T1> () + "," +
+      GetCppTypeid<T2> () + "," +
+      GetCppTypeid<T3> () + "," +
+      GetCppTypeid<T4> () + "," +
+      GetCppTypeid<T5> () + "," +
+      GetCppTypeid<T6> () + "," +
+      GetCppTypeid<T7> () +
+      ">";
+    return id;
+  }
 };
 /** CallbackImpl class with eight arguments. */
 template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
@@ -225,6 +372,25 @@
 public:
   virtual ~CallbackImpl () {}
   virtual R operator() (T1, T2, T3, T4, T5, T6, T7, T8) = 0;  //!< Abstract operator
+  virtual std::string GetTypeid (void) const
+  {
+    return DoGetTypeid ();
+  }
+  static std::string DoGetTypeid (void)
+  {
+    static std::string id = "CallbackImpl<" +
+      GetCppTypeid<R> () + "," +
+      GetCppTypeid<T1> () + "," +
+      GetCppTypeid<T2> () + "," +
+      GetCppTypeid<T3> () + "," +
+      GetCppTypeid<T4> () + "," +
+      GetCppTypeid<T5> () + "," +
+      GetCppTypeid<T6> () + "," +
+      GetCppTypeid<T7> () + "," +
+      GetCppTypeid<T8> () +
+      ">";
+    return id;
+  }
 };
 /** CallbackImpl class with nine arguments. */
 template <typename R, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
@@ -232,6 +398,26 @@
 public:
   virtual ~CallbackImpl () {}
   virtual R operator() (T1, T2, T3, T4, T5, T6, T7, T8, T9) = 0;  //!< Abstract operator
+  virtual std::string GetTypeid (void) const
+  {
+    return DoGetTypeid ();
+  }
+  static std::string DoGetTypeid (void)
+  {
+    static std::string id = "CallbackImpl<" +
+      GetCppTypeid<R> () + "," +
+      GetCppTypeid<T1> () + "," +
+      GetCppTypeid<T2> () + "," +
+      GetCppTypeid<T3> () + "," +
+      GetCppTypeid<T4> () + "," +
+      GetCppTypeid<T5> () + "," +
+      GetCppTypeid<T6> () + "," +
+      GetCppTypeid<T7> () + "," +
+      GetCppTypeid<T8> () + "," +
+      GetCppTypeid<T9> () +
+      ">";
+    return id;
+  }
 };
 /**@}*/
 
@@ -246,7 +432,7 @@
   /**
    * Construct from a functor
    *
-   * \param functor the functor 
+   * \param [in] functor The functor 
    */
   FunctorCallbackImpl (T const &functor)
     : m_functor (functor) {}
@@ -260,99 +446,99 @@
     return m_functor ();
   }
   /**
-   * \param a1 first argument
+   * \param [in] a1 First argument
    * \return Callback value
    */
   R operator() (T1 a1) {
     return m_functor (a1);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
    * \return Callback value
    */
   R operator() (T1 a1,T2 a2) {
     return m_functor (a1,a2);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
-   * \param a3 third argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
+   * \param [in] a3 Third argument
    * \return Callback value
    */
   R operator() (T1 a1,T2 a2,T3 a3) {
     return m_functor (a1,a2,a3);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
-   * \param a3 third argument
-   * \param a4 fourth argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
+   * \param [in] a3 Third argument
+   * \param [in] a4 Fourth argument
    * \return Callback value
    */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4) {
     return m_functor (a1,a2,a3,a4);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
-   * \param a3 third argument
-   * \param a4 fourth argument
-   * \param a5 fifth argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
+   * \param [in] a3 Third argument
+   * \param [in] a4 Fourth argument
+   * \param [in] a5 Fifth argument
    * \return Callback value
    */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5) {
     return m_functor (a1,a2,a3,a4,a5);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
-   * \param a3 third argument
-   * \param a4 fourth argument
-   * \param a5 fifth argument
-   * \param a6 sixth argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
+   * \param [in] a3 Third argument
+   * \param [in] a4 Fourth argument
+   * \param [in] a5 Fifth argument
+   * \param [in] a6 Sixth argument
    * \return Callback value
    */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6) {
     return m_functor (a1,a2,a3,a4,a5,a6);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
-   * \param a3 third argument
-   * \param a4 fourth argument
-   * \param a5 fifth argument
-   * \param a6 sixth argument
-   * \param a7 seventh argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
+   * \param [in] a3 Third argument
+   * \param [in] a4 Fourth argument
+   * \param [in] a5 Fifth argument
+   * \param [in] a6 Sixth argument
+   * \param [in] a7 Seventh argument
    * \return Callback value
    */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7) {
     return m_functor (a1,a2,a3,a4,a5,a6,a7);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
-   * \param a3 third argument
-   * \param a4 fourth argument
-   * \param a5 fifth argument
-   * \param a6 sixth argument
-   * \param a7 seventh argument
-   * \param a8 eighth argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
+   * \param [in] a3 Third argument
+   * \param [in] a4 Fourth argument
+   * \param [in] a5 Fifth argument
+   * \param [in] a6 Sixth argument
+   * \param [in] a7 Seventh argument
+   * \param [in] a8 eighth argument
    * \return Callback value
    */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8) {
     return m_functor (a1,a2,a3,a4,a5,a6,a7,a8);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
-   * \param a3 third argument
-   * \param a4 fourth argument
-   * \param a5 fifth argument
-   * \param a6 sixth argument
-   * \param a7 seventh argument
-   * \param a8 eighth argument
-   * \param a9 ninth argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
+   * \param [in] a3 Third argument
+   * \param [in] a4 Fourth argument
+   * \param [in] a5 Fifth argument
+   * \param [in] a6 Sixth argument
+   * \param [in] a7 Seventh argument
+   * \param [in] a8 eighth argument
+   * \param [in] a9 ninth argument
    * \return Callback value
    */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8,T9 a9) {
@@ -362,8 +548,8 @@
   /**
    * Equality test.
    *
-   * \param other CallbackImpl Ptr
-   * \return true if this and other have the same functor
+   * \param [in] other CallbackImpl Ptr
+   * \return \c true if this and other have the same functor
    */
   virtual bool IsEqual (Ptr<const CallbackImplBase> other) const {
     FunctorCallbackImpl<T,R,T1,T2,T3,T4,T5,T6,T7,T8,T9> const *otherDerived = 
@@ -392,8 +578,8 @@
   /**
    * Construct from an object pointer and member function pointer
    *
-   * \param objPtr the object pointer
-   * \param memPtr the object class member function
+   * \param [in] objPtr The object pointer
+   * \param [in] memPtr The object class member function
    */
   MemPtrCallbackImpl (OBJ_PTR const&objPtr, MEM_PTR memPtr)
     : m_objPtr (objPtr), m_memPtr (memPtr) {}
@@ -407,99 +593,99 @@
     return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr)();
   }
   /**
-   * \param a1 first argument
+   * \param [in] a1 First argument
    * \return Callback value
    */
   R operator() (T1 a1) {
     return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr)(a1);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
    * \return Callback value
    */
   R operator() (T1 a1,T2 a2) {
     return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr)(a1, a2);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
-   * \param a3 third argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
+   * \param [in] a3 Third argument
    * \return Callback value
    */
   R operator() (T1 a1,T2 a2,T3 a3) {
     return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr)(a1, a2, a3);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
-   * \param a3 third argument
-   * \param a4 fourth argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
+   * \param [in] a3 Third argument
+   * \param [in] a4 Fourth argument
    * \return Callback value
    */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4) {
     return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr)(a1, a2, a3, a4);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
-   * \param a3 third argument
-   * \param a4 fourth argument
-   * \param a5 fifth argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
+   * \param [in] a3 Third argument
+   * \param [in] a4 Fourth argument
+   * \param [in] a5 Fifth argument
    * \return Callback value
    */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5) {
     return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr)(a1, a2, a3, a4, a5);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
-   * \param a3 third argument
-   * \param a4 fourth argument
-   * \param a5 fifth argument
-   * \param a6 sixth argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
+   * \param [in] a3 Third argument
+   * \param [in] a4 Fourth argument
+   * \param [in] a5 Fifth argument
+   * \param [in] a6 Sixth argument
    * \return Callback value
    */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6) {
     return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr)(a1, a2, a3, a4, a5, a6);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
-   * \param a3 third argument
-   * \param a4 fourth argument
-   * \param a5 fifth argument
-   * \param a6 sixth argument
-   * \param a7 seventh argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
+   * \param [in] a3 Third argument
+   * \param [in] a4 Fourth argument
+   * \param [in] a5 Fifth argument
+   * \param [in] a6 Sixth argument
+   * \param [in] a7 Seventh argument
    * \return Callback value
    */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7) {
     return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr)(a1, a2, a3, a4, a5, a6, a7);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
-   * \param a3 third argument
-   * \param a4 fourth argument
-   * \param a5 fifth argument
-   * \param a6 sixth argument
-   * \param a7 seventh argument
-   * \param a8 eighth argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
+   * \param [in] a3 Third argument
+   * \param [in] a4 Fourth argument
+   * \param [in] a5 Fifth argument
+   * \param [in] a6 Sixth argument
+   * \param [in] a7 Seventh argument
+   * \param [in] a8 Eighth argument
    * \return Callback value
    */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8) {
     return ((CallbackTraits<OBJ_PTR>::GetReference (m_objPtr)).*m_memPtr)(a1, a2, a3, a4, a5, a6, a7, a8);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
-   * \param a3 third argument
-   * \param a4 fourth argument
-   * \param a5 fifth argument
-   * \param a6 sixth argument
-   * \param a7 seventh argument
-   * \param a8 eighth argument
-   * \param a9 ninth argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
+   * \param [in] a3 Third argument
+   * \param [in] a4 Fourth argument
+   * \param [in] a5 Fifth argument
+   * \param [in] a6 Sixth argument
+   * \param [in] a7 Seventh argument
+   * \param [in] a8 Eighth argument
+   * \param [in] a9 Ninth argument
    * \return Callback value
    */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8, T9 a9) {
@@ -509,8 +695,8 @@
   /**
    * Equality test.
    *
-   * \param other Callback Ptr
-   * \return true if we have the same object and member function
+   * \param [in] other Callback Ptr
+   * \return \c true if we have the same object and member function
    */
   virtual bool IsEqual (Ptr<const CallbackImplBase> other) const {
     MemPtrCallbackImpl<OBJ_PTR,MEM_PTR,R,T1,T2,T3,T4,T5,T6,T7,T8,T9> const *otherDerived = 
@@ -540,8 +726,8 @@
 public:
   /**
    * Construct from functor and a bound argument
-   * \param functor the functor 
-   * \param a the argument to bind
+   * \param [in] functor The functor 
+   * \param [in] a The argument to bind
    */
   template <typename FUNCTOR, typename ARG>
   BoundFunctorCallbackImpl (FUNCTOR functor, ARG a)
@@ -556,84 +742,84 @@
     return m_functor (m_a);
   }
   /**
-   * \param a1 first argument
+   * \param [in] a1 First argument
    * \return Callback value
    */
   R operator() (T1 a1) {
     return m_functor (m_a,a1);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
    * \return Callback value
    */
   R operator() (T1 a1,T2 a2) {
     return m_functor (m_a,a1,a2);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
-   * \param a3 third argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
+   * \param [in] a3 Third argument
    * \return Callback value
    */
   R operator() (T1 a1,T2 a2,T3 a3) {
     return m_functor (m_a,a1,a2,a3);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
-   * \param a3 third argument
-   * \param a4 fourth argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
+   * \param [in] a3 Third argument
+   * \param [in] a4 Fourth argument
    * \return Callback value
    */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4) {
     return m_functor (m_a,a1,a2,a3,a4);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
-   * \param a3 third argument
-   * \param a4 fourth argument
-   * \param a5 fifth argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
+   * \param [in] a3 Third argument
+   * \param [in] a4 Fourth argument
+   * \param [in] a5 Fifth argument
    * \return Callback value
    */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5) {
     return m_functor (m_a,a1,a2,a3,a4,a5);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
-   * \param a3 third argument
-   * \param a4 fourth argument
-   * \param a5 fifth argument
-   * \param a6 sixth argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
+   * \param [in] a3 Third argument
+   * \param [in] a4 Fourth argument
+   * \param [in] a5 Fifth argument
+   * \param [in] a6 Sixth argument
    * \return Callback value
    */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6) {
     return m_functor (m_a,a1,a2,a3,a4,a5,a6);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
-   * \param a3 third argument
-   * \param a4 fourth argument
-   * \param a5 fifth argument
-   * \param a6 sixth argument
-   * \param a7 seventh argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
+   * \param [in] a3 Third argument
+   * \param [in] a4 Fourth argument
+   * \param [in] a5 Fifth argument
+   * \param [in] a6 Sixth argument
+   * \param [in] a7 Seventh argument
    * \return Callback value
    */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7) {
     return m_functor (m_a,a1,a2,a3,a4,a5,a6,a7);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
-   * \param a3 third argument
-   * \param a4 fourth argument
-   * \param a5 fifth argument
-   * \param a6 sixth argument
-   * \param a7 seventh argument
-   * \param a8 eighth argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
+   * \param [in] a3 Third argument
+   * \param [in] a4 Fourth argument
+   * \param [in] a5 Fifth argument
+   * \param [in] a6 Sixth argument
+   * \param [in] a7 Seventh argument
+   * \param [in] a8 Eighth argument
    * \return Callback value
    */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8) {
@@ -643,8 +829,8 @@
   /**
    * Equality test.
    *
-   * \param other Callback Ptr
-   * \return true if we have the same functor and bound arguments
+   * \param [in] other Callback Ptr
+   * \return \c true if we have the same functor and bound arguments
    */
   virtual bool IsEqual (Ptr<const CallbackImplBase> other) const {
     BoundFunctorCallbackImpl<T,R,TX,T1,T2,T3,T4,T5,T6,T7,T8> const *otherDerived = 
@@ -674,9 +860,9 @@
 public:
   /**
    * Construct from functor and two arguments
-   * \param functor the functor
-   * \param arg1 the first argument to bind
-   * \param arg2 the second argument to bind
+   * \param [in] functor The functor
+   * \param [in] arg1 The first argument to bind
+   * \param [in] arg2 The second argument to bind
    */
   template <typename FUNCTOR, typename ARG1, typename ARG2>
   TwoBoundFunctorCallbackImpl (FUNCTOR functor, ARG1 arg1, ARG2 arg2)
@@ -691,70 +877,70 @@
     return m_functor (m_a1,m_a2);
   }
   /**
-   * \param a1 first argument
+   * \param [in] a1 First argument
    * \return Callback value
    */
   R operator() (T1 a1) {
     return m_functor (m_a1,m_a2,a1);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
    * \return Callback value
    */
   R operator() (T1 a1,T2 a2) {
     return m_functor (m_a1,m_a2,a1,a2);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
-   * \param a3 third argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
+   * \param [in] a3 Third argument
    * \return Callback value
    */
   R operator() (T1 a1,T2 a2,T3 a3) {
     return m_functor (m_a1,m_a2,a1,a2,a3);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
-   * \param a3 third argument
-   * \param a4 fourth argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
+   * \param [in] a3 Third argument
+   * \param [in] a4 Fourth argument
    * \return Callback value
    */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4) {
     return m_functor (m_a1,m_a2,a1,a2,a3,a4);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
-   * \param a3 third argument
-   * \param a4 fourth argument
-   * \param a5 fifth argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
+   * \param [in] a3 Third argument
+   * \param [in] a4 Fourth argument
+   * \param [in] a5 Fifth argument
    * \return Callback value
    */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5) {
     return m_functor (m_a1,m_a2,a1,a2,a3,a4,a5);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
-   * \param a3 third argument
-   * \param a4 fourth argument
-   * \param a5 fifth argument
-   * \param a6 sixth argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
+   * \param [in] a3 Third argument
+   * \param [in] a4 Fourth argument
+   * \param [in] a5 Fifth argument
+   * \param [in] a6 Sixth argument
    * \return Callback value
    */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6) {
     return m_functor (m_a1,m_a2,a1,a2,a3,a4,a5,a6);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
-   * \param a3 third argument
-   * \param a4 fourth argument
-   * \param a5 fifth argument
-   * \param a6 sixth argument
-   * \param a7 seventh argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
+   * \param [in] a3 Third argument
+   * \param [in] a4 Fourth argument
+   * \param [in] a5 Fifth argument
+   * \param [in] a6 Sixth argument
+   * \param [in] a7 Seventh argument
    * \return Callback value
    */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7) {
@@ -764,8 +950,8 @@
   /**
    * Equality test.
    *
-   * \param other Callback Ptr
-   * \return true if we have the same functor and bound arguments
+   * \param [in] other Callback Ptr
+   * \return \c true if we have the same functor and bound arguments
    */
   virtual bool IsEqual (Ptr<const CallbackImplBase> other) const {
     TwoBoundFunctorCallbackImpl<T,R,TX1,TX2,T1,T2,T3,T4,T5,T6,T7> const *otherDerived = 
@@ -796,10 +982,10 @@
 public:
   /**
    * Construct from functor and three arguments
-   * \param functor the functor
-   * \param arg1 the first argument to bind
-   * \param arg2 the second argument to bind
-   * \param arg3 the third argument to bind
+   * \param [in] functor The functor
+   * \param [in] arg1 The first argument to bind
+   * \param [in] arg2 The second argument to bind
+   * \param [in] arg3 The third argument to bind
    */
   template <typename FUNCTOR, typename ARG1, typename ARG2, typename ARG3>
   ThreeBoundFunctorCallbackImpl (FUNCTOR functor, ARG1 arg1, ARG2 arg2, ARG3 arg3)
@@ -814,57 +1000,57 @@
     return m_functor (m_a1,m_a2,m_a3);
   }
   /**
-   * \param a1 first argument
+   * \param [in] a1 First argument
    * \return Callback value
    */
   R operator() (T1 a1) {
     return m_functor (m_a1,m_a2,m_a3,a1);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
    * \return Callback value
    */
   R operator() (T1 a1,T2 a2) {
     return m_functor (m_a1,m_a2,m_a3,a1,a2);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
-   * \param a3 third argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
+   * \param [in] a3 Third argument
    * \return Callback value
    */
   R operator() (T1 a1,T2 a2,T3 a3) {
     return m_functor (m_a1,m_a2,m_a3,a1,a2,a3);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
-   * \param a3 third argument
-   * \param a4 fourth argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
+   * \param [in] a3 Third argument
+   * \param [in] a4 Fourth argument
    * \return Callback value
    */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4) {
     return m_functor (m_a1,m_a2,m_a3,a1,a2,a3,a4);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
-   * \param a3 third argument
-   * \param a4 fourth argument
-   * \param a5 fifth argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
+   * \param [in] a3 Third argument
+   * \param [in] a4 Fourth argument
+   * \param [in] a5 Fifth argument
    * \return Callback value
    */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5) {
     return m_functor (m_a1,m_a2,m_a3,a1,a2,a3,a4,a5);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
-   * \param a3 third argument
-   * \param a4 fourth argument
-   * \param a5 fifth argument
-   * \param a6 sixth argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
+   * \param [in] a3 Third argument
+   * \param [in] a4 Fourth argument
+   * \param [in] a5 Fifth argument
+   * \param [in] a6 Sixth argument
    * \return Callback value
    */
   R operator() (T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6) {
@@ -874,8 +1060,8 @@
   /**
    * Equality test.
    *
-   * \param other Callback Ptr
-   * \return true if we have the same functor and bound arguments
+   * \param [in] other Callback Ptr
+   * \return \c true if we have the same functor and bound arguments
    */
   virtual bool IsEqual (Ptr<const CallbackImplBase> other) const {
     ThreeBoundFunctorCallbackImpl<T,R,TX1,TX2,TX3,T1,T2,T3,T4,T5,T6> const *otherDerived = 
@@ -906,21 +1092,15 @@
 class CallbackBase {
 public:
   CallbackBase () : m_impl () {}
-  /** \return the impl pointer */
+  /** \return The impl pointer */
   Ptr<CallbackImplBase> GetImpl (void) const { return m_impl; }
 protected:
   /**
    * Construct from a pimpl
-   * \param impl the CallbackImplBase Ptr
+   * \param [in] impl The CallbackImplBase Ptr
    */
   CallbackBase (Ptr<CallbackImplBase> impl) : m_impl (impl) {}
   Ptr<CallbackImplBase> m_impl;         //!< the pimpl
-
-  /**
-   * \param mangled the mangled string
-   * \return the demangled form of mangled
-   */
-  static std::string Demangle (const std::string& mangled);
 };
 
 /**
@@ -988,7 +1168,7 @@
   /**
    * Construct a functor call back, supporting operator() calls
    *
-   * \param functor the functor to run on this callback
+   * \param [in] functor The functor to run on this callback
    *
    * \internal
    * There are two dummy args below to ensure that this constructor is
@@ -1002,8 +1182,8 @@
   /**
    * Construct a member function pointer call back.
    *
-   * \param objPtr pointer to the object
-   * \param memPtr  pointer to the member function
+   * \param [in] objPtr Pointer to the object
+   * \param [in] memPtr Pointer to the member function
    */
   template <typename OBJ_PTR, typename MEM_PTR>
   Callback (OBJ_PTR const &objPtr, MEM_PTR memPtr)
@@ -1013,7 +1193,7 @@
   /**
    * Construct from a CallbackImpl pointer
    *
-   * \param impl the CallbackImpl Ptr
+   * \param [in] impl The CallbackImpl Ptr
    */
   Callback (Ptr<CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> > const &impl)
     : CallbackBase (impl)
@@ -1022,8 +1202,8 @@
   /**
    * Bind the first arguments
    *
-   * \param a argument to bind
-   * \return the bound callback
+   * \param [in] a Argument to bind
+   * \return The bound callback
    */
   template <typename T>
   Callback<R,T2,T3,T4,T5,T6,T7,T8,T9> Bind (T a) {
@@ -1038,9 +1218,9 @@
   /**
    * Bind the first two arguments
    *
-   * \param a1 first argument to bind
-   * \param a2 second argument to bind
-   * \return the bound callback
+   * \param [in] a1 First argument to bind
+   * \param [in] a2 Second argument to bind
+   * \return The bound callback
    */
   template <typename TX1, typename TX2>
   Callback<R,T3,T4,T5,T6,T7,T8,T9> TwoBind (TX1 a1, TX2 a2) {
@@ -1055,10 +1235,10 @@
   /**
    * Bind the first three arguments
    *
-   * \param a1 first argument to bind
-   * \param a2 second argument to bind
-   * \param a3 third argument to bind
-   * \return the bound callback
+   * \param [in] a1 First argument to bind
+   * \param [in] a2 Second argument to bind
+   * \param [in] a3 Third argument to bind
+   * \return The bound callback
    */
   template <typename TX1, typename TX2, typename TX3>
   Callback<R,T4,T5,T6,T7,T8,T9> ThreeBind (TX1 a1, TX2 a2, TX3 a3) {
@@ -1073,7 +1253,7 @@
   /**
    * Check for null implementation
    *
-   * \return true if I don't have an implementation
+   * \return \c true if I don't have an implementation
    */
   bool IsNull (void) const {
     return (DoPeekImpl () == 0) ? true : false;
@@ -1092,99 +1272,99 @@
     return (*(DoPeekImpl ()))();
   }
   /**
-   * \param a1 first argument
+   * \param [in] a1 First argument
    * \return Callback value
    */
   R operator() (T1 a1) const {
     return (*(DoPeekImpl ()))(a1);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
    * \return Callback value
    */
   R operator() (T1 a1, T2 a2) const {
     return (*(DoPeekImpl ()))(a1,a2);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
-   * \param a3 third argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
+   * \param [in] a3 Third argument
    * \return Callback value
    */
   R operator() (T1 a1, T2 a2, T3 a3) const {
     return (*(DoPeekImpl ()))(a1,a2,a3);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
-   * \param a3 third argument
-   * \param a4 fourth argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
+   * \param [in] a3 Third argument
+   * \param [in] a4 Fourth argument
    * \return Callback value
    */
   R operator() (T1 a1, T2 a2, T3 a3, T4 a4) const {
     return (*(DoPeekImpl ()))(a1,a2,a3,a4);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
-   * \param a3 third argument
-   * \param a4 fourth argument
-   * \param a5 fifth argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
+   * \param [in] a3 Third argument
+   * \param [in] a4 Fourth argument
+   * \param [in] a5 Fifth argument
    * \return Callback value
    */
   R operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5) const {
     return (*(DoPeekImpl ()))(a1,a2,a3,a4,a5);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
-   * \param a3 third argument
-   * \param a4 fourth argument
-   * \param a5 fifth argument
-   * \param a6 sixth argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
+   * \param [in] a3 Third argument
+   * \param [in] a4 Fourth argument
+   * \param [in] a5 Fifth argument
+   * \param [in] a6 Sixth argument
    * \return Callback value
    */
   R operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5,T6 a6) const {
     return (*(DoPeekImpl ()))(a1,a2,a3,a4,a5,a6);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
-   * \param a3 third argument
-   * \param a4 fourth argument
-   * \param a5 fifth argument
-   * \param a6 sixth argument
-   * \param a7 seventh argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
+   * \param [in] a3 Third argument
+   * \param [in] a4 Fourth argument
+   * \param [in] a5 Fifth argument
+   * \param [in] a6 Sixth argument
+   * \param [in] a7 Seventh argument
    * \return Callback value
    */
   R operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5,T6 a6,T7 a7) const {
     return (*(DoPeekImpl ()))(a1,a2,a3,a4,a5,a6,a7);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
-   * \param a3 third argument
-   * \param a4 fourth argument
-   * \param a5 fifth argument
-   * \param a6 sixth argument
-   * \param a7 seventh argument
-   * \param a8 seventh argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
+   * \param [in] a3 Third argument
+   * \param [in] a4 Fourth argument
+   * \param [in] a5 Fifth argument
+   * \param [in] a6 Sixth argument
+   * \param [in] a7 Seventh argument
+   * \param [in] a8 Eighth argument
    * \return Callback value
    */
   R operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5,T6 a6,T7 a7,T8 a8) const {
     return (*(DoPeekImpl ()))(a1,a2,a3,a4,a5,a6,a7,a8);
   }
   /**
-   * \param a1 first argument
-   * \param a2 second argument
-   * \param a3 third argument
-   * \param a4 fourth argument
-   * \param a5 fifth argument
-   * \param a6 sixth argument
-   * \param a7 seventh argument
-   * \param a8 eighth argument
-   * \param a9 ninth argument
+   * \param [in] a1 First argument
+   * \param [in] a2 Second argument
+   * \param [in] a3 Third argument
+   * \param [in] a4 Fourth argument
+   * \param [in] a5 Fifth argument
+   * \param [in] a6 Sixth argument
+   * \param [in] a7 Seventh argument
+   * \param [in] a8 Eighth argument
+   * \param [in] a9 Ninth argument
    * \return Callback value
    */
   R operator() (T1 a1, T2 a2, T3 a3, T4 a4,T5 a5,T6 a6,T7 a7,T8 a8, T9 a9) const {
@@ -1195,8 +1375,8 @@
   /**
    * Equality test.
    *
-   * \param other Callback
-   * \return true if we are equal
+   * \param [in] other Callback
+   * \return \c true if we are equal
    */
   bool IsEqual (const CallbackBase &other) const {
     return m_impl->IsEqual (other.GetImpl ());
@@ -1205,8 +1385,8 @@
   /**
    * Check for compatible types
    *
-   * \param other Callback Ptr
-   * \return true if other can be dynamic_cast to my type
+   * \param [in] other Callback Ptr
+   * \return \c true if other can be dynamic_cast to my type
    */
   bool CheckType (const CallbackBase & other) const {
     return DoCheckType (other.GetImpl ());
@@ -1214,24 +1394,25 @@
   /**
    * Adopt the other's implementation, if type compatible
    *
-   * \param other Callback
+   * \param [in] other Callback
    */
-  void Assign (const CallbackBase &other) {
-    DoAssign (other.GetImpl ());
+  bool Assign (const CallbackBase &other) {
+    return DoAssign (other.GetImpl ());
   }
 private:
-  /** \return the pimpl pointer */
+  /** \return The pimpl pointer */
   CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> *DoPeekImpl (void) const {
     return static_cast<CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> *> (PeekPointer (m_impl));
   }
   /**
    * Check for compatible types
    *
-   * \param other Callback Ptr
-   * \return true if other can be dynamic_cast to my type
+   * \param [in] other Callback Ptr
+   * \return \c true if other can be dynamic_cast to my type
    */
   bool DoCheckType (Ptr<const CallbackImplBase> other) const {
-    if (other != 0 && dynamic_cast<const CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> *> (PeekPointer (other)) != 0)
+    if (other != 0 &&
+        dynamic_cast<const CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> *> (PeekPointer (other)) != 0)
       {
         return true;
       }
@@ -1247,17 +1428,20 @@
   /**
    * Adopt the other's implementation, if type compatible
    *
-   * \param other Callback Ptr to adopt from
+   * \param [in] other Callback Ptr to adopt from
    */
-  void DoAssign (Ptr<const CallbackImplBase> other) {
+  bool DoAssign (Ptr<const CallbackImplBase> other) {
     if (!DoCheckType (other))
       {
-        Ptr<CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,T9> > expected;
-        NS_FATAL_ERROR ("Incompatible types. (feed to \"c++filt -t\" if needed)" << std::endl <<
-                        "got=" << Demangle ( typeid (*other).name () ) << std::endl <<
-                        "expected=" << Demangle ( typeid (*expected).name () ));
+        std::string othTid = other->GetTypeid ();
+        std::string myTid = CallbackImpl<R,T1,T2,T3,T4,T5,T6,T7,T8,T9>::DoGetTypeid ();
+        NS_FATAL_ERROR_CONT ("Incompatible types. (feed to \"c++filt -t\" if needed)" << std::endl <<
+                        "got=" << othTid << std::endl <<
+                        "expected=" << myTid);
+        return false;
       }
     m_impl = const_cast<CallbackImplBase *> (PeekPointer (other));
+    return true;
   }
 };
 
@@ -1265,10 +1449,10 @@
 /**
  * Inequality test.
  *
- * \param a Callback
- * \param b Callback
+ * \param [in] a Callback
+ * \param [in] b Callback
  *
- * \return true if the Callbacks are not equal
+ * \return \c true if the Callbacks are not equal
  */
 template <typename R, typename T1, typename T2,
           typename T3, typename T4,
@@ -1285,9 +1469,9 @@
  * @{
  */
 /**
- * \param memPtr class method member pointer
- * \param objPtr class instance
- * \return a wrapper Callback
+ * \param [in] memPtr Class method member pointer
+ * \param [in] objPtr Class instance
+ * \return A wrapper Callback
  * 
  * Build Callbacks for class method members which take varying numbers of arguments
  * and potentially returning a value.
@@ -1379,8 +1563,8 @@
  * @{
  */
 /**
- * \param fnPtr function pointer
- * \return a wrapper Callback
+ * \param [in] fnPtr Function pointer
+ * \return A wrapper Callback
  * 
  * Build Callbacks for functions which take varying numbers of arguments
  * and potentially returning a value.
@@ -1432,7 +1616,7 @@
  * @{
  */
 /**
- * \return a wrapper Callback
+ * \return A wrapper Callback
  *
  * Build null Callbacks which take no arguments,
  * for varying number of template arguments,
@@ -1485,9 +1669,9 @@
  * \ingroup makeboundcallback
  * @{
  * Make Callbacks with one bound argument.
- * \param fnPtr function pointer
- * \param a1 first bound argument
- * \return a bound Callback
+ * \param [in] fnPtr Function pointer
+ * \param [in] a1 First bound argument
+ * \return A bound Callback
  */   
 template <typename R, typename TX, typename ARG>
 Callback<R> MakeBoundCallback (R (*fnPtr)(TX), ARG a1) {
@@ -1557,10 +1741,10 @@
  * \ingroup makeboundcallback
  * @{
  * Make Callbacks with two bound arguments.
- * \param fnPtr function pointer
- * \param a1 first bound argument
- * \param a2 second bound argument 
- * \return a bound Callback
+ * \param [in] fnPtr Function pointer
+ * \param [in] a1 First bound argument
+ * \param [in] a2 Second bound argument 
+ * \return A bound Callback
  */
 template <typename R, typename TX1, typename TX2, typename ARG1, typename ARG2>
 Callback<R> MakeBoundCallback (R (*fnPtr)(TX1,TX2), ARG1 a1, ARG2 a2) {
@@ -1623,11 +1807,11 @@
  * \ingroup makeboundcallback
  * @{
  * Make Callbacks with three bound arguments.
- * \param a1 first bound argument
- * \param a2 second bound argument 
- * \param a3 third bound argument 
- * \param fnPtr function pointer
- * \return a bound Callback
+ * \param [in] a1 First bound argument
+ * \param [in] a2 Second bound argument 
+ * \param [in] a3 Third bound argument 
+ * \param [in] fnPtr Function pointer
+ * \return A bound Callback
  */
 template <typename R, typename TX1, typename TX2, typename TX3, typename ARG1, typename ARG2, typename ARG3>
 Callback<R> MakeBoundCallback (R (*fnPtr)(TX1,TX2,TX3), ARG1 a1, ARG2 a2, ARG3 a3) {
@@ -1691,35 +1875,35 @@
   CallbackValue ();
   /**
    * Copy constructor
-   * \param base Callback to copy
+   * \param [in] base Callback to copy
    */
   CallbackValue (const CallbackBase &base);
   /** Destructor */
   virtual ~CallbackValue ();
-  /** \param base The CallbackBase to use */
+  /** \param [in] base The CallbackBase to use */
   void Set (CallbackBase base);
   /**
    * Give value my callback, if type compatible
    *
-   * \param value destination callback
-   * \returns true if successful
+   * \param [out] value Destination callback
+   * \returns \c true if successful
    */
   template <typename T>
   bool GetAccessor (T &value) const;
-  /** \return a copy of this CallBack */
+  /** \return A copy of this CallBack */
   virtual Ptr<AttributeValue> Copy (void) const;
   /**
    * Serialize to string
-   * \param checker the checker to validate with
-   * \return serialize this pimpl
+   * \param [in] checker The checker to validate with
+   * \return Serialized form of this Callback.
    */
   virtual std::string SerializeToString (Ptr<const AttributeChecker> checker) const;
   /**
    * Deserialize from string (not implemented)
    *
-   * \param value source string
-   * \param checker checker to validate with
-   * \return true if successful
+   * \param [in] value Source string
+   * \param [in] checker Checker to validate with
+   * \return \c true if successful
    */
   virtual bool DeserializeFromString (std::string value, Ptr<const AttributeChecker> checker);
 private:
@@ -1738,7 +1922,8 @@
 {
   if (value.CheckType (m_value))
     {
-      value.Assign (m_value);
+      if (!value.Assign (m_value))
+        NS_FATAL_ERROR_NO_MSG ();
       return true;
     }
   return false;
diff -Naur ns-3.23/src/core/model/command-line.h ns-3.24/src/core/model/command-line.h
--- ns-3.23/src/core/model/command-line.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/command-line.h	2015-09-15 11:18:44.000000000 -0700
@@ -206,14 +206,14 @@
   /**
    * Copy constructor
    *
-   * \param cmd the CommandLine to copy from
+   * \param [in] cmd The CommandLine to copy from
    */
   CommandLine (const CommandLine &cmd);
   /**
    * Assignment
    *
-   * \param cmd the CommandLine to assign from
-   * \return the CommandLine
+   * \param [in] cmd The CommandLine to assign from
+   * \return The CommandLine
    */
   CommandLine &operator = (const CommandLine &cmd);
   /** Destructor */
@@ -222,16 +222,16 @@
   /**
    * Supply the program usage and documentation.
    *
-   * \param usage Program usage message to write with \c --help.
+   * \param [in] usage Program usage message to write with \c --help.
    */
   void Usage (const std::string usage);
   
   /**
    * Add a program argument, assigning to POD
    *
-   * \param name the name of the program-supplied argument
-   * \param help the help text used by \c \-\-PrintHelp
-   * \param value a reference to the variable where the
+   * \param [in] name The name of the program-supplied argument
+   * \param [in] help The help text used by \c \-\-PrintHelp
+   * \param [out] value A reference to the variable where the
    *        value parsed will be stored (if no value
    *        is parsed, this variable is not modified).
    */
@@ -243,9 +243,9 @@
   /**
    * Add a program argument, using a Callback to parse the value
    *
-   * \param name the name of the program-supplied argument
-   * \param help the help text used by \c --help
-   * \param callback a Callback function that will be invoked to parse and
+   * \param [in] name The name of the program-supplied argument
+   * \param [in] help The help text used by \c --help
+   * \param [in] callback A Callback function that will be invoked to parse and
    *   store the value.
    *
    * The callback should have the signature
@@ -258,8 +258,8 @@
   /**
    * Add a program argument as a shorthand for an Attribute.
    *
-   * \param name the name of the program-supplied argument.
-   * \param attributePath the fully-qualified name of the Attribute
+   * \param [in] name The name of the program-supplied argument.
+   * \param [out] attributePath The fully-qualified name of the Attribute
    */
   void AddValue (const std::string &name,
                  const std::string &attributePath);
@@ -267,9 +267,9 @@
   /**
    * Parse the program arguments
    *
-   * \param argc the 'argc' variable: number of arguments (including the
+   * \param [in] argc The 'argc' variable: number of arguments (including the
    *        main program name as first element).
-   * \param argv the 'argv' variable: a null-terminated array of strings,
+   * \param [in] argv The 'argv' variable: a null-terminated array of strings,
    *        each of which identifies a command-line argument.
    * 
    * Obviously, this method will parse the input command-line arguments and
@@ -283,7 +283,7 @@
   /**
    * Get the program name
    *
-   * \return the program name.  Only valid after calling Parse()
+   * \return The program name.  Only valid after calling Parse()
    */
   std::string GetName () const;
 
@@ -293,13 +293,13 @@
    * Handler for \c \-\-PrintHelp and \c \-\-help:  print Usage(), argument names, and help strings
    *
    * Alternatively, an overloaded operator << can be used:
-   * @code
+   * \code
    *       CommandLine cmd;
    *       cmd.Parse (argc, argv);
    *     ...
    *
    *       std::cerr << cmd;
-   * @endcode
+   * \endcode
    *
    * \param [in,out] os The output stream to print on.
    */
@@ -320,16 +320,16 @@
     /**
      * Parse from a string.
      *
-     * \param value the string representation
-     * \return true if parsing the value succeeded
+     * \param [in] value The string representation
+     * \return \c true if parsing the value succeeded
      */
     virtual bool Parse (const std::string value) = 0;
     /**
-     * \return true if this item have a default value?
+     * \return \c true if this item have a default value?
      */
     virtual bool HasDefault () const;
     /**
-     * \return the default value
+     * \return The default value
      */
     virtual std::string GetDefault () const;
   };
@@ -345,8 +345,8 @@
     /**
      * Parse from a string.
      *
-     * \param value the string representation
-     * \return true if parsing the value succeeded
+     * \param [in] value The string representation
+     * \return \c true if parsing the value succeeded
      */
     virtual bool Parse (const std::string value);
 
@@ -367,8 +367,8 @@
     /**
      * Parse from a string.
      *
-     * \param value the string representation
-     * \return true if parsing the value succeeded
+     * \param [in] value The string representation
+     * \return \c true if parsing the value succeeded
      */
     virtual bool Parse (const std::string value);
     Callback<bool, std::string> m_callback;  /**< The Callback */
@@ -378,16 +378,16 @@
    * Match name against the program or general arguments,
    * and dispatch to the appropriate handler.
    *
-   * \param name the argument name
-   * \param value the command line value
+   * \param [in] name The argument name
+   * \param [in] value The command line value
    */
   void HandleArgument (const std::string &name, const std::string &value) const;
   /**
    * Callback function to handle attributes.
    *
-   * \param name The full name of the Attribute.
-   * \param value The value to assign to \p name.
-   * \return true if the value was set successfully, false otherwise.
+   * \param [in] name The full name of the Attribute.
+   * \param [in] value The value to assign to \p name.
+   * \return \c true if the value was set successfully, false otherwise.
    */  
   static bool HandleAttribute (const std::string name, const std::string value);
 
@@ -396,33 +396,33 @@
   /**
    * Handler for \c \-\-PrintAttributes:  print the attributes for a given type.
    *
-   * \param os the output stream.
-   * \param type the TypeId whose Attributes should be displayed
+   * \param [in,out] os the output stream.
+   * \param [in] type The TypeId whose Attributes should be displayed
    */
   void PrintAttributes (std::ostream &os, const std::string &type) const;
   /**
    * Handler for \c \-\-PrintGroup:  print all types belonging to a given group.
    *
-   * \param os the output stream.
-   * \param group the name of the TypeId group to display
+   * \param [in,out] os The output stream.
+   * \param [in] group The name of the TypeId group to display
    */
   void PrintGroup (std::ostream &os, const std::string &group) const;
   /**
    * Handler for \c \-\-PrintTypeIds:  print all TypeId names.
    *
-   * \param os the output stream.
+   * \param [in,out] os The output stream.
    */
   void PrintTypeIds (std::ostream &os) const;
   /**
    * Handler for \c \-\-PrintGroups:  print all TypeId group names
    *
-   * \param os the output stream.
+   * \param [in,out] os The output stream.
    */
   void PrintGroups (std::ostream &os) const;
   /**
    * Copy constructor
    *
-   * \param cmd CommandLine to copy
+   * \param [in] cmd CommandLine to copy
    */
   void Copy (const CommandLine &cmd);
   /** Remove all arguments, Usage(), name */
@@ -448,9 +448,9 @@
    * \ingroup commandlinehelper
    * \brief Helpers to specialize CommandLine::UserItem::Parse() on bool
    *
-   * \param value the argument name
-   * \param val the argument location
-   * \return true if parsing was successful
+   * \param [in] value The argument name
+   * \param [out] val The argument location
+   * \return \c true if parsing was successful
    * @{
    */
   template <typename T>
@@ -463,8 +463,8 @@
    * \ingroup commandlinehelper
    * \brief Helper to specialize CommandLine::UserItem::GetDefault() on bool
    *
-   * \param val the argument value
-   * \return the string representation of value
+   * \param [in] val The argument value
+   * \return The string representation of value
    * @{
    */
   template <typename T>
diff -Naur ns-3.23/src/core/model/config.cc ns-3.24/src/core/model/config.cc
--- ns-3.23/src/core/model/config.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/config.cc	2015-09-15 11:18:44.000000000 -0700
@@ -148,13 +148,34 @@
 
 } // namespace Config
 
+
+/** Helper to test if an array entry matches a config path specification. */
 class ArrayMatcher
 {
 public:
+  /**
+   * Construct from a Config path specification.
+   *
+   * \param [in] element The Config path specification.
+   */
   ArrayMatcher (std::string element);
+  /**
+   * Test if a specific index matches the Config Path.
+   *
+   * \param [in] i The index.
+   * \returns \c true if the index matches the Config Path.
+   */
   bool Matches (uint32_t i) const;
 private:
+  /**
+   * Convert a string to an \c uint32_t.
+   *
+   * \param [in] str The string.
+   * \param [in] value The location to store the \c uint32_t.
+   * \returns \c true if the string could be converted.
+   */
   bool StringToUint32 (std::string str, uint32_t *value) const;
+  /** The Config path element. */
   std::string m_element;
 };
 
@@ -238,22 +259,71 @@
   return !iss.bad () && !iss.fail ();
 }
 
-
+/**
+ * Abstract class to parse Config paths into object references.
+ */
 class Resolver
 {
 public:
+  /**
+   * Construct from a base Config path.
+   *
+   * \param [in] path The Config path.
+   */
   Resolver (std::string path);
+  /** Destructor. */
   virtual ~Resolver ();
 
+  /**
+   * Parse the stored Config path into an object reference,
+   * beginning at the indicated root object.
+   *
+   * \param [in] root The object corresponding to the current position in
+   *                  in the Config path.
+   */
   void Resolve (Ptr<Object> root);
+  
 private:
+  /** Ensure the Config path starts and ends with a '/'. */
   void Canonicalize (void);
+  /**
+   * Parse the next element in the Config path.
+   *
+   * \param [in] path The remaining portion of the Config path.
+   * \param [in] root The object corresponding to the current positon
+   *                  in the Config path.
+   */
   void DoResolve (std::string path, Ptr<Object> root);
+  /**
+   * Parse an index on the Config path.
+   *
+   * \param [in] path The remaining Config path.
+   * \param [in,out] vector The resulting list of matching objects.
+   */
   void DoArrayResolve (std::string path, const ObjectPtrContainerValue &vector);
+  /**
+   * Handle one object found on the path.
+   *
+   * \param [in] object The current object on the Config path.
+   */
   void DoResolveOne (Ptr<Object> object);
+  /**
+   * Get the current Config path.
+   *
+   * \returns The current Config path.
+   */
   std::string GetResolvedPath (void) const;
+  /**
+   * Handle one found object.
+   *
+   * \param [in] object The found object.
+   * \param [in] path The matching Config path context.
+   */
   virtual void DoOne (Ptr<Object> object, std::string path) = 0;
+
+  /** Current list of path tokens. */
   std::vector<std::string> m_workStack;
+  /** The Config path. */
   std::string m_path;
 };
 
@@ -502,26 +572,47 @@
     }
 }
 
-
-class ConfigImpl 
+/** Config system implementation class. */
+class ConfigImpl : public Singleton<ConfigImpl>
 {
 public:
+  /** \copydoc Config::Set() */
   void Set (std::string path, const AttributeValue &value);
+  /** \copydoc Config::ConnectWithoutContext() */
   void ConnectWithoutContext (std::string path, const CallbackBase &cb);
+  /** \copydoc Config::Connect() */
   void Connect (std::string path, const CallbackBase &cb);
+  /** \copydoc Config::DisconnectWithoutContext() */
   void DisconnectWithoutContext (std::string path, const CallbackBase &cb);
+  /** \copydoc Config::Disconnect() */
   void Disconnect (std::string path, const CallbackBase &cb);
+  /** \copydoc Config::LookupMatches() */
   Config::MatchContainer LookupMatches (std::string path);
 
+  /** \copydoc Config::RegisterRootNamespaceObject() */
   void RegisterRootNamespaceObject (Ptr<Object> obj);
+  /** \copydoc Config::UnregisterRootNamespaceObject() */
   void UnregisterRootNamespaceObject (Ptr<Object> obj);
 
+  /** \copydoc Config::GetRootNamespaceObjectN() */
   uint32_t GetRootNamespaceObjectN (void) const;
+  /** \copydoc Config::GetRootNamespaceObject() */
   Ptr<Object> GetRootNamespaceObject (uint32_t i) const;
 
 private:
+  /**
+   * Break a Config path into the leading path and the last leaf token.
+   * \param [in] path The Config path.
+   * \param [in,out] root The leading part of the \p path,
+   *   up to the final slash.
+   * \param [in,out] leaf The trailing part of the \p path.
+   */
   void ParsePath (std::string path, std::string *root, std::string *leaf) const;
+
+  /** Container type to hold the root Config path tokens. */
   typedef std::vector<Ptr<Object> > Roots;
+
+  /** The list of Config path roots. */
   Roots m_roots;
 };
 
@@ -678,7 +769,7 @@
 void Set (std::string path, const AttributeValue &value)
 {
   NS_LOG_FUNCTION (path << &value);
-  Singleton<ConfigImpl>::Get ()->Set (path, value);
+  ConfigImpl::Get ()->Set (path, value);
 }
 void SetDefault (std::string name, const AttributeValue &value)
 {
@@ -733,53 +824,53 @@
 void ConnectWithoutContext (std::string path, const CallbackBase &cb)
 {
   NS_LOG_FUNCTION (path << &cb);
-  Singleton<ConfigImpl>::Get ()->ConnectWithoutContext (path, cb);
+  ConfigImpl::Get ()->ConnectWithoutContext (path, cb);
 }
 void DisconnectWithoutContext (std::string path, const CallbackBase &cb)
 {
   NS_LOG_FUNCTION (path << &cb);
-  Singleton<ConfigImpl>::Get ()->DisconnectWithoutContext (path, cb);
+  ConfigImpl::Get ()->DisconnectWithoutContext (path, cb);
 }
 void 
 Connect (std::string path, const CallbackBase &cb)
 {
   NS_LOG_FUNCTION (path << &cb);
-  Singleton<ConfigImpl>::Get ()->Connect (path, cb);
+  ConfigImpl::Get ()->Connect (path, cb);
 }
 void 
 Disconnect (std::string path, const CallbackBase &cb)
 {
   NS_LOG_FUNCTION (path << &cb);
-  Singleton<ConfigImpl>::Get ()->Disconnect (path, cb);
+  ConfigImpl::Get ()->Disconnect (path, cb);
 }
 Config::MatchContainer LookupMatches (std::string path)
 {
   NS_LOG_FUNCTION (path);
-  return Singleton<ConfigImpl>::Get ()->LookupMatches (path);
+  return ConfigImpl::Get ()->LookupMatches (path);
 }
 
 void RegisterRootNamespaceObject (Ptr<Object> obj)
 {
   NS_LOG_FUNCTION (obj);
-  Singleton<ConfigImpl>::Get ()->RegisterRootNamespaceObject (obj);
+  ConfigImpl::Get ()->RegisterRootNamespaceObject (obj);
 }
 
 void UnregisterRootNamespaceObject (Ptr<Object> obj)
 {
   NS_LOG_FUNCTION (obj);
-  Singleton<ConfigImpl>::Get ()->UnregisterRootNamespaceObject (obj);
+  ConfigImpl::Get ()->UnregisterRootNamespaceObject (obj);
 }
 
 uint32_t GetRootNamespaceObjectN (void)
 {
   NS_LOG_FUNCTION_NOARGS ();
-  return Singleton<ConfigImpl>::Get ()->GetRootNamespaceObjectN ();
+  return ConfigImpl::Get ()->GetRootNamespaceObjectN ();
 }
 
 Ptr<Object> GetRootNamespaceObject (uint32_t i)
 {
   NS_LOG_FUNCTION (i);
-  return Singleton<ConfigImpl>::Get ()->GetRootNamespaceObject (i);
+  return ConfigImpl::Get ()->GetRootNamespaceObject (i);
 }
 
 } // namespace Config
diff -Naur ns-3.23/src/core/model/config.h ns-3.24/src/core/model/config.h
--- ns-3.23/src/core/model/config.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/config.h	2015-09-15 11:18:44.000000000 -0700
@@ -57,8 +57,8 @@
 
 /**
  * \ingroup config
- * \param path a path to match attributes.
- * \param value the value to set in all matching attributes.
+ * \param [in] path A path to match attributes.
+ * \param [in] value The value to set in all matching attributes.
  *
  * This function will attempt to find attributes which
  * match the input path and will then set their value to the input
@@ -67,8 +67,8 @@
 void Set (std::string path, const AttributeValue &value);
 /**
  * \ingroup config
- * \param name the full name of the attribute
- * \param value the value to set.
+ * \param [in] name The full name of the attribute
+ * \param [in] value The value to set.
  *
  * This method overrides the initial value of the 
  * matching attribute. This method cannot fail: it will
@@ -77,9 +77,9 @@
 void SetDefault (std::string name, const AttributeValue &value);
 /**
  * \ingroup config
- * \param name the full name of the attribute
- * \param value the value to set.
- * \returns true if the value was set successfully, false otherwise.
+ * \param [in] name The full name of the attribute
+ * \param [in] value The value to set.
+ * \returns \c true if the value was set successfully, false otherwise.
  *
  * This method overrides the initial value of the 
  * matching attribute. 
@@ -87,24 +87,25 @@
 bool SetDefaultFailSafe (std::string name, const AttributeValue &value);
 /**
  * \ingroup config
- * \param name the name of the requested GlobalValue.
- * \param value the value to set
+ * \param [in] name The name of the requested GlobalValue.
+ * \param [in] value The value to set
  *
  * This method is equivalent to GlobalValue::Bind
  */
 void SetGlobal (std::string name, const AttributeValue &value);
 /**
  * \ingroup config
- * \param name the name of the requested GlobalValue.
- * \param value the value to set
+ * \param [in] name The name of the requested GlobalValue.
+ * \param [in] value The value to set
+ * \return \c true if the GlobalValue could be set.
  *
  * This method is equivalent to GlobalValue::BindFailSafe
  */
 bool SetGlobalFailSafe (std::string name, const AttributeValue &value);
 /**
  * \ingroup config
- * \param path a path to match trace sources.
- * \param cb the callback to connect to the matching trace sources.
+ * \param [in] path A path to match trace sources.
+ * \param [in] cb The callback to connect to the matching trace sources.
  *
  * This function will attempt to find all trace sources which
  * match the input path and will then connect the input callback
@@ -113,16 +114,16 @@
 void ConnectWithoutContext (std::string path, const CallbackBase &cb);
 /**
  * \ingroup config
- * \param path a path to match trace sources.
- * \param cb the callback to disconnect to the matching trace sources.
+ * \param [in] path A path to match trace sources.
+ * \param [in] cb The callback to disconnect to the matching trace sources.
  *
  * This function undoes the work of Config::Connect.
  */
 void DisconnectWithoutContext (std::string path, const CallbackBase &cb);
 /**
  * \ingroup config
- * \param path a path to match trace sources.
- * \param cb the callback to connect to the matching trace sources.
+ * \param [in] path A path to match trace sources.
+ * \param [in] cb The callback to connect to the matching trace sources.
  *
  * This function will attempt to find all trace sources which
  * match the input path and will then connect the input callback
@@ -132,8 +133,8 @@
 void Connect (std::string path, const CallbackBase &cb);
 /**
  * \ingroup config
- * \param path a path to match trace sources.
- * \param cb the callback to connect to the matching trace sources.
+ * \param [in] path A path to match trace sources.
+ * \param [in] cb The callback to connect to the matching trace sources.
  *
  * This function undoes the work of Config::ConnectWithContext.
  */
@@ -150,46 +151,53 @@
 class MatchContainer
 {
 public:
+  /** Const iterator over the objects in this container. */
   typedef std::vector<Ptr<Object> >::const_iterator Iterator;
   MatchContainer ();
-  // constructor used only by implementation.
+  /**
+   * Constructor used only by implementation.
+   *
+   * \param [in] objects The vector of objects to store in this container.
+   * \param [in] contexts The corresponding contexts.
+   * \param [in] path The path used for object matching.
+   */
   MatchContainer (const std::vector<Ptr<Object> > &objects, 
                   const std::vector<std::string> &contexts, 
                   std::string path);
 
   /**
-   * \returns an iterator which points to the first item in the container
+   * \returns An iterator which points to the first item in the container
    */
   MatchContainer::Iterator Begin (void) const;
   /**
-   * \returns an iterator which points to the last item in the container
+   * \returns An iterator which points to the last item in the container
    */
   MatchContainer::Iterator End (void) const;
   /**
-   * \returns the number of items in the container
+   * \returns The number of items in the container
    */
   uint32_t GetN (void) const;
   /**
-   * \param i index of item to lookup ([0,n[)
-   * \returns the item requested.
+   * \param [in] i Index of item to lookup ([0,n[)
+   * \returns The item requested.
    */
   Ptr<Object> Get (uint32_t i) const;
   /**
-   * \param i index of item to lookup ([0,n[)
-   * \returns the fully-qualified matching path associated
+   * \param [in] i Index of item to lookup ([0,n[)
+   * \returns The fully-qualified matching path associated
    *          to the requested item.
    *
    * The matching patch uniquely identifies the requested object.
    */
   std::string GetMatchedPath (uint32_t i) const;
   /**
-   * \returns the path used to perform the object matching.
+   * \returns The path used to perform the object matching.
    */
   std::string GetPath (void) const;
 
   /**
-   * \param name name of attribute to set
-   * \param value value to set to the attribute
+   * \param [in] name Name of attribute to set
+   * \param [in] value Value to set to the attribute
    *
    * Set the specified attribute value to all the objects stored in this
    * container.
@@ -197,8 +205,8 @@
    */
   void Set (std::string name, const AttributeValue &value);
   /**
-   * \param name the name of the trace source to connect to
-   * \param cb the sink to connect to the trace source
+   * \param [in] name The name of the trace source to connect to
+   * \param [in] cb The sink to connect to the trace source
    *
    * Connect the specified sink to all the objects stored in this
    * container.
@@ -206,8 +214,8 @@
    */
   void Connect (std::string name, const CallbackBase &cb);
   /**
-   * \param name the name of the trace source to connect to
-   * \param cb the sink to connect to the trace source
+   * \param [in] name The name of the trace source to connect to
+   * \param [in] cb The sink to connect to the trace source
    *
    * Connect the specified sink to all the objects stored in this
    * container.
@@ -215,8 +223,8 @@
    */
   void ConnectWithoutContext (std::string name, const CallbackBase &cb);
   /**
-   * \param name the name of the trace source to disconnect from
-   * \param cb the sink to disconnect from the trace source
+   * \param [in] name The name of the trace source to disconnect from
+   * \param [in] cb The sink to disconnect from the trace source
    *
    * Disconnect the specified sink from all the objects stored in this
    * container.
@@ -224,31 +232,35 @@
    */
   void Disconnect (std::string name, const CallbackBase &cb);
   /**
-   * \param name the name of the trace source to disconnect from
-   * \param cb the sink to disconnect from the trace source
+   * \param [in] name The name of the trace source to disconnect from
+   * \param [in] cb The sink to disconnect from the trace source
    *
    * Disconnect the specified sink from all the objects stored in this
    * container.
    * \sa ns3::Config::DisconnectWithoutContext
    */
   void DisconnectWithoutContext (std::string name, const CallbackBase &cb);
+  
 private:
+  /** The list of objects in this container. */
   std::vector<Ptr<Object> > m_objects;
+  /** The context for each object. */
   std::vector<std::string> m_contexts;
+  /** The path used to perform the object matching. */
   std::string m_path;
 };
 
 /**
  * \ingroup config
- * \param path the path to perform a match against
- * \returns a container which contains all the objects which match the input
+ * \param [in] path The path to perform a match against
+ * \returns A container which contains all the objects which match the input
  *          path.
  */
 MatchContainer LookupMatches (std::string path);
 
 /**
  * \ingroup config
- * \param obj a new root object
+ * \param [in] obj A new root object
  *
  * Each root object is used during path matching as
  * the root of the path by Config::Connect, and Config::Set.
@@ -256,7 +268,7 @@
 void RegisterRootNamespaceObject (Ptr<Object> obj);
 /**
  * \ingroup config
- * \param obj a new root object
+ * \param [in] obj A new root object
  *
  * This function undoes the work of Config::RegisterRootNamespaceObject.
  */
@@ -264,14 +276,14 @@
 
 /**
  * \ingroup config
- * \returns the number of registered root namespace objects.
+ * \returns The number of registered root namespace objects.
  */
 uint32_t GetRootNamespaceObjectN (void);
 
 /**
  * \ingroup config
- * \param i the index of the requested object.
- * \returns the requested root namespace object
+ * \param [in] i The index of the requested object.
+ * \returns The requested root namespace object
  */
 Ptr<Object> GetRootNamespaceObject (uint32_t i);
 
diff -Naur ns-3.23/src/core/model/default-deleter.h ns-3.24/src/core/model/default-deleter.h
--- ns-3.23/src/core/model/default-deleter.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/default-deleter.h	2015-09-15 11:18:44.000000000 -0700
@@ -35,7 +35,7 @@
  *        last reference to an object they manage
  *        disappears.
  *
- * \tparam T The object type being deleted.
+ * \tparam T \deduced The object type being deleted.
  * \sa ns3::SimpleRefCount
  */
 template <typename T>
@@ -46,7 +46,7 @@
    * \code
    *   delete object;
    * \endcode
-   * \tparam T The object type being deleted.
+   * \tparam T \deduced The object type being deleted.
    * \param [in] object The object to delete.
    */
   inline static void Delete (T *object) {
diff -Naur ns-3.23/src/core/model/default-simulator-impl.cc ns-3.24/src/core/model/default-simulator-impl.cc
--- ns-3.23/src/core/model/default-simulator-impl.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/default-simulator-impl.cc	2015-09-15 11:18:44.000000000 -0700
@@ -84,6 +84,8 @@
 DefaultSimulatorImpl::DoDispose (void)
 {
   NS_LOG_FUNCTION (this);
+  ProcessEventsWithContext ();
+
   while (!m_events->IsEmpty ())
     {
       Scheduler::Event next = m_events->RemoveNext ();
@@ -213,22 +215,22 @@
 }
 
 void 
-DefaultSimulatorImpl::Stop (Time const &time)
+DefaultSimulatorImpl::Stop (Time const &delay)
 {
-  NS_LOG_FUNCTION (this << time.GetTimeStep ());
-  Simulator::Schedule (time, &Simulator::Stop);
+  NS_LOG_FUNCTION (this << delay.GetTimeStep ());
+  Simulator::Schedule (delay, &Simulator::Stop);
 }
 
 //
 // Schedule an event for a _relative_ time in the future.
 //
 EventId
-DefaultSimulatorImpl::Schedule (Time const &time, EventImpl *event)
+DefaultSimulatorImpl::Schedule (Time const &delay, EventImpl *event)
 {
-  NS_LOG_FUNCTION (this << time.GetTimeStep () << event);
+  NS_LOG_FUNCTION (this << delay.GetTimeStep () << event);
   NS_ASSERT_MSG (SystemThread::Equals (m_main), "Simulator::Schedule Thread-unsafe invocation!");
 
-  Time tAbsolute = time + TimeStep (m_currentTs);
+  Time tAbsolute = delay + TimeStep (m_currentTs);
 
   NS_ASSERT (tAbsolute.IsPositive ());
   NS_ASSERT (tAbsolute >= TimeStep (m_currentTs));
@@ -244,13 +246,13 @@
 }
 
 void
-DefaultSimulatorImpl::ScheduleWithContext (uint32_t context, Time const &time, EventImpl *event)
+DefaultSimulatorImpl::ScheduleWithContext (uint32_t context, Time const &delay, EventImpl *event)
 {
-  NS_LOG_FUNCTION (this << context << time.GetTimeStep () << event);
+  NS_LOG_FUNCTION (this << context << delay.GetTimeStep () << event);
 
   if (SystemThread::Equals (m_main))
     {
-      Time tAbsolute = time + TimeStep (m_currentTs);
+      Time tAbsolute = delay + TimeStep (m_currentTs);
       Scheduler::Event ev;
       ev.impl = event;
       ev.key.m_ts = (uint64_t) tAbsolute.GetTimeStep ();
@@ -264,7 +266,8 @@
     {
       EventWithContext ev;
       ev.context = context;
-      ev.timestamp = time.GetTimeStep ();
+      // Current time added in ProcessEventsWithContext()
+      ev.timestamp = delay.GetTimeStep ();
       ev.event = event;
       {
         CriticalSection cs (m_eventsWithContextMutex);
diff -Naur ns-3.23/src/core/model/default-simulator-impl.h ns-3.24/src/core/model/default-simulator-impl.h
--- ns-3.23/src/core/model/default-simulator-impl.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/default-simulator-impl.h	2015-09-15 11:18:44.000000000 -0700
@@ -47,17 +47,24 @@
 class DefaultSimulatorImpl : public SimulatorImpl
 {
 public:
+  /**
+   *  Register this type.
+   *  \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
 
+  /** Constructor. */
   DefaultSimulatorImpl ();
+  /** Destructor. */
   ~DefaultSimulatorImpl ();
 
+  // Inherited
   virtual void Destroy ();
   virtual bool IsFinished (void) const;
   virtual void Stop (void);
-  virtual void Stop (Time const &time);
-  virtual EventId Schedule (Time const &time, EventImpl *event);
-  virtual void ScheduleWithContext (uint32_t context, Time const &time, EventImpl *event);
+  virtual void Stop (Time const &delay);
+  virtual EventId Schedule (Time const &delay, EventImpl *event);
+  virtual void ScheduleWithContext (uint32_t context, Time const &delay, EventImpl *event);
   virtual EventId ScheduleNow (EventImpl *event);
   virtual EventId ScheduleDestroy (EventImpl *event);
   virtual void Remove (const EventId &id);
@@ -73,32 +80,57 @@
 
 private:
   virtual void DoDispose (void);
+
+  /** Process the next event. */
   void ProcessOneEvent (void);
+  /** Move events from a different context into the main event queue. */
   void ProcessEventsWithContext (void);
  
+  /** Wrap an event with its execution context. */
   struct EventWithContext {
+    /** The event context. */
     uint32_t context;
+    /** Event timestamp. */
     uint64_t timestamp;
+    /** The event implementation. */
     EventImpl *event;
   };
+  /** Container type for the events from a different context. */
   typedef std::list<struct EventWithContext> EventsWithContext;
+  /** The container of events from a different context. */
   EventsWithContext m_eventsWithContext;
+  /**
+   * Flag \c true if all events with context have been moved to the
+   * primary event queue.
+   */
   bool m_eventsWithContextEmpty;
+  /** Mutex to control access to the list of events with context. */
   SystemMutex m_eventsWithContextMutex;
 
+  /** Container type for the events to run at Simulator::Destroy() */
   typedef std::list<EventId> DestroyEvents;
+  /** The container of events to run at Destroy. */
   DestroyEvents m_destroyEvents;
+  /** Flag calling for the end of the simulation. */
   bool m_stop;
+  /** The event priority queue. */
   Ptr<Scheduler> m_events;
 
+  /** Next event unique id. */
   uint32_t m_uid;
+  /** Unique id of the current event. */
   uint32_t m_currentUid;
+  /** Timestamp of the current event. */
   uint64_t m_currentTs;
+  /** Execution context of the current event. */
   uint32_t m_currentContext;
-  // number of events that have been inserted but not yet scheduled,
-  // not counting the "destroy" events; this is used for validation
+  /**
+   * Number of events that have been inserted but not yet scheduled,
+   *  not counting the Destroy events; this is used for validation
+   */
   int m_unscheduledEvents;
 
+  /** Main execution thread. */
   SystemThread::ThreadId m_main;
 };
 
diff -Naur ns-3.23/src/core/model/deprecated.h ns-3.24/src/core/model/deprecated.h
--- ns-3.23/src/core/model/deprecated.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/deprecated.h	2015-09-15 11:18:44.000000000 -0700
@@ -1,3 +1,23 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2008 INRIA
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
+ */
+
 #ifndef NS3_DEPRECATED_H
 #define NS3_DEPRECATED_H
 
@@ -16,7 +36,11 @@
  *
  * When deprecating a feature, please update the documentation
  * with information for users on how to update their code.
+ *
+ * For example,
+ * \snippet src/core/doc/deprecated-example.h doxygen snippet
  */
+
 #if defined(__GNUC__) && (__GNUC__ == 4) && (__GNUC_MINOR__ > 1)
 #define NS_DEPRECATED __attribute__ ((deprecated))
 #else
diff -Naur ns-3.23/src/core/model/double.cc ns-3.24/src/core/model/double.cc
--- ns-3.23/src/core/model/double.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/double.cc	2015-09-15 11:18:44.000000000 -0700
@@ -41,9 +41,9 @@
  * \ingroup attribute_Double
  * Make a Double attribute checker with embedded numeric type name.
  *
- * \param min The minimum allowed value.
- * \param max The maximum allowed value.
- * \param name The original type name ("float", "double").
+ * \param [in] min The minimum allowed value.
+ * \param [in] max The maximum allowed value.
+ * \param [in] name The original type name ("float", "double").
  * \returns The AttributeChecker.
  */
 Ptr<const AttributeChecker> MakeDoubleChecker (double min, double max, std::string name)
diff -Naur ns-3.23/src/core/model/event-id.h ns-3.24/src/core/model/event-id.h
--- ns-3.23/src/core/model/event-id.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/event-id.h	2015-09-15 11:18:44.000000000 -0700
@@ -100,15 +100,15 @@
 private:
   /**
    * Test if two EventId's are equal.
-   * \param a The first EventId.
-   * \param b The second EventId.
+   * \param [in] a The first EventId.
+   * \param [in] b The second EventId.
    * \return \c true if the \p a and \p b represent the same event.
    */
   friend bool operator == (const EventId &a, const EventId &b);
   /**
    * Test if two EventId's are not equal.
-   * \param a The first EventId.
-   * \param b The second EventId.
+   * \param [in] a The first EventId.
+   * \param [in] b The second EventId.
    * \return \c true if the \p a and \p b are not the same event.
    */
   friend bool operator != (const EventId &a, const EventId &b);
diff -Naur ns-3.23/src/core/model/fatal-error.h ns-3.24/src/core/model/fatal-error.h
--- ns-3.23/src/core/model/fatal-error.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/fatal-error.h	2015-09-15 11:18:44.000000000 -0700
@@ -52,57 +52,113 @@
  * on the attempt to execute the flush() function.
  */
 
-
 /**
  * \ingroup fatal
  *
- * \brief Fatal error handling
+ * \brief Fatal error reporting implementation.
  *
- * When this macro is hit at runtime, details of filename
- * and line number is printed to stderr, and the program
- * is halted by calling std::terminate(). This will
- * trigger any clean up code registered by
- * std::set_terminate (NS3 default is a stream-flushing
- * code), but may be overridden.
+ * When this macro is hit at runtime the error details will
+ * printed to \c stderr, including the supplied \c msg,
+ * and the file name and line number.  Optionally, if \c fatal is true,
+ * the macro will invoke \c std::terminate().  If \c fatal is false,
+ * the invoking function should return an error code to its caller,
+ * which is expected to call NS_FATAL_ERROR to cause termination.
+ *
+ * \param [in] msg The error message to print, if not empty.
+ * \param [in] fatal Call \c std::terminate() if true.
  *
  * This macro is enabled unconditionally in all builds,
  * including debug and optimized builds.
  */
-#define NS_FATAL_ERROR_NO_MSG()                           \
+#define NS_FATAL_ERROR_IMPL_NO_MSG(fatal) \
   do                                                      \
     {                                                     \
       std::cerr << "file=" << __FILE__ << ", line=" <<    \
-      __LINE__ << std::endl;                            \
+        __LINE__ << std::endl;                            \
       ::ns3::FatalImpl::FlushStreams ();                  \
-      std::terminate ();                                  \
+      if (fatal) std::terminate ();                       \
     }                                                     \
   while (false)
 
+
+#define NS_FATAL_ERROR_IMPL(msg,fatal) \
+  do                                                    \
+    {                                                   \
+      std::cerr << "msg=\"" << msg << "\", ";           \
+      NS_FATAL_ERROR_IMPL_NO_MSG (fatal);               \
+    }                                                   \
+  while (false)
+
+
 /**
  * \ingroup fatal
  *
- * \brief Fatal error handling
+ * \brief Report a fatal error and terminate.
  *
- * \param msg message to output when this macro is hit.
+ * When this macro is hit at runtime, details of filename
+ * and line number are printed to \c stderr, and the program
+ * is halted by calling \c std::terminate(). This will
+ * trigger any clean up code registered by
+ * \c std::set_terminate (NS3 default is a stream-flushing
+ * code), but may be overridden.
+ *
+ * This macro is enabled unconditionally in all builds,
+ * including debug and optimized builds.
+ */
+#define NS_FATAL_ERROR_NO_MSG()       NS_FATAL_ERROR_IMPL_NO_MSG (true)
+
+/**
+ * \ingroup fatal
+ *
+ * \brief Report a fatal error, deferring termination.
+ *
+ * When this macro is hit at runtime, details of filename
+ * and line number are printed to \c stderr, however the program
+ * is _not_ halted.  It is expected that the function using this
+ * macro will return an error code, and its caller will
+ * invoke NS_FATAL_ERROR(msg) triggering std::terminate().
+ *
+ * This macro is enabled unconditionally in all builds,
+ * including debug and optimized builds.
+ */
+#define NS_FATAL_ERROR_NO_MSG_CONT()  NS_FATAL_ERROR_IMPL_NO_MSG (false)
+
+/**
+ * \ingroup fatal
+ *
+ * \brief Report a fatal error with a message and terminate.
+ *
+ * \param [in] msg message to output when this macro is hit.
  *
  * When this macro is hit at runtime, the user-specified
- * error message is printed to stderr, followed by a call
+ * error message are printed to \c stderr, followed by a call
  * to the NS_FATAL_ERROR_NO_MSG() macro which prints the
- * details of filename and line number to stderr. The
- * program will be halted by calling std::terminate(),
+ * details of filename and line number to \c stderr. The
+ * program will be halted by calling \c std::terminate(),
  * triggering any clean up code registered by
- * std::set_terminate (NS3 default is a stream-flushing
+ * \c std::set_terminate (NS3 default is a stream-flushing
  * code, but may be overridden).
  *
  * This macro is enabled unconditionally in all builds,
  * including debug and optimized builds.
  */
-#define NS_FATAL_ERROR(msg)                             \
-  do                                                    \
-    {                                                   \
-      std::cerr << "msg=\"" << msg << "\", ";           \
-      NS_FATAL_ERROR_NO_MSG ();                          \
-    }                                                   \
-  while (false)
+#define NS_FATAL_ERROR(msg)           NS_FATAL_ERROR_IMPL (msg, true)
+
+/**
+ * \ingroup fatal
+ *
+ * \brief Report a fatal error with a message, deferring termination.
+ *
+ * When this macro is hit at runtime, details of filename
+ * and line number are printed to \c stderr, however the program
+ * is _not_ halted.  It is expected that the function using this
+ * macro will return an error code, and its caller will
+ * invoke NS_FATAL_ERROR(msg) triggering \c std::terminate().
+ *
+ * This macro is enabled unconditionally in all builds,
+ * including debug and optimized builds.
+ */
+#define NS_FATAL_ERROR_CONT(msg)      NS_FATAL_ERROR_IMPL (msg, false)
+
 
 #endif /* FATAL_ERROR_H */
diff -Naur ns-3.23/src/core/model/fatal-impl.cc ns-3.24/src/core/model/fatal-impl.cc
--- ns-3.23/src/core/model/fatal-impl.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/fatal-impl.cc	2015-09-15 11:18:44.000000000 -0700
@@ -92,31 +92,6 @@
   return *pstreams;
 }
 
-/**
- * \ingroup fatalimpl
- * \brief Destructor for the list of fatal streams.
- *
- * \todo Is this ever called?
- * Not obvious that it is.  Test with something like
- * \code
- *   main (int argc, char ** argv)
- *   {
- *     NS_FATAL_MSG ("Aborting.")
- *   }
- * \endcode
- * Then run under valgrind or the debugger.  If this isn't called,
- * try adding the call to \c sigHandler.
- */
-struct destructor
-{
-  ~destructor ()
-  {
-    NS_LOG_FUNCTION (this);
-    std::list<std::ostream*> **pstreams = PeekStreamList ();
-    delete *pstreams;
-    *pstreams = 0;
-  }
-};
 }  // anonymous namespace
 
 void
@@ -158,7 +133,7 @@
  *
  * This is private to the fatal implementation.
  *
- * \param sig The signal condition.
+ * \param [in] sig The signal condition.
  */
 void sigHandler (int sig)
 {
diff -Naur ns-3.23/src/core/model/fatal-impl.h ns-3.24/src/core/model/fatal-impl.h
--- ns-3.23/src/core/model/fatal-impl.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/fatal-impl.h	2015-09-15 11:18:44.000000000 -0700
@@ -53,7 +53,7 @@
  * this function should ensure the stream remains valid until
  * it had been unregistered.
  *
- * \param stream The stream to be flushed on abnormal exit.
+ * \param [in] stream The stream to be flushed on abnormal exit.
  */
 void RegisterStream (std::ostream* stream);
 
@@ -68,7 +68,7 @@
  *
  * If the stream is not registered, nothing will happen.
  *
- * \param stream The stream to be unregistered.
+ * \param [in] stream The stream to be unregistered.
  */
 void UnregisterStream (std::ostream* stream);
 
diff -Naur ns-3.23/src/core/model/global-value.h ns-3.24/src/core/model/global-value.h
--- ns-3.23/src/core/model/global-value.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/global-value.h	2015-09-15 11:18:44.000000000 -0700
@@ -53,17 +53,21 @@
  */
 class GlobalValue
 {
+  /** Container type for holding all the GlobalValues. */
   typedef std::vector<GlobalValue *> Vector;
+  
 public:
+  /** Iterator type for the list of all global values. */
   typedef Vector::const_iterator Iterator;
 
   /**
-   * \param name the name of this global value.
-   * \param help some help text which describes the purpose of this
+   * Constructor.
+   * \param [in] name the name of this global value.
+   * \param [in] help some help text which describes the purpose of this
    *        global value.
-   * \param initialValue the value to assign to this global value
+   * \param [in] initialValue the value to assign to this global value
    *        during construction.
-   * \param checker a pointer to an AttributeChecker which can verify
+   * \param [in] checker a pointer to an AttributeChecker which can verify
    *        that any user-supplied value to override the initial
    *        value matches the requested type constraints.
    */
@@ -72,77 +76,90 @@
                Ptr<const AttributeChecker> checker);
 
   /**
-   * \returns the name of this GlobalValue.
+   * Get the name.
+   * \returns The name of this GlobalValue.
    */
   std::string GetName (void) const;
   /**
-   * \returns the help text of this GlobalValue.
+   * Get the help string.
+   * \returns The help text of this GlobalValue.
    */
   std::string GetHelp (void) const;
   /**
-   * \returns the current value of this GlobalValue.
+   * Get the value.
+   * \param [out] value The AttributeValue to set to the value
+   *                    of this GlobalValue
+   * \returns The current value of this GlobalValue.
    */
   void GetValue (AttributeValue &value) const;
   /**
-   * \returns the checker associated to this GlobalValue.
+   * Get the AttributeChecker.
+   * \returns The checker associated to this GlobalValue.
    */
   Ptr<const AttributeChecker> GetChecker (void) const;
   /**
-   * \param value the new value to set in this GlobalValue.
+   * Set the value of this GlobalValue.
+   * \param [in] value the new value to set in this GlobalValue.
+   * \returns \c true if the Global Value was set successfully.
    */
   bool SetValue (const AttributeValue &value);
 
+  /** Reset to the initial value. */
   void ResetInitialValue (void);
 
   /**
-   * \param name the name of the global value
-   * \param value the value to set in the requested global value.
-   *
    * Iterate over the set of GlobalValues until a matching name is found
    * and then set its value with GlobalValue::SetValue.
    *
+   * \param [in] name the name of the global value
+   * \param [in] value the value to set in the requested global value.
+   *
    * This method cannot fail. It will crash if the input is not valid.
    */
   static void Bind (std::string name, const AttributeValue &value);
 
   /**
-   * \param name the name of the global value
-   * \param value the value to set in the requested global value.
-   * \returns true if the value could be set successfully, false otherwise.
-   *
    * Iterate over the set of GlobalValues until a matching name is found
    * and then set its value with GlobalValue::SetValue.
+   *
+   * \param [in] name the name of the global value
+   * \param [in] value the value to set in the requested global value.
+   * \returns \c true if the value could be set successfully,
+   *          \c false otherwise.
    */
   static bool BindFailSafe (std::string name, const AttributeValue &value);
 
   /**
-   * \returns an iterator which represents a pointer to the first GlobalValue registered.
+   * The Begin iterator.
+   * \returns An iterator which represents a pointer to the first GlobalValue registered.
    */
   static Iterator Begin (void);
   /**
-   * \returns an iterator which represents a pointer to the last GlobalValue registered.
+   * The End iterator.
+   * \returns An iterator which represents a pointer to the last GlobalValue registered.
    */
   static Iterator End (void);
 
 
   /** 
-   * finds the GlobalValue with the given name and returns its value
+   * Finds the GlobalValue with the given name and returns its value
    * 
-   * @param name the name of the GlobalValue to be found
-   * @param value where to store the value of the found GlobalValue
+   * \param [in] name the name of the GlobalValue to be found
+   * \param [out] value where to store the value of the found GlobalValue
    * 
-   * @return true if the GlobalValue was found, false otherwise
+   * \return \c true if the GlobalValue was found, \c false otherwise
    */
   static bool GetValueByNameFailSafe (std::string name, AttributeValue &value);
 
   /** 
-   * finds the GlobalValue with the given name and returns its
-   * value. This method cannot fail, i.e., it will trigger a
+   * Finds the GlobalValue with the given name and returns its
+   * value.
+   *
+   * This method cannot fail, i.e., it will trigger a
    * NS_FATAL_ERROR if the requested GlobalValue is not found.
    * 
-   * @param name the name of the GlobalValue to be found
-   * @param value where to store the value of the found GlobalValue
-   * 
+   * \param [in] name the name of the GlobalValue to be found
+   * \param [out] value where to store the value of the found GlobalValue
    */
   static void GetValueByName (std::string name, AttributeValue &value);
 
@@ -150,12 +167,24 @@
 private:
   friend class ::GlobalValueTestCase;
 
+  /**
+   * Get the static vector of all GlobalValues.
+   *
+   * \returns The vector.
+   */
   static Vector *GetVector (void);
+  /** Initialize from the \c NS_GLOBAL_VALUE environment variable. */
   void InitializeFromEnv (void);
+
+  /** The name of this GlobalValue. */
   std::string m_name;
+  /** The help string. */
   std::string m_help;
+  /** The initial value. */
   Ptr<AttributeValue> m_initialValue;
+  /** The current value. */
   Ptr<AttributeValue> m_currentValue;
+  /** The AttributeChecker for this GlobalValue. */
   Ptr<const AttributeChecker> m_checker;
 };
 
diff -Naur ns-3.23/src/core/model/hash-fnv.cc ns-3.24/src/core/model/hash-fnv.cc
--- ns-3.23/src/core/model/hash-fnv.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/hash-fnv.cc	2015-09-15 11:18:44.000000000 -0700
@@ -368,9 +368,9 @@
  * fnv_32a_buf - perform a 32 bit Fowler/Noll/Vo FNV-1a hash on a buffer
  *
  * input:
- * \param	buf	start of buffer to hash
- * \param	len	length of buffer in octets
- * \param	hval	previous hash value or 0 if first call
+ * \param  [in] buf	start of buffer to hash
+ * \param  [in] len	length of buffer in octets
+ * \param  [in] hval	previous hash value or 0 if first call
  *
  * \returns		32 bit hash as a static hash type.
  *
@@ -408,8 +408,8 @@
  * fnv_32a_str - perform a 32 bit Fowler/Noll/Vo FNV-1a hash on a string
  *
  * input:
- * \param	str	string to hash
- * \param	hval	previous hash value or 0 if first call
+ * \param  [in] str	string to hash
+ * \param  [in] hval	previous hash value or 0 if first call
  *
  * \returns		32 bit hash as a static hash type
  *
@@ -531,9 +531,9 @@
  * fnv_64a_buf - perform a 64 bit Fowler/Noll/Vo FNV-1a hash on a buffer
  *
  * input:
- * \param	buf	start of buffer to hash
- * \param	len	length of buffer in octets
- * \param	hval	previous hash value or 0 if first call
+ * \param  [in] buf	start of buffer to hash
+ * \param  [in] len	length of buffer in octets
+ * \param  [in] hval	previous hash value or 0 if first call
  *
  * \returns		64 bit hash as a static hash type
  *
@@ -637,8 +637,8 @@
  * fnv_64a_str - perform a 64 bit Fowler/Noll/Vo FNV-1a hash on a buffer
  *
  * input:
- * \param	str	string to hash
- * \param	hval	previous hash value or 0 if first call
+ * \param  [in] str	string to hash
+ * \param  [in] hval	previous hash value or 0 if first call
  *
  * \returns		64 bit hash as a static hash type
  *
diff -Naur ns-3.23/src/core/model/hash.h ns-3.24/src/core/model/hash.h
--- ns-3.23/src/core/model/hash.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/hash.h	2015-09-15 11:18:44.000000000 -0700
@@ -168,7 +168,7 @@
    *   h.clear ().GetHash64 (...);
    * \endcode
    *
-   * \return this
+   * \return This hasher.
    */
   Hasher & clear (void);
 
diff -Naur ns-3.23/src/core/model/hash-murmur3.cc ns-3.24/src/core/model/hash-murmur3.cc
--- ns-3.23/src/core/model/hash-murmur3.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/hash-murmur3.cc	2015-09-15 11:18:44.000000000 -0700
@@ -84,8 +84,8 @@
 /**
  * Barrel shift (rotate) left on 32 bits.
  *
- * \param x The initial value.
- * \param r The number of bit positions to rotate.
+ * \param [in] x The initial value.
+ * \param [in] r The number of bit positions to rotate.
  * \return The rotated value.
  */
 inline uint32_t rotl32 ( uint32_t x, int8_t r )
@@ -96,8 +96,8 @@
 /**
  * Barrel shift (rotate) left on 64 bits.
  *
- * \param x The initial value.
- * \param r The number of bit positions to rotate.
+ * \param [in] x The initial value.
+ * \param [in] r The number of bit positions to rotate.
  * \return The rotated value.
  */
 inline uint64_t rotl64 ( uint64_t x, int8_t r )
@@ -115,8 +115,8 @@
  * If your platform needs to do endian-swapping or can only
  * handle aligned reads, do the conversion here.
  *
- * \param p Block base address.
- * \param i Index into the block.
+ * \param [in] p Block base address.
+ * \param [in] i Index into the block.
  * \returns The \c i'th word from the block.
  */
 inline uint32_t getblock ( const uint32_t * p, int i )
@@ -133,7 +133,7 @@
 /**
  * Finalization mix - force all bits of a hash block to avalanche.
  *
- * \param h Final word of the hash block.
+ * \param [in] h Final word of the hash block.
  * \returns Fully mixed final word.
  */
 inline uint32_t fmix ( uint32_t h )
@@ -166,19 +166,19 @@
 /**
  * Initial and incremental hash.
  *
- * \param key Data to be hashed.
- * \param len Number of words in the \c key.
- * \param seed Initial or current hash state.
- * \param out Output hash value.
+ * \param [in] key Data to be hashed.
+ * \param [in] len Number of words in the \c key.
+ * \param [in] seed Initial or current hash state.
+ * \param [out] out Output hash value.
  */
 void MurmurHash3_x86_32_incr ( const void * key, int len,
                                uint32_t seed, void * out );
 /**
  * Finalize a hash.
  *
- * \param len Total number of words that have gone in to the hash.
- * \param seed Initial or current hash state.
- * \param out Output hash value.
+ * \param [in] len Total number of words that have gone in to the hash.
+ * \param [in] seed Initial or current hash state.
+ * \param [out] out Output hash value.
  */
 void MurmurHash3_x86_32_fin ( int len,
                               uint32_t seed, void * out );
@@ -262,19 +262,19 @@
 /**
  * Initial and incremental hash.
  *
- * \param key Data to be hashed.
- * \param len Number of words in the \c key.
- * \param seeds Initial or current hash state.
- * \param out Output hash value.
+ * \param [in] key Data to be hashed.
+ * \param [in] len Number of words in the \c key.
+ * \param [in] seeds Initial or current hash state.
+ * \param [out] out Output hash value.
  */
 void MurmurHash3_x86_128_incr ( const void * key, const int len,
                                 uint32_t * seeds, void * out );
 /**
  * Finalize a hash.
  *
- * \param len Total number of words that have gone in to the hash.
- * \param seeds Initial or current hash state.
- * \param out Output hash value.
+ * \param [in] len Total number of words that have gone in to the hash.
+ * \param [in] seeds Initial or current hash state.
+ * \param [out] out Output hash value.
  */
 void MurmurHash3_x86_128_fin ( const int len,
                                uint32_t * seeds, void * out );
@@ -283,10 +283,10 @@
 /**
  * Initial and incremental hash.
  *
- * \param key Data to be hashed.
- * \param len Number of words in the \c key.
- * \param seed Initial or current hash state.
- * \param out Output hash value.
+ * \param [in] key Data to be hashed.
+ * \param [in] len Number of words in the \c key.
+ * \param [in] seed Initial or current hash state.
+ * \param [out] out Output hash value.
  */
 void MurmurHash3_x86_128 ( const void * key, const int len,
                            uint32_t seed, void * out )
diff -Naur ns-3.23/src/core/model/heap-scheduler.h ns-3.24/src/core/model/heap-scheduler.h
--- ns-3.23/src/core/model/heap-scheduler.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/heap-scheduler.h	2015-09-15 11:18:44.000000000 -0700
@@ -53,36 +53,114 @@
 class HeapScheduler : public Scheduler
 {
 public:
+  /**
+   *  Register this type.
+   *  \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
 
+  /** Constructor. */
   HeapScheduler ();
+  /** Destructor. */
   virtual ~HeapScheduler ();
 
-  virtual void Insert (const Event &ev);
+  // Inherited
+  virtual void Insert (const Scheduler::Event &ev);
   virtual bool IsEmpty (void) const;
-  virtual Event PeekNext (void) const;
-  virtual Event RemoveNext (void);
-  virtual void Remove (const Event &ev);
+  virtual Scheduler::Event PeekNext (void) const;
+  virtual Scheduler::Event RemoveNext (void);
+  virtual void Remove (const Scheduler::Event &ev);
 
 private:
-  typedef std::vector<Event> BinaryHeap;
+  /** Event list type:  vector of Events, managed as a heap. */
+  typedef std::vector<Scheduler::Event> BinaryHeap;
 
+  /**
+   * Get the parent index of a given entry.
+   *
+   * \param [in] id The child index.
+   * \return The index of the parent of \p id.
+   */
   inline uint32_t Parent (uint32_t id) const;
+  /**
+   * Get the next sibling of a given entry.
+   *
+   * \param [in] id The starting index.
+   * \returns The next sibling of \p id.
+   */
   uint32_t Sibling (uint32_t id) const;
+  /**
+   * Get the left child of a given entry.
+   *
+   * \param [in] id The parent index.
+   * \returns The index of the left (first) child.
+   */
   inline uint32_t LeftChild (uint32_t id) const;
+  /**
+   * Get the right child index of a given entry.
+   *
+   * \param [in] id The parent index.
+   * \returns The index of the right (second) child.
+   */
   inline uint32_t RightChild (uint32_t id) const;
+  /**
+   * Get the root index of the heap.
+   *
+   * \returns The root index.
+   */
   inline uint32_t Root (void) const;
-  /* Return the position in the array of the last element included in it. */
+  /**
+   * Return the index of the last element.
+   * \returns The last index.
+   */
   uint32_t Last (void) const;
+  /**
+   * Test if an index is the root.
+   *
+   * \param [in] id The index to test.
+   * \returns \c true if the \p id is the root.
+   */
   inline bool IsRoot (uint32_t id) const;
+  /**
+   * Test if an index is at the bottom of the heap.
+   *
+   * \param [in] id The index to test.
+   * \returns \c true if the index is at the bottom.
+   */
   inline bool IsBottom (uint32_t id) const;
+  /**
+   * Compare (less than) two items.
+   *
+   * \param [in] a The first item.
+   * \param [in] b The second item.
+   * \returns \c true if \c a < \c b
+   */
   inline bool IsLessStrictly (uint32_t a, uint32_t b) const;
+  /**
+   * Minimum of two items.
+   *
+   * \param [in] a The first item.
+   * \param [in] b The second item.
+   * \returns The smaller of the two items.
+   */
   inline uint32_t Smallest (uint32_t a, uint32_t b) const;
-
+  /**
+   * Swap two items.
+   *
+   * \param [in] a The first item.
+   * \param [in] b The second item.
+   */
   inline void Exch (uint32_t a, uint32_t b);
+  /** Percolate a newly inserted Last item to its proper position. */ 
   void BottomUp (void);
+  /**
+   * Percolate a deletion bubble down the heap.
+   *
+   * \param [in] start Starting entry.
+   */
   void TopDown (uint32_t start);
 
+  /** The event list. */
   BinaryHeap m_heap;
 };
 
diff -Naur ns-3.23/src/core/model/int64x64-128.cc ns-3.24/src/core/model/int64x64-128.cc
--- ns-3.23/src/core/model/int64x64-128.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/int64x64-128.cc	2015-09-15 11:18:44.000000000 -0700
@@ -25,7 +25,7 @@
 /**
  * \file
  * \ingroup highprec
- * Implementation of the ns3::int64x64_t type using a native int128_t type..
+ * Implementation of the ns3::int64x64_t type using a native int128_t type.
  */
 
 namespace ns3 {
@@ -44,7 +44,7 @@
  * \param [in]  sb The signed value of the second operand.
  * \param [out] ua The unsigned magnitude of the first operand.
  * \param [out] ub The unsigned magnitude of the second operand.
- * \returns True if the result will be negative.
+ * \returns \c true if the result will be negative.
  */
 static inline  
 bool
diff -Naur ns-3.23/src/core/model/int64x64-cairo.h ns-3.24/src/core/model/int64x64-cairo.h
--- ns-3.23/src/core/model/int64x64-cairo.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/int64x64-cairo.h	2015-09-15 11:18:44.000000000 -0700
@@ -125,7 +125,7 @@
   /**
    * Construct from an integral type.
    *
-   * \param [in] v integer value to represent
+   * \param [in] v Integer value to represent
    */
   inline int64x64_t (const int v)
   {
diff -Naur ns-3.23/src/core/model/int64x64.cc ns-3.24/src/core/model/int64x64.cc
--- ns-3.23/src/core/model/int64x64.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/int64x64.cc	2015-09-15 11:18:44.000000000 -0700
@@ -40,6 +40,20 @@
 NS_LOG_COMPONENT_DEFINE ("int64x64");
 
 /**
+ * \ingroup highprec
+ * Print the high and low words of an int64x64 in hex, for debugging.
+ *
+ * \param [in] hi The high (integer) word.
+ * \param [in] lo The low (fractional) work.
+ */
+#define HEXHILOW(hi, lo) \
+  std::hex << std::setfill ('0') << std::right << " (0x"		\
+	   << std::setw (16) << hi << " "				\
+	   << std::setw (16) << lo					\
+	   << std::dec << std::setfill (' ') << std::left << ")"
+
+  
+/**
  * \internal
  * This algorithm is exact to the precision requested, up to the full
  * 64 decimal digits required to exactly represent a 64-bit fraction.
@@ -74,13 +88,6 @@
   int64x64_t low(0, absVal.GetLow ());
   int places = 0;    // Number of decimal places printed so far
   bool more = true;  // Should we print more digits?
-
-#define HEXHILOW(hi, lo) \
-  std::hex << std::setfill ('0') << std::right << " (0x"		\
-	   << std::setw (16) << hi << " "				\
-	   << std::setw (16) << lo					\
-	   << std::dec << std::setfill (' ') << std::left << ")"
-
   
   NS_LOG_LOGIC (std::endl
 		<< (floatfield ? " f" : "  ")
diff -Naur ns-3.23/src/core/model/int64x64-double.h ns-3.24/src/core/model/int64x64-double.h
--- ns-3.23/src/core/model/int64x64-double.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/int64x64-double.h	2015-09-15 11:18:44.000000000 -0700
@@ -80,7 +80,7 @@
   /**
    * Construct from a floating point value.
    *
-   * \param [in] v floating value to represent
+   * \param [in] v Floating value to represent
    */
   inline int64x64_t (double v)
     : _v (v) {}
@@ -92,7 +92,7 @@
   /**
    * Construct from an integral type.
    *
-   * \param [in] v integer value to represent
+   * \param [in] v Integer value to represent
    */
   inline int64x64_t (int v)
     : _v (v) {}
@@ -154,7 +154,7 @@
   /**
    * Get the high and low portions of this value.
    *
-   * \return a pair of the high and low words
+   * \return A pair of the high and low words
    */
   std::pair<int64_t, uint64_t> GetHighLow (void) const
     {
diff -Naur ns-3.23/src/core/model/int64x64.h ns-3.24/src/core/model/int64x64.h
--- ns-3.23/src/core/model/int64x64.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/int64x64.h	2015-09-15 11:18:44.000000000 -0700
@@ -160,7 +160,7 @@
  * all digits of the fractional part are printed, up to the
  * representation limit of 20 digits; trailing zeros are omitted.
  *
- * \param [in] os The output stream.
+ * \param [in,out] os The output stream.
  * \param [in] value The numerical value to print.
  * \returns The stream.
  */
@@ -169,7 +169,7 @@
  * \ingroup highprec
  * Input streamer for int64x64_t.
  *
- * \param [in] is The input stream.
+ * \param [in,out] is The input stream.
  * \param [out] value The numerical value to set.
  * \returns The stream.
  */
@@ -178,7 +178,7 @@
 /**
  * \ingroup highprec
  * Absolute value.
- * \param value The value to operate on.
+ * \param [in] value The value to operate on.
  * \return The absolute value of \p value.
  */
 inline int64x64_t Abs (const int64x64_t &value)
diff -Naur ns-3.23/src/core/model/integer.cc ns-3.24/src/core/model/integer.cc
--- ns-3.23/src/core/model/integer.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/integer.cc	2015-09-15 11:18:44.000000000 -0700
@@ -40,9 +40,9 @@
  * \ingroup attribute_Integer
  * Make an Integer attribute checker with embedded numeric type name.
  *
- * \param min The minimum allowed value.
- * \param max The maximum allowed value.
- * \param name The original type name ("int8_t", "int16_t", _etc_.).
+ * \param [in] min The minimum allowed value.
+ * \param [in] max The maximum allowed value.
+ * \param [in] name The original type name ("int8_t", "int16_t", _etc_.).
  * \returns The AttributeChecker.
  */
 Ptr<const AttributeChecker>
diff -Naur ns-3.23/src/core/model/int-to-type.h ns-3.24/src/core/model/int-to-type.h
--- ns-3.23/src/core/model/int-to-type.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/int-to-type.h	2015-09-15 11:18:44.000000000 -0700
@@ -36,7 +36,7 @@
  *
  * For an example, see timer-impl.h
  *
- * \tparam v The integral constant value distinguishing this type
+ * \tparam v \explicit The integral constant value distinguishing this type
  *           from other values.
  */
 template <int v>
diff -Naur ns-3.23/src/core/model/list-scheduler.h ns-3.24/src/core/model/list-scheduler.h
--- ns-3.23/src/core/model/list-scheduler.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/list-scheduler.h	2015-09-15 11:18:44.000000000 -0700
@@ -46,20 +46,31 @@
 class ListScheduler : public Scheduler
 {
 public:
+  /**
+   *  Register this type.
+   *  \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
 
+  /** Constructor. */
   ListScheduler ();
+  /** Destructor. */
   virtual ~ListScheduler ();
 
-  virtual void Insert (const Event &ev);
+  // Inherited
+  virtual void Insert (const Scheduler::Event &ev);
   virtual bool IsEmpty (void) const;
-  virtual Event PeekNext (void) const;
-  virtual Event RemoveNext (void);
-  virtual void Remove (const Event &ev);
+  virtual Scheduler::Event PeekNext (void) const;
+  virtual Scheduler::Event RemoveNext (void);
+  virtual void Remove (const Scheduler::Event &ev);
 
 private:
-  typedef std::list<Event> Events;
-  typedef std::list<Event>::iterator EventsI;
+  /** Event list type: a simple list of Events. */
+  typedef std::list<Scheduler::Event> Events;
+  /** Events iterator. */
+  typedef std::list<Scheduler::Event>::iterator EventsI;
+
+  /** The event list. */
   Events m_events;
 };
 
diff -Naur ns-3.23/src/core/model/log.cc ns-3.24/src/core/model/log.cc
--- ns-3.23/src/core/model/log.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/log.cc	2015-09-15 11:18:44.000000000 -0700
@@ -488,7 +488,7 @@
  * Check if a log component exists.
  * This is private to the logging implementation.
  *
- * \param componentName The putative log component name.
+ * \param [in] componentName The putative log component name.
  * \returns \c true if \c componentName exists.
  */
 static bool ComponentExists(std::string componentName) 
diff -Naur ns-3.23/src/core/model/log.h ns-3.24/src/core/model/log.h
--- ns-3.23/src/core/model/log.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/log.h	2015-09-15 11:18:44.000000000 -0700
@@ -127,8 +127,8 @@
  * Same as running your program with the NS_LOG environment
  * variable set as NS_LOG='name=level'.
  *
- * \param name The log component name.
- * \param level The logging level.
+ * \param [in] name The log component name.
+ * \param [in] level The logging level.
  */
 void LogComponentEnable (char const *name, enum LogLevel level);
 
@@ -138,7 +138,7 @@
  * Same as running your program with the NS_LOG environment
  * variable set as NS_LOG='*=level'
  *
- * \param level The logging level.
+ * \param [in] level The logging level.
  */
 void LogComponentEnableAll (enum LogLevel level);
 
@@ -149,15 +149,15 @@
  * The logging output can be later re-enabled with a call
  * to LogComponentEnable.
  *
- * \param name The log component name.
- * \param level The logging level.
+ * \param [in] name The log component name.
+ * \param [in] level The logging level.
  */
 void LogComponentDisable (char const *name, enum LogLevel level);
 
 /**
  * Disable all logging for all components.
  *
- * \param level The logging level.
+ * \param [in] level The logging level.
  */
 void LogComponentDisableAll (enum LogLevel level);
 
@@ -196,7 +196,7 @@
  *   // Further definitions outside of the ns3 namespace
  *\endcode
  *
- * \param name The log component name.
+ * \param [in] name The log component name.
  */
 #define NS_LOG_COMPONENT_DEFINE(name)                           \
   static ns3::LogComponent g_log = ns3::LogComponent (name, __FILE__)
@@ -206,8 +206,8 @@
  *
  * See LogComponent().
  *
- * \param name The log component name.
- * \param mask The default mask.
+ * \param [in] name The log component name.
+ * \param [in] mask The default mask.
  */
 #define NS_LOG_COMPONENT_DEFINE_MASK(name, mask)                \
   static ns3::LogComponent g_log = ns3::LogComponent (name, __FILE__, mask)
@@ -215,7 +215,7 @@
 /**
  * Use \ref NS_LOG to output a message of level LOG_ERROR.
  *
- * \param msg The message to log.
+ * \param [in] msg The message to log.
  */
 #define NS_LOG_ERROR(msg) \
   NS_LOG (ns3::LOG_ERROR, msg)
@@ -223,7 +223,7 @@
 /**
  * Use \ref NS_LOG to output a message of level LOG_WARN.
  *
- * \param msg The message to log.
+ * \param [in] msg The message to log.
  */
 #define NS_LOG_WARN(msg) \
   NS_LOG (ns3::LOG_WARN, msg)
@@ -231,7 +231,7 @@
 /**
  * Use \ref NS_LOG to output a message of level LOG_DEBUG.
  *
- * \param msg The message to log.
+ * \param [in] msg The message to log.
  */
 #define NS_LOG_DEBUG(msg) \
   NS_LOG (ns3::LOG_DEBUG, msg)
@@ -239,7 +239,7 @@
 /**
  * Use \ref NS_LOG to output a message of level LOG_INFO.
  *
- * \param msg The message to log.
+ * \param [in] msg The message to log.
  */
 #define NS_LOG_INFO(msg) \
   NS_LOG (ns3::LOG_INFO, msg)
@@ -247,7 +247,7 @@
 /**
  * Use \ref NS_LOG to output a message of level LOG_LOGIC
  *
- * \param msg The message to log.
+ * \param [in] msg The message to log.
  */
 #define NS_LOG_LOGIC(msg) \
   NS_LOG (ns3::LOG_LOGIC, msg)
@@ -266,14 +266,14 @@
  * Function signature for prepending the simulation time
  * to a log message.
  *
- * \param os The output stream to print on.
+ * \param [in,out] os The output stream to print on.
  */
 typedef void (*LogTimePrinter)(std::ostream &os);
 /**
  * Function signature for prepending the node id
  * to a log message.
  *
- * \param os The output stream to print on.
+ * \param [in,out] os The output stream to print on.
  */
 typedef void (*LogNodePrinter)(std::ostream &os);
 
@@ -281,7 +281,7 @@
  * Set the LogTimePrinter function to be used
  * to prepend log messages with the simulation time.
  *
- * \param lp The LogTimePrinter function.
+ * \param [in] lp The LogTimePrinter function.
  */
 void LogSetTimePrinter (LogTimePrinter lp);
 /**
@@ -294,7 +294,7 @@
  * Set the LogNodePrinter function to be used
  * to prepend log messages with the node id.
  *
- * \param np The LogNodePrinter function.
+ * \param [in] np The LogNodePrinter function.
  */
 void LogSetNodePrinter (LogNodePrinter np);
 /**
@@ -368,7 +368,7 @@
   /**
    * Prevent the enabling of a specific LogLevel.
    *
-   * \param level The LogLevel to block.
+   * \param [in] level The LogLevel to block.
    */
   void SetMask (const enum LogLevel level);
 
diff -Naur ns-3.23/src/core/model/log-macros-enabled.h ns-3.24/src/core/model/log-macros-enabled.h
--- ns-3.23/src/core/model/log-macros-enabled.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/log-macros-enabled.h	2015-09-15 11:18:44.000000000 -0700
@@ -144,8 +144,8 @@
  * NS_LOG (LOG_DEBUG, "a number="<<aNumber<<", anotherNumber="<<anotherNumber);
  * \endcode
  *
- * \param level the log level
- * \param msg the message to log
+ * \param [in] level The log level
+ * \param [in] msg The message to log
  * \internal
  * Logging implementation macro; should not be called directly.
  */
@@ -208,7 +208,7 @@
  * (at least) NS_LOG_FUNCTION(this).  Static functions should use
  * NS_LOG_FUNCTION_NOARGS() instead.
  *
- * \param parameters the parameters to output.
+ * \param [in] parameters The parameters to output.
  */
 #define NS_LOG_FUNCTION(parameters)                             \
   NS_LOG_CONDITION                                              \
@@ -233,7 +233,7 @@
  *
  * Output the requested message unconditionaly.
  *
- * \param msg the message to log
+ * \param [in] msg The message to log
  */
 #define NS_LOG_UNCOND(msg)              \
   NS_LOG_CONDITION                                              \
diff -Naur ns-3.23/src/core/model/make-event.h ns-3.24/src/core/model/make-event.h
--- ns-3.23/src/core/model/make-event.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/make-event.h	2015-09-15 11:18:44.000000000 -0700
@@ -45,10 +45,10 @@
  * Make an EventImpl from class method members which take
  * varying numbers of arguments.
  *
- * \tparam MEM The class method function signature.
- * \tparam OBJ The class type holding the method.
- * \param mem_ptr Class method member function pointer
- * \param obj Class instance.
+ * \tparam MEM \deduced The class method function signature.
+ * \tparam OBJ \deduced The class type holding the method.
+ * \param [in] mem_ptr Class method member function pointer
+ * \param [in] obj Class instance.
  * \returns The constructed EventImpl.
  */
 template <typename MEM, typename OBJ>
@@ -56,12 +56,12 @@
 
 /**
  * \copybrief MakeEvent(MEM,OBJ)
- * \tparam MEM The class method function signature.
- * \tparam OBJ The class type holding the method.
- * \tparam T1 Type of the argument to the underlying function.
- * \param mem_ptr Class method member function pointer
- * \param obj Class instance.
- * \param a1 Argument value to be bound to the underlying function.
+ * \tparam MEM \deduced The class method function signature.
+ * \tparam OBJ \deduced The class type holding the method.
+ * \tparam T1 \deduced Type of the argument to the underlying function.
+ * \param [in] mem_ptr Class method member function pointer
+ * \param [in] obj Class instance.
+ * \param [in] a1 Argument value to be bound to the underlying function.
  * \returns The constructed EventImpl.
  */
 template <typename MEM, typename OBJ,
@@ -70,14 +70,14 @@
 
 /**
  * \copybrief MakeEvent(MEM,OBJ)
- * \tparam MEM The class method function signature.
- * \tparam OBJ The class type holding the method.
- * \tparam T1 Type of the first argument to the underlying function.
- * \tparam T2 Type of the second argument to the underlying function.
- * \param mem_ptr Class method member function pointer
- * \param obj Class instance.
- * \param a1 First argument value to be bound to the underlying function.
- * \param a2 Second argument value to be bound to the underlying function.
+ * \tparam MEM \deduced The class method function signature.
+ * \tparam OBJ \deduced The class type holding the method.
+ * \tparam T1 \deduced Type of the first argument to the underlying function.
+ * \tparam T2 \deduced Type of the second argument to the underlying function.
+ * \param [in] mem_ptr Class method member function pointer
+ * \param [in] obj Class instance.
+ * \param [in] a1 First argument value to be bound to the underlying function.
+ * \param [in] a2 Second argument value to be bound to the underlying function.
  * \returns The constructed EventImpl.
  */
 template <typename MEM, typename OBJ,
@@ -86,16 +86,16 @@
 
 /**
  * \copybrief MakeEvent(MEM,OBJ)
- * \tparam MEM The class method function signature.
- * \tparam OBJ The class type holding the method.
- * \tparam T1 Type of the first argument to the underlying function.
- * \tparam T2 Type of the second argument to the underlying function.
- * \tparam T3 Type of the third argument to the underlying function.
- * \param mem_ptr Class method member function pointer
- * \param obj Class instance.
- * \param a1 First argument value to be bound to the underlying function.
- * \param a2 Second argument value to be bound to the underlying function.
- * \param a3 Third argument value to be bound to the underlying function.
+ * \tparam MEM \deduced The class method function signature.
+ * \tparam OBJ \deduced The class type holding the method.
+ * \tparam T1 \deduced Type of the first argument to the underlying function.
+ * \tparam T2 \deduced Type of the second argument to the underlying function.
+ * \tparam T3 \deduced Type of the third argument to the underlying function.
+ * \param [in] mem_ptr Class method member function pointer
+ * \param [in] obj Class instance.
+ * \param [in] a1 First argument value to be bound to the underlying function.
+ * \param [in] a2 Second argument value to be bound to the underlying function.
+ * \param [in] a3 Third argument value to be bound to the underlying function.
  * \returns The constructed EventImpl.
  */
 template <typename MEM, typename OBJ,
@@ -104,18 +104,18 @@
 
 /**
  * \copybrief MakeEvent(MEM,OBJ)
- * \tparam MEM The class method function signature.
- * \tparam OBJ The class type holding the method.
- * \tparam T1 Type of the first argument to the underlying function.
- * \tparam T2 Type of the second argument to the underlying function.
- * \tparam T3 Type of the third argument to the underlying function.
- * \tparam T4 Type of the fourth argument to the underlying function.
- * \param mem_ptr Class method member function pointer
- * \param obj Class instance.
- * \param a1 First argument value to be bound to the underlying function.
- * \param a2 Second argument value to be bound to the underlying function.
- * \param a3 Third argument value to be bound to the underlying function.
- * \param a4 Fourth argument value to be bound to the underlying function.
+ * \tparam MEM \deduced The class method function signature.
+ * \tparam OBJ \deduced The class type holding the method.
+ * \tparam T1 \deduced Type of the first argument to the underlying function.
+ * \tparam T2 \deduced Type of the second argument to the underlying function.
+ * \tparam T3 \deduced Type of the third argument to the underlying function.
+ * \tparam T4 \deduced Type of the fourth argument to the underlying function.
+ * \param [in] mem_ptr Class method member function pointer
+ * \param [in] obj Class instance.
+ * \param [in] a1 First argument value to be bound to the underlying function.
+ * \param [in] a2 Second argument value to be bound to the underlying function.
+ * \param [in] a3 Third argument value to be bound to the underlying function.
+ * \param [in] a4 Fourth argument value to be bound to the underlying function.
  * \returns The constructed EventImpl.
  */
 template <typename MEM, typename OBJ,
@@ -124,20 +124,20 @@
 
 /**
  * \copybrief MakeEvent(MEM,OBJ)
- * \tparam MEM The class method function signature.
- * \tparam OBJ The class type holding the method.
- * \tparam T1 Type of the first argument to the underlying function.
- * \tparam T2 Type of the second argument to the underlying function.
- * \tparam T3 Type of the third argument to the underlying function.
- * \tparam T4 Type of the fourth argument to the underlying function.
- * \tparam T5 Type of the fifth argument to the underlying function.
- * \param mem_ptr Class method member function pointer
- * \param obj Class instance.
- * \param a1 First argument value to be bound to the underlying function.
- * \param a2 Second argument value to be bound to the underlying function.
- * \param a3 Third argument value to be bound to the underlying function.
- * \param a4 Fourth argument value to be bound to the underlying function.
- * \param a5 Fifh argument value to be bound to the underlying function.
+ * \tparam MEM \deduced The class method function signature.
+ * \tparam OBJ \deduced The class type holding the method.
+ * \tparam T1 \deduced Type of the first argument to the underlying function.
+ * \tparam T2 \deduced Type of the second argument to the underlying function.
+ * \tparam T3 \deduced Type of the third argument to the underlying function.
+ * \tparam T4 \deduced Type of the fourth argument to the underlying function.
+ * \tparam T5 \deduced Type of the fifth argument to the underlying function.
+ * \param [in] mem_ptr Class method member function pointer
+ * \param [in] obj Class instance.
+ * \param [in] a1 First argument value to be bound to the underlying function.
+ * \param [in] a2 Second argument value to be bound to the underlying function.
+ * \param [in] a3 Third argument value to be bound to the underlying function.
+ * \param [in] a4 Fourth argument value to be bound to the underlying function.
+ * \param [in] a5 Fifh argument value to be bound to the underlying function.
  * \returns The constructed EventImpl.
  */
 template <typename MEM, typename OBJ,
@@ -159,17 +159,17 @@
  * Make an EventImpl from a function pointer taking varying numbers
  * of arguments.
  *
- * \param f The function pointer.
+ * \param [in] f The function pointer.
  * \returns The constructed EventImpl.
  */
 EventImpl * MakeEvent (void (*f)(void));
 
 /**
  * \copybrief MakeEvent(void(*f)(void))
- * \tparam U1 Formal type of the argument to the function.
- * \tparam T1 Actual type of the argument to the function.
- * \param f The function pointer.
- * \param a1 Argument to be bound to the function.
+ * \tparam U1 \deduced Formal type of the argument to the function.
+ * \tparam T1 \deduced Actual type of the argument to the function.
+ * \param [in] f The function pointer.
+ * \param [in] a1 Argument to be bound to the function.
  * \returns The constructed EventImpl.
  */
 template <typename U1,
@@ -178,13 +178,13 @@
 
 /**
  * \copybrief MakeEvent(void(*f)(void))
- * \tparam U1 Formal type of the first argument to the function.
- * \tparam U2 Formal type of the second argument to the function.
- * \tparam T1 Actual type of the first argument to the function.
- * \tparam T2 Actual type of the second argument to the function.
- * \param f The function pointer.
- * \param a1 First argument to be bound to the function.
- * \param a2 Second argument to be bound to the function.
+ * \tparam U1 \deduced Formal type of the first argument to the function.
+ * \tparam U2 \deduced Formal type of the second argument to the function.
+ * \tparam T1 \deduced Actual type of the first argument to the function.
+ * \tparam T2 \deduced Actual type of the second argument to the function.
+ * \param [in] f The function pointer.
+ * \param [in] a1 First argument to be bound to the function.
+ * \param [in] a2 Second argument to be bound to the function.
  * \returns The constructed EventImpl.
  */
 template <typename U1, typename U2,
@@ -193,16 +193,16 @@
 
 /**
  * \copybrief MakeEvent(void(*f)(void))
- * \tparam U1 Formal type of the first argument to the function.
- * \tparam U2 Formal type of the second argument to the function.
- * \tparam U3 Formal type of the third argument to the function.
- * \tparam T1 Actual type of the first argument to the function.
- * \tparam T2 Actual type of the second argument to the function.
- * \tparam T3 Actual type of the third argument to the function.
- * \param f The function pointer.
- * \param a1 First argument to be bound to the function.
- * \param a2 Second argument to be bound to the function.
- * \param a3 Third argument to be bound to the function.
+ * \tparam U1 \deduced Formal type of the first argument to the function.
+ * \tparam U2 \deduced Formal type of the second argument to the function.
+ * \tparam U3 \deduced Formal type of the third argument to the function.
+ * \tparam T1 \deduced Actual type of the first argument to the function.
+ * \tparam T2 \deduced Actual type of the second argument to the function.
+ * \tparam T3 \deduced Actual type of the third argument to the function.
+ * \param [in] f The function pointer.
+ * \param [in] a1 First argument to be bound to the function.
+ * \param [in] a2 Second argument to be bound to the function.
+ * \param [in] a3 Third argument to be bound to the function.
  * \returns The constructed EventImpl.
  */
 template <typename U1, typename U2, typename U3,
@@ -211,19 +211,19 @@
 
 /**
  * \copybrief MakeEvent(void(*f)(void))
- * \tparam U1 Formal type of the first argument to the function.
- * \tparam U2 Formal type of the second argument to the function.
- * \tparam U3 Formal type of the third argument to the function.
- * \tparam U4 Formal type of the fourth argument to the function.
- * \tparam T1 Actual type of the first argument to the function.
- * \tparam T2 Actual type of the second argument to the function.
- * \tparam T3 Actual type of the third argument to the function.
- * \tparam T4 Actual type of the fourth argument to the function.
- * \param f The function pointer.
- * \param a1 First argument to be bound to the function.
- * \param a2 Second argument to be bound to the function.
- * \param a3 Third argument to be bound to the function.
- * \param a4 Fourth argument to be bound to the function.
+ * \tparam U1 \deduced Formal type of the first argument to the function.
+ * \tparam U2 \deduced Formal type of the second argument to the function.
+ * \tparam U3 \deduced Formal type of the third argument to the function.
+ * \tparam U4 \deduced Formal type of the fourth argument to the function.
+ * \tparam T1 \deduced Actual type of the first argument to the function.
+ * \tparam T2 \deduced Actual type of the second argument to the function.
+ * \tparam T3 \deduced Actual type of the third argument to the function.
+ * \tparam T4 \deduced Actual type of the fourth argument to the function.
+ * \param [in] f The function pointer.
+ * \param [in] a1 First argument to be bound to the function.
+ * \param [in] a2 Second argument to be bound to the function.
+ * \param [in] a3 Third argument to be bound to the function.
+ * \param [in] a4 Fourth argument to be bound to the function.
  * \returns The constructed EventImpl.
  */
 template <typename U1, typename U2, typename U3, typename U4,
@@ -232,22 +232,22 @@
 
 /**
  * \copybrief MakeEvent(void(*f)(void))
- * \tparam U1 Formal type of the first argument to the function.
- * \tparam U2 Formal type of the second argument to the function.
- * \tparam U3 Formal type of the third argument to the function.
- * \tparam U4 Formal type of the fourth argument to the function.
- * \tparam U5 Formal type of the fifth argument to the function.
- * \tparam T1 Actual type of the first argument to the function.
- * \tparam T2 Actual type of the second argument to the function.
- * \tparam T3 Actual type of the third argument to the function.
- * \tparam T4 Actual type of the fourth argument to the function.
- * \tparam T5 Actual type of the fifth argument to the function.
- * \param f The function pointer.
- * \param a1 First argument to be bound to the function.
- * \param a2 Second argument to be bound to the function.
- * \param a3 Third argument to be bound to the function.
- * \param a4 Fourth argument to be bound to the function.
- * \param a5 Fifth argument to be bound to the function.
+ * \tparam U1 \deduced Formal type of the first argument to the function.
+ * \tparam U2 \deduced Formal type of the second argument to the function.
+ * \tparam U3 \deduced Formal type of the third argument to the function.
+ * \tparam U4 \deduced Formal type of the fourth argument to the function.
+ * \tparam U5 \deduced Formal type of the fifth argument to the function.
+ * \tparam T1 \deduced Actual type of the first argument to the function.
+ * \tparam T2 \deduced Actual type of the second argument to the function.
+ * \tparam T3 \deduced Actual type of the third argument to the function.
+ * \tparam T4 \deduced Actual type of the fourth argument to the function.
+ * \tparam T5 \deduced Actual type of the fifth argument to the function.
+ * \param [in] f The function pointer.
+ * \param [in] a1 First argument to be bound to the function.
+ * \param [in] a2 Second argument to be bound to the function.
+ * \param [in] a3 Third argument to be bound to the function.
+ * \param [in] a4 Fourth argument to be bound to the function.
+ * \param [in] a5 Fifth argument to be bound to the function.
  * \returns The constructed EventImpl.
  */
 template <typename U1, typename U2, typename U3, typename U4, typename U5,
@@ -274,7 +274,7 @@
  *
  * This is the generic template declaration (with empty body).
  *
- * \tparam T The class type.
+ * \tparam T \explicit The class type.
  */
 template <typename T>
 struct EventMemberImplObjTraits;
@@ -287,13 +287,13 @@
  *
  * This is the specialization for pointer types.
  *
- * \tparam T The class type.
+ * \tparam T \explicit The class type.
  */
 template <typename T>
 struct EventMemberImplObjTraits<T *>
 {
   /**
-   * \param p Object pointer.
+   * \param [in] p Object pointer.
    * \return A reference to the object pointed to by p.
    */
   static T &GetReference (T *p)
diff -Naur ns-3.23/src/core/model/map-scheduler.h ns-3.24/src/core/model/map-scheduler.h
--- ns-3.23/src/core/model/map-scheduler.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/map-scheduler.h	2015-09-15 11:18:44.000000000 -0700
@@ -44,22 +44,33 @@
 class MapScheduler : public Scheduler
 {
 public:
+  /**
+   *  Register this type.
+   *  \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
 
+  /** Constructor. */
   MapScheduler ();
+  /** Destructor. */
   virtual ~MapScheduler ();
 
-  virtual void Insert (const Event &ev);
+  // Inherited
+  virtual void Insert (const Scheduler::Event &ev);
   virtual bool IsEmpty (void) const;
-  virtual Event PeekNext (void) const;
-  virtual Event RemoveNext (void);
-  virtual void Remove (const Event &ev);
+  virtual Scheduler::Event PeekNext (void) const;
+  virtual Scheduler::Event RemoveNext (void);
+  virtual void Remove (const Scheduler::Event &ev);
+
 private:
+  /** Event list type: a Map from EventKey to EventImpl. */
   typedef std::map<Scheduler::EventKey, EventImpl*> EventMap;
+  /** EventMap iterator. */
   typedef std::map<Scheduler::EventKey, EventImpl*>::iterator EventMapI;
+  /** EventMap const iterator. */
   typedef std::map<Scheduler::EventKey, EventImpl*>::const_iterator EventMapCI;
 
-
+  /** The event list. */
   EventMap m_list;
 };
 
diff -Naur ns-3.23/src/core/model/names.cc ns-3.24/src/core/model/names.cc
--- ns-3.23/src/core/model/names.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/names.cc	2015-09-15 11:18:44.000000000 -0700
@@ -22,6 +22,7 @@
 #include "assert.h"
 #include "abort.h"
 #include "names.h"
+#include "singleton.h"
 
 /**
  * \file
@@ -34,20 +35,48 @@
 
 NS_LOG_COMPONENT_DEFINE ("Names");
 
+/**
+ * \ingroup config
+ *  Node in the naming tree.
+ */
 class NameNode
 {
 public:
+  /** Default constructor. */
   NameNode ();
+  /**
+   * Copy constructor.
+   *
+   * \param [in] nameNode The NameNode to copy from.
+   */
   NameNode (const NameNode &nameNode);
+  /**
+   * Constructor.
+   *
+   * \param [in] parent The parent NameNode.
+   * \param [in] name The name of this NameNode
+   * \param [in] object The object corresponding to this NameNode.
+   */
   NameNode (NameNode *parent, std::string name, Ptr<Object> object);
+  /**
+   * Assignment operator.
+   *
+   * \param [in] rhs The NameNode to copy from.
+   * \returns The lhs NameNode.
+   */
   NameNode &operator = (const NameNode &rhs);
 
+  /** Destructor. */
   ~NameNode ();
 
+  /** The parent NameNode. */
   NameNode *m_parent;
+  /** The name of this NameNode. */
   std::string m_name;
+  /** The object corresponding to this NameNode. */
   Ptr<Object> m_object;
 
+  /** Children of this NameNode. */
   std::map<std::string, NameNode *> m_nameMap;
 };
 
@@ -85,48 +114,91 @@
   NS_LOG_FUNCTION (this);
 }
 
-class NamesPriv 
+/**
+ * \ingroup config
+ * The singleton root Names object.
+ */
+class NamesPriv : public Singleton<NamesPriv>
 {
 public:
+  /** Constructor. */
   NamesPriv ();
+  /** Destructor. */
   ~NamesPriv ();
 
+  /**
+   * \copydoc Names::Add(std::string,Ptr<Object>object)
+   * \return \c true if the object was named successfully.
+   */
   bool Add (std::string name, Ptr<Object> object);
+  /**
+   * \copydoc Names::Add(std::string,std::string,Ptr<Object>)
+   * \return \c true if the object was named successfully.
+   */
   bool Add (std::string path, std::string name, Ptr<Object> object);
+  /**
+   * \copydoc Names::Add(Ptr<Object>,std::string,Ptr<Object>)
+   * \return \c true if the object was named successfully.
+   */
   bool Add (Ptr<Object> context, std::string name, Ptr<Object> object);
 
+  /**
+   * \copydoc Names::Rename(std::string,std::string)
+   * \return \c true if the object was renamed successfully.
+   */
   bool Rename (std::string oldpath, std::string newname);
+  /**
+   * \copydoc Names::Rename(std::string,std::string,std::string)
+   * \return \c true if the object was renamed successfully.
+   */
   bool Rename (std::string path, std::string oldname, std::string newname);
+  /**
+   * \copydoc Names::Rename(Ptr<Object>,std::string,std::string)
+   * \return \c true if the object was renamed successfully.
+   */
   bool Rename (Ptr<Object> context, std::string oldname, std::string newname);
 
+  /** \copydoc Names::FindName() */
   std::string FindName (Ptr<Object> object);
+  /** \copydoc Names::FindPath() */
   std::string FindPath (Ptr<Object> object);
 
+  /** \copydoc Names::Clear() */
   void Clear (void);
 
-  Ptr<Object> Find (std::string name);
+  /** \copydoc Names::Find(std::string) */
+  Ptr<Object> Find (std::string path);
+  /** \copydoc Names::Find(std::string,std::string) */
   Ptr<Object> Find (std::string path, std::string name);
+  /** \copydoc Names::Find(Ptr<Object>,std::string) */
   Ptr<Object> Find (Ptr<Object> context, std::string name);
 
 private:
   friend class Names;
-  static NamesPriv *Get (void);
 
-  NameNode *IsNamed (Ptr<Object>);
+  /**
+   * Check if an object has a name.
+   *
+   * \param [in] object The object to check.
+   * \returns The corresponding NameNode, if it exists.
+   */
+  NameNode *IsNamed (Ptr<Object> object);
+  /**
+   * Check if a name already exists as a child of a NameNode.
+   *
+   * \param [in] node The node to search.
+   * \param [in] name The name to search for.
+   * \returns \c true if \c name already exists as a child of \c node.
+   */
   bool IsDuplicateName (NameNode *node, std::string name);
 
+  /** The root NameNode. */
   NameNode m_root;
+
+  /** Map from object pointers to their NameNodes. */
   std::map<Ptr<Object>, NameNode *> m_objectMap;
 };
 
-NamesPriv *
-NamesPriv::Get (void)
-{
-  NS_LOG_FUNCTION_NOARGS ();
-  static NamesPriv namesPriv;
-  return &namesPriv;
-}
-
 NamesPriv::NamesPriv ()
 {
   NS_LOG_FUNCTION (this);
diff -Naur ns-3.23/src/core/model/names.h ns-3.24/src/core/model/names.h
--- ns-3.23/src/core/model/names.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/names.h	2015-09-15 11:18:44.000000000 -0700
@@ -31,341 +31,385 @@
 namespace ns3 {
 
 /**
- * \brief A directory of name and Ptr<Object> associations that allows us to
- * give any ns3 Object a name.
+ * \ingroup config
+ * \brief A directory of name and Ptr<Object> associations that allows
+ * us to give any ns3 Object a name.
  */
 class Names
 {
 public:
 
   /**
-   * \brief Add the association between the string "name" and the Ptr<Object> obj.
+   * \brief Add the association between the string "name" and the
+   * Ptr<Object> obj.
    *
-   * The name may begin either with "/Names" to explicitly call out the fact 
-   * that the name provided is installed under the root of the name space, 
-   * or it may begin with the name of the first object in the path.  For example, 
-   * Names::Add ("/Names/client", obj) and Names::Add ("client", obj) accomplish 
-   * exactly the same thing.  A name at a given level in the name space path must
-   * be unique.  In the case of the example above, it would be illegal to try and
-   * associate a different object with the same name: "client" at the same level 
-   * ("/Names") in the path.
-   *
-   * As well as specifying a name at the root of the "/Names" namespace, the 
-   * name parameter can contain a path that fully qualifies the name to 
-   * be added.  For example, if you previously have named an object "client"
-   * in the root namespace as above, you could name an object "under" that
-   * name by making a call like Names::Add ("/Names/client/eth0", obj).  This 
-   * will define the name "eth0" and make it reachable using the path specified.
-   * Note that Names::Add ("client/eth0", obj) would accomplish exactly the same 
-   * thing.
-   *
-   * Duplicate names are not allowed at the same level in a path, however you may
-   * associate similar names with different paths.  For example, if you define
-   * "/Names/Client", you may not define another "/Names/Client" just as you may
-   * not have two files with the same name in a classical filesystem.  However,
-   * you may have "/Names/Client/eth0" and "/Names/Server/eth0" defined at the 
-   * same time just as you might have different files of the same name under 
-   * different directories.
+   * The name may begin either with "/Names" to explicitly call out
+   * the fact that the name provided is installed under the root of
+   * the name space, or it may begin with the name of the first object
+   * in the path.  For example, Names::Add ("/Names/client", obj) and
+   * Names::Add ("client", obj) accomplish exactly the same thing.  A
+   * name at a given level in the name space path must be unique.  In
+   * the case of the example above, it would be illegal to try and
+   * associate a different object with the same name: "client" at the
+   * same level ("/Names") in the path.
+   *
+   * As well as specifying a name at the root of the "/Names"
+   * namespace, the name parameter can contain a path that fully
+   * qualifies the name to be added.  For example, if you previously
+   * have named an object "client" in the root namespace as above, you
+   * could name an object "under" that name by making a call like
+   * Names::Add ("/Names/client/eth0", obj).  This will define the
+   * name "eth0" and make it reachable using the path specified.  Note
+   * that Names::Add ("client/eth0", obj) would accomplish exactly the
+   * same thing.
+   *
+   * Duplicate names are not allowed at the same level in a path,
+   * however you may associate similar names with different paths.
+   * For example, if you define "/Names/Client", you may not define
+   * another "/Names/Client" just as you may not have two files with
+   * the same name in a classical filesystem.  However, you may have
+   * "/Names/Client/eth0" and "/Names/Server/eth0" defined at the same
+   * time just as you might have different files of the same name
+   * under different directories.
    *
-   * \param name The name of the object you want to associate; which may be 
+   * \param [in] name The name of the object you want to associate; which may be 
    *             prepended with a path to that object.
-   * \param object A smart pointer to the object itself.
+   * \param [in] object A smart pointer to the object itself.
    */
   static void Add (std::string name, Ptr<Object> object);
 
   /**
-   * \brief An intermediate form of Names::Add allowing you to provide a path to
-   * the parent object (under which you want this name to be defined) in the form
-   * of a name path string.
-   *
-   * In some cases, it is desirable to break up the path used to describe an item
-   * in the names namespace into a path and a name.  This is analogous to a
-   * file system operation in which you provide a directory name and a file name.
-   *
-   * For example, consider a situation where you have previously named an object
-   * "/Names/server".  If you further want to create an association for between a 
-   * Ptr<Object> object that you want to live "under" the server in the name space
-   * -- perhaps "eth0" -- you could do this in two ways, depending on which was 
-   * more convenient: Names::Add ("/Names/server/eth0", object) or, using the split
-   * path and name approach, Names::Add ("/Names/server", "eth0", object).
-   *
-   * Duplicate names are not allowed at the same level in a path, however you may
-   * associate similar names with different paths.  For example, if you define
-   * "/Names/Client", you may not define another "/Names/Client" just as you may
-   * not have two files with the same name in a classical filesystem.  However,
-   * you may have "/Names/Client/eth0" and "/Names/Server/eth0" defined at the 
-   * same time just as you might have different files of the same name under 
-   * different directories.
-   *
-   * \param path A path name describing a previously named object under which 
-   *             you want this new name to be defined.
-   * \param name The name of the object you want to associate.
-   * \param object A smart pointer to the object itself.
+   * \brief An intermediate form of Names::Add allowing you to provide
+   * a path to the parent object (under which you want this name to be
+   * defined) in the form of a name path string.
+   *
+   * In some cases, it is desirable to break up the path used to
+   * describe an item in the names namespace into a path and a name.
+   * This is analogous to a file system operation in which you provide
+   * a directory name and a file name.
+   *
+   * For example, consider a situation where you have previously named
+   * an object "/Names/server".  If you further want to create an
+   * association for between a Ptr<Object> object that you want to
+   * live "under" the server in the name space -- perhaps "eth0" --
+   * you could do this in two ways, depending on which was more
+   * convenient: Names::Add ("/Names/server/eth0", object) or, using
+   * the split path and name approach, Names::Add ("/Names/server",
+   * "eth0", object).
+   *
+   * Duplicate names are not allowed at the same level in a path,
+   * however you may associate similar names with different paths.
+   * For example, if you define "/Names/Client", you may not define
+   * another "/Names/Client" just as you may not have two files with
+   * the same name in a classical filesystem.  However, you may have
+   * "/Names/Client/eth0" and "/Names/Server/eth0" defined at the same
+   * time just as you might have different files of the same name
+   * under different directories.
+   *
+   * \param [in] path A path name describing a previously named object
+   *             under which you want this new name to be defined.
+   * \param [in] name The name of the object you want to associate.
+   * \param [in] object A smart pointer to the object itself.
    *
-   * \see Names::Add (Ptr<Object> context, std::string name, Ptr<Object> object);
+   * \see Names::Add (Ptr<Object>,std::string,Ptr<Object>);
    */
   static void Add (std::string path, std::string name, Ptr<Object> object);
 
   /**
-   * \brief A low-level form of Names::Add allowing you to specify the path to
-   * the parent object (under which you want this name to be defined) in the form
-   * of a previously named object.
-   *
-   * In some use cases, it is desirable to break up the path in the names name
-   * space into a path and a name.  This is analogous to a file system operation 
-   * in which you provide a directory name and a file name.  Recall that the path
-   * string actually refers to a previously named object, "under" which you want
-   * to accomplish some naming action.
+   * \brief A low-level form of Names::Add allowing you to specify the
+   * path to the parent object (under which you want this name to be
+   * defined) in the form of a previously named object.
+   *
+   * In some use cases, it is desirable to break up the path in the
+   * names name space into a path and a name.  This is analogous to a
+   * file system operation in which you provide a directory name and a
+   * file name.  Recall that the path string actually refers to a
+   * previously named object, "under" which you want to accomplish
+   * some naming action.
    * 
-   * However, the path is sometimes not available, and you only have the object 
-   * that is represented by the path in the names name space.  To support this 
-   * use-case in a reasonably high-performance way, the path string is can be 
-   * replaced by the object pointer to which that path would refer.  In the spirit
-   * of the Config code where this use-case is most prominent, we refer to this
-   * object as the "context" for the names operation.
-   *
-   * You can think of the context roughly as the inode number of a directory file
-   * in Unix.  The inode number can be used to look up the directory file which 
-   * contains the list of file names defined at that directory level.  Similarly
-   * the context is used to look up an internal name service entry which contains
-   * the names defined for that context.
-   *
-   * For example, consider a situation where you have previously named an object
-   * "/Names/server".  If you further want to create an association for between a 
-   * Ptr<Object> object that you want to live "under" the server in the name space
-   * -- perhaps "eth0" -- you could do this by providing a complete path to the 
-   * new name: Names::Add ("/Names/server/eth0", object).  If, however, somewhere
-   * in your code you only had a pointer to the server, say Ptr<Node> node, and 
-   * not a handy path string,  you could also accomplish this by 
-   * Names::Add (node, "eth0", object).
-   *
-   * Duplicate names are not allowed at the same level in a path.  In the case
-   * of this method, the context object gives the same information as a path
-   * string.  You may associate similar names with different paths.  For example,
-   *  if you define"/Names/Client", you may not define another "/Names/Client" 
-   * just as you may not have two files with the same name in a classical filesystem.
-   * However, you may have "/Names/Client/eth0" and "/Names/Server/eth0" defined at 
-   * the same time just as you might have different files of the same name under 
-   * different directories.
-   *
-   * \param context A smart pointer to an object that is used in place of the path
-   *                under which you want this new name to be defined.
-   * \param name The name of the object you want to associate.
-   * \param object A smart pointer to the object itself.
+   * However, the path is sometimes not available, and you only have
+   * the object that is represented by the path in the names name
+   * space.  To support this use-case in a reasonably high-performance
+   * way, the path string is can be replaced by the object pointer to
+   * which that path would refer.  In the spirit of the Config code
+   * where this use-case is most prominent, we refer to this object as
+   * the "context" for the names operation.
+   *
+   * You can think of the context roughly as the inode number of a
+   * directory file in Unix.  The inode number can be used to look up
+   * the directory file which contains the list of file names defined
+   * at that directory level.  Similarly the context is used to look
+   * up an internal name service entry which contains the names
+   * defined for that context.
+   *
+   * For example, consider a situation where you have previously named
+   * an object "/Names/server".  If you further want to create an
+   * association for between a Ptr<Object> object that you want to
+   * live "under" the server in the name space -- perhaps "eth0" --
+   * you could do this by providing a complete path to the new name:
+   * Names::Add ("/Names/server/eth0", object).  If, however,
+   * somewhere in your code you only had a pointer to the server, say
+   * Ptr<Node> node, and not a handy path string, you could also
+   * accomplish this by Names::Add (node, "eth0", object).
+   *
+   * Duplicate names are not allowed at the same level in a path.  In
+   * the case of this method, the context object gives the same
+   * information as a path string.  You may associate similar names
+   * with different paths.  For example, if you define"/Names/Client",
+   * you may not define another "/Names/Client" just as you may not
+   * have two files with the same name in a classical filesystem.
+   * However, you may have "/Names/Client/eth0" and
+   * "/Names/Server/eth0" defined at the same time just as you might
+   * have different files of the same name under different
+   * directories.
+   *
+   * \param [in] context A smart pointer to an object that is used
+   *             in place of the path under which you want this new
+   *             name to be defined.
+   * \param [in] name The name of the object you want to associate.
+   * \param [in] object A smart pointer to the object itself.
    */
   static void Add (Ptr<Object> context, std::string name, Ptr<Object> object);
 
   /**
    * \brief Rename a previously associated name.
    *
-   * The name may begin either with "/Names" to explicitly call out the fact 
-   * that the name provided is installed under the root of the name space, 
-   * or it may begin with the name of the first object in the path.  For example, 
-   * Names::Rename ("/Names/client", "server") and Names::Rename ("client", "server") 
-   * accomplish exactly the same thing.  Names at a given level in the name space
-   * path must be unique. In the case of the example above, it would be illegal 
-   * to try and rename a different object to the same name: "server" at the same 
-   * level ("/Names") in the path.
-   *
-   * As well as specifying a name at the root of the "/Names" namespace, the 
-   * name parameter can contain a path that fully qualifies the name to 
-   * be changed.  For example, if you previously have (re)named an object 
-   * "server" in the root namespace as above, you could then rename an object 
-   * "under" that name by making a call like Names::Rename ("/Names/server/csma", "eth0").
-   * This will rename the object previously associated with "/Names/server/csma" 
-   * to "eth0" and make leave it reachable using the path "/Names/server/eth0".
-   * Note that Names::Rename ("server/csma", "eth0") would accomplish exactly the 
-   * same thing.
-   *
-   * \param oldpath The current path name to the object you want to change.
-   * \param newname The new name of the object you want to change.
+   * The name may begin either with "/Names" to explicitly call out
+   * the fact that the name provided is installed under the root of
+   * the name space, or it may begin with the name of the first object
+   * in the path.  For example, Names::Rename ("/Names/client",
+   * "server") and Names::Rename ("client", "server") accomplish
+   * exactly the same thing.  Names at a given level in the name space
+   * path must be unique. In the case of the example above, it would
+   * be illegal to try and rename a different object to the same name:
+   * "server" at the same level ("/Names") in the path.
+   *
+   * As well as specifying a name at the root of the "/Names"
+   * namespace, the name parameter can contain a path that fully
+   * qualifies the name to be changed.  For example, if you previously
+   * have (re)named an object "server" in the root namespace as above,
+   * you could then rename an object "under" that name by making a
+   * call like Names::Rename ("/Names/server/csma", "eth0").  This
+   * will rename the object previously associated with
+   * "/Names/server/csma" to "eth0" and make leave it reachable using
+   * the path "/Names/server/eth0".  Note that Names::Rename
+   * ("server/csma", "eth0") would accomplish exactly the same thing.
+   *
+   * \param [in] oldpath The current path name to the object you want
+   *             to change.
+   * \param [in] newname The new name of the object you want to change.
    *
    * \see Names::Add (std::string name, Ptr<Object> obj)
    */
   static void Rename (std::string oldpath, std::string newname);
 
   /**
-   * \brief An intermediate form of Names::Rename allowing you to provide a path to
-   * the parent object (under which you want this name to be changed) in the form
-   * of a name path string.
-   *
-   * In some cases, it is desirable to break up the path used to describe an item
-   * in the names namespace into a path and a name.  This is analogous to a
-   * file system operation in which you provide a directory name and a file name.
-   *
-   * For example, consider a situation where you have previously named an object
-   * "/Names/server/csma".  If you want to change the name "csma" to "eth0", you
-   * could do this in two ways, depending on which was more convenient: 
-   * Names::Rename ("/Names/server/csma", "eth0") or, using the split
-   * path and name approach, Names::Rename ("/Names/server", "csma", "eth0").
-   *
-   * \param path A path name describing a previously named object under which 
-   *             you want this name change to occur (cf. directory).
-   * \param oldname The currently defined name of the object.
-   * \param newname The new name you want the object to have.
+   * \brief An intermediate form of Names::Rename allowing you to
+   * provide a path to the parent object (under which you want this
+   * name to be changed) in the form of a name path string.
+   *
+   * In some cases, it is desirable to break up the path used to
+   * describe an item in the names namespace into a path and a name.
+   * This is analogous to a file system operation in which you provide
+   * a directory name and a file name.
+   *
+   * For example, consider a situation where you have previously named
+   * an object "/Names/server/csma".  If you want to change the name
+   * "csma" to "eth0", you could do this in two ways, depending on
+   * which was more convenient: Names::Rename ("/Names/server/csma",
+   * "eth0") or, using the split path and name approach, Names::Rename
+   * ("/Names/server", "csma", "eth0").
+   *
+   * \param [in] path A path name describing a previously named object
+   *             under which you want this name change to occur
+   *             (cf. directory).
+   * \param [in] oldname The currently defined name of the object.
+   * \param [in] newname The new name you want the object to have.
    */
   static void Rename (std::string path, std::string oldname, std::string newname);
 
   /**
-   * \brief A low-level form of Names::Rename allowing you to specify the path to
-   * the parent object (under which you want this name to be changed) in the form
-   * of a previously named object.
-   *
-   * In some use cases, it is desirable to break up the path in the names name
-   * space into a path and a name.  This is analogous to a file system operation 
-   * in which you provide a directory name and a file name.  Recall that the path
-   * string actually refers to a previously named object, "under" which you want
-   * to accomplish some naming action.
+   * \brief A low-level form of Names::Rename allowing you to specify
+   * the path to the parent object (under which you want this name to
+   * be changed) in the form of a previously named object.
+   *
+   * In some use cases, it is desirable to break up the path in the
+   * names name space into a path and a name.  This is analogous to a
+   * file system operation in which you provide a directory name and a
+   * file name.  Recall that the path string actually refers to a
+   * previously named object, "under" which you want to accomplish
+   * some naming action.
    * 
-   * However, the path is sometimes not available, and you only have the object 
-   * that is represented by the path in the names name space.  To support this 
-   * use-case in a reasonably high-performance way, the path string is can be 
-   * replaced by the object pointer to which that path would refer.  In the spirit
-   * of the Config code where this use-case is most prominent, we refer to this
-   * object as the "context" for the names operation.
-   *
-   * You can think of the context roughly as the inode number of a directory file
-   * in Unix.  The inode number can be used to look up the directory file which 
-   * contains the list of file names defined at that directory level.  Similarly
-   * the context is used to look up an internal name service entry which contains
-   * the names defined for that context.
-   *
-   * For example, consider a situation where you have previously named an object
-   * "/Names/server/csma".  If you later decide to rename the csma object to say
-   * "eth0" -- you could do this by providing a complete path as in
-   * Names::Rename ("/Names/server/csma", "eth0").  If, however, somewhere
-   * in your code you only had a pointer to the server, and not a handy path 
-   * string, say Ptr<Node> node, you could also accomplish this by 
-   * Names::Rename (node, "csma", "eth0").
-   *
-   * \param context A smart pointer to an object that is used in place of the path
-   *                under which you want this new name to be defined.
-   * \param oldname The current shortname of the object you want to change.
-   * \param newname The new shortname of the object you want to change.
+   * However, the path is sometimes not available, and you only have
+   * the object that is represented by the path in the names name
+   * space.  To support this use-case in a reasonably high-performance
+   * way, the path string is can be replaced by the object pointer to
+   * which that path would refer.  In the spirit of the Config code
+   * where this use-case is most prominent, we refer to this object as
+   * the "context" for the names operation.
+   *
+   * You can think of the context roughly as the inode number of a
+   * directory file in Unix.  The inode number can be used to look up
+   * the directory file which contains the list of file names defined
+   * at that directory level.  Similarly the context is used to look
+   * up an internal name service entry which contains the names
+   * defined for that context.
+   *
+   * For example, consider a situation where you have previously named
+   * an object "/Names/server/csma".  If you later decide to rename
+   * the csma object to say "eth0" -- you could do this by providing a
+   * complete path as in Names::Rename ("/Names/server/csma", "eth0").
+   * If, however, somewhere in your code you only had a pointer to the
+   * server, and not a handy path string, say Ptr<Node> node, you
+   * could also accomplish this by Names::Rename (node, "csma",
+   * "eth0").
+   *
+   * \param [in] context A smart pointer to an object that is used
+   *             in place of the path under which you want this
+   *             new name to be defined.
+   * \param [in] oldname The current shortname of the object you want
+   *             to change.
+   * \param [in] newname The new shortname of the object you want
+   *             to change.
    */
   static void Rename (Ptr<Object> context, std::string oldname, std::string newname);
 
   /**
-   * Given a pointer to an object, look to see if that object has a name
-   * associated with it and, if so, return the name of the object otherwise
-   * return an empty string.
-   *
-   * An object can be referred to in two ways.  Either you can talk about it
-   * using its fully qualified path name, for example, "/Names/client/eth0"
-   * or you can refer to it by its name, in this case "eth0".
+   * \brief Given a pointer to an object, look to see if that object
+   * has a name associated with it and, if so, return the name of the
+   * object otherwise return an empty string.
+   *
+   * An object can be referred to in two ways.  Either you can talk
+   * about it using its fully qualified path name, for example,
+   * "/Names/client/eth0" or you can refer to it by its name, in this
+   * case "eth0".
    *
    * This method returns the name of the object, e.g., "eth0".
    *
-   * \param object A smart pointer to an object for which you want to find
-   *               its name.
+   * \param [in] object A smart pointer to an object for which you want
+   *             to find its name.
    *
-   * \returns a string containing the name of the object if found, otherwise
-   *          the empty string.
+   * \returns A string containing the name of the object if found,
+   *          otherwise the empty string.
    */
   static std::string FindName (Ptr<Object> object);
 
   /**
-   * Given a pointer to an object, look to see if that object has a name
-   * associated with it and return the fully qualified name path of the 
-   * object otherwise return an empty string.
+   * \brief Given a pointer to an object, look to see if that object
+   * has a name associated with it and return the fully qualified name
+   * path of the object otherwise return an empty string.
+   *
+   * An object can be referred to in two ways.  Either you can talk
+   * about it using its fully qualified path name, for example,
+   * "/Names/client/eth0" or you can refer to it by its name, in this
+   * case "eth0".
    *
-   * An object can be referred to in two ways.  Either you can talk about it
-   * using its fully qualified path name, for example, "/Names/client/eth0"
-   * or you can refer to it by its name, in this case "eth0".
-   *
-   * This method returns the name path of the object, e.g., "Names/client/eth0".
+   * This method returns the name path of the object, e.g.,
+   * "Names/client/eth0".
    *
-   * \param object A smart pointer to an object for which you want to find
-   *               its fullname.
+   * \param [in] object A smart pointer to an object for which you
+   *             want to find its fullname.
    *
-   * \returns a string containing the name path of the object, otherwise
-   *          the empty string.
+   * \returns A string containing the name path of the object,
+   *          otherwise the empty string.
    */
   static std::string FindPath (Ptr<Object> object);
 
   /**
-   * Clear the list of objects associated with names.
+   * \brief Clear the list of objects associated with names.
    */
 
   static void Clear (void);
 
   /**
-   * Given a name path string, look to see if there's an object in the system
-   * with that associated to it.  If there is, do a GetObject on the resulting
-   * object to convert it to the requested typename and return it.
+   * \brief Given a name path string, look to see if there's an object
+   * in the system with that associated to it.  If there is, do a
+   * GetObject on the resulting object to convert it to the requested
+   * typename and return it.
    * 
-   * An object can be referred to in two ways.  Either you can talk about it
-   * using its fully qualified path name, for example, "/Names/client/eth0"
-   * or you can refer to it by its name, in this case "eth0".
+   * An object can be referred to in two ways.  Either you can talk
+   * about it using its fully qualified path name, for example,
+   * "/Names/client/eth0" or you can refer to it by its name, in this
+   * case "eth0".
    *
-   * This method requires that the name path of the object be provided, e.g., 
-   * "Names/client/eth0".
+   * This method requires that the name path of the object be
+   * provided, e.g., "Names/client/eth0".
    *
-   * \param path A string containing a name space path used to locate the object.
+   * \param [in] path A string containing a name space path used
+   *             to locate the object.
    *
-   * \returns a smart pointer to the named object converted to the requested
-   *          type.
+   * \returns A smart pointer to the named object converted to
+   *          the requested type.
    */
   template <typename T>
   static Ptr<T> Find (std::string path);
 
   /**
-   * Given a path to an object and an object name, look through the names defined
-   * under the path to see if there's an object there with the given name.
-   *
-   * In some cases, it is desirable to break up the path used to describe an item
-   * in the names namespace into a path and a name.  This is analogous to a
-   * file system operation in which you provide a directory name and a file name.
-   *
-   * For example, consider a situation where you have previously named an object
-   * "/Names/server/eth0".  If you want to discover the object which you associated
-   * with this path, you could do this in two ways, depending on which was more 
-   * convenient: Names::Find ("/Names/server/eth0") or, using the split path and 
-   * name approach, Names::Find ("/Names/server", "eth0").
-   *
-   * \param path A path name describing a previously named object under which 
-   *             you want to look for the specified name.
-   * \param name A string containing a name to search for.
+   * \brief Given a path to an object and an object name, look through
+   * the names defined under the path to see if there's an object
+   * there with the given name.
+   *
+   * In some cases, it is desirable to break up the path used to
+   * describe an item in the names namespace into a path and a name.
+   * This is analogous to a file system operation in which you provide
+   * a directory name and a file name.
+   *
+   * For example, consider a situation where you have previously named
+   * an object "/Names/server/eth0".  If you want to discover the
+   * object which you associated with this path, you could do this in
+   * two ways, depending on which was more convenient: Names::Find
+   * ("/Names/server/eth0") or, using the split path and name
+   * approach, Names::Find ("/Names/server", "eth0").
+   *
+   * \param [in] path A path name describing a previously named object
+   *             under which you want to look for the specified name.
+   * \param [in] name A string containing a name to search for.
    *
-   * \returns a smart pointer to the named object converted to the requested
-   *          type.
+   * \returns A smart pointer to the named object converted to
+   *          the requested type.
    */
   template <typename T>
   static Ptr<T> Find (std::string path, std::string name);
 
   /**
-   * Given a path to an object and an object name, look through the names defined
-   * under the path to see if there's an object there with the given name.
-   *
-   * In some cases, it is desirable to break up the path used to describe an item
-   * in the names namespace into a path and a name.  This is analogous to a
-   * file system operation in which you provide a directory name and a file name.
-   *
-   * For example, consider a situation where you have previously named an object
-   * "/Names/server/eth0".  If you want to discover the object which you associated
-   * with this path, you could do this in two ways, depending on which was more 
-   * convenient: Names::Find ("/Names/server/eth0") or, using the split path and 
-   * name approach, Names::Find ("/Names/server", "eth0").
-   *
-   * However, the path is sometimes not available, and you only have the object 
-   * that is represented by the path in the names name space.  To support this 
-   * use-case in a reasonably high-performance way, the path string is can be 
-   * replaced by the object pointer to which that path would refer.  In the spirit
-   * of the Config code where this use-case is most prominent, we refer to this
-   * object as the "context" for the names operation.
-   *
-   * You can think of the context roughly as the inode number of a directory file
-   * in Unix.  The inode number can be used to look up the directory file which 
-   * contains the list of file names defined at that directory level.  Similarly
-   * the context is used to look up an internal name service entry which contains
-   * the names defined for that context.
-   *
-   * \param context A smart pointer to an object that is used in place of the path
-   *                under which you want this new name to be defined.
-   * \param name A string containing a name to search for.
+   * \brief Given a path to an object and an object name, look through
+   * the names defined under the path to see if there's an object
+   * there with the given name.
+   *
+   * In some cases, it is desirable to break up the path used to
+   * describe an item in the names namespace into a path and a name.
+   * This is analogous to a file system operation in which you provide
+   * a directory name and a file name.
+   *
+   * For example, consider a situation where you have previously named
+   * an object "/Names/server/eth0".  If you want to discover the
+   * object which you associated with this path, you could do this in
+   * two ways, depending on which was more convenient: Names::Find
+   * ("/Names/server/eth0") or, using the split path and name
+   * approach, Names::Find ("/Names/server", "eth0").
+   *
+   * However, the path is sometimes not available, and you only have
+   * the object that is represented by the path in the names name
+   * space.  To support this use-case in a reasonably high-performance
+   * way, the path string is can be replaced by the object pointer to
+   * which that path would refer.  In the spirit of the Config code
+   * where this use-case is most prominent, we refer to this object as
+   * the "context" for the names operation.
+   *
+   * You can think of the context roughly as the inode number of a
+   * directory file in Unix.  The inode number can be used to look up
+   * the directory file which contains the list of file names defined
+   * at that directory level.  Similarly the context is used to look
+   * up an internal name service entry which contains the names
+   * defined for that context.
+   *
+   * \param [in] context A smart pointer to an object that is used
+   *             in place of the path under which you want this
+   *             new name to be defined.
+   * \param [in] name A string containing a name to search for.
    *
-   * \returns a smart pointer to the named object converted to the requested
-   *          type.
+   * \returns A smart pointer to the named object converted to
+   *          the requested type.
    */
   template <typename T>
   static Ptr<T> Find (Ptr<Object> context, std::string name);
@@ -374,42 +418,44 @@
   /**
    * \brief Non-templated internal version of Names::Find
    *
-   * \param path A string containing the path of the object to look for.
+   * \param [in] path A string containing the path of the object
+   *             to look for.
    *
-   * \returns a smart pointer to the named object.
+   * \returns A smart pointer to the named object.
    */
   static Ptr<Object> FindInternal (std::string path);
 
   /**
    * \brief Non-templated internal version of Names::Find
    *
-   * \param path A string containing the path to search for the object in.
-   * \param name A string containing the name of the object to look for.
+   * \param [in] path A string containing the path to search
+   *             for the object in.
+   * \param [in] name A string containing the name of the object
+   *             to look for.
    *
-   * \returns a smart pointer to the named object.
+   * \returns A smart pointer to the named object.
    */
   static Ptr<Object> FindInternal (std::string path, std::string name);
 
   /**
    * \brief Non-templated internal version of Names::Find
    *
-   * \param context A smart pointer to an object under which you want to look 
-   *                for the provided name.
-   * \param name A string containing the name to look for.
+   * \param [in] context A smart pointer to an object under which
+   *             you want to look for the provided name.
+   * \param [in] name A string containing the name to look for.
    *
-   * \returns a smart pointer to the named object.
+   * \returns A smart pointer to the named object.
    */
   static Ptr<Object> FindInternal (Ptr<Object> context, std::string name);
 };
 
-/**
- * \brief Template definition of corresponding template declaration found in class Names.
- */
+  
 template <typename T>
+/* static */
 Ptr<T> 
-Names::Find (std::string name)
+Names::Find (std::string path)
 {
-  Ptr<Object> obj = FindInternal (name);
+  Ptr<Object> obj = FindInternal (path);
   if (obj)
     {
       return obj->GetObject<T> ();
@@ -420,10 +466,8 @@
     }
 }
 
-/**
- * \brief Template definition of corresponding template declaration found in class Names.
- */
 template <typename T>
+/* static */
 Ptr<T> 
 Names::Find (std::string path, std::string name)
 {
@@ -438,10 +482,8 @@
     }
 }
 
-/**
- * \brief Template definition of corresponding template declaration found in class Names.
- */
 template <typename T>
+/* static */
 Ptr<T> 
 Names::Find (Ptr<Object> context, std::string name)
 {
diff -Naur ns-3.23/src/core/model/non-copyable.h ns-3.24/src/core/model/non-copyable.h
--- ns-3.23/src/core/model/non-copyable.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.24/src/core/model/non-copyable.h	2015-09-15 11:18:44.000000000 -0700
@@ -0,0 +1,75 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 Lawrence Livermore National Laboratory
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author:  Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
+ */
+
+#ifndef NS3_NON_COPYABLE_H
+#define NS3_NON_COPYABLE_H
+
+/**
+ * \file
+ * \ingroup access
+ * ns3::NonCopyable class declaration and implementation.
+ */
+
+/**
+ * \ingroup core
+ * \defgroup access NonCopyable and Singleton
+ * Helpers to make classes non-copyable or singleton.
+ */
+
+namespace ns3 {
+
+/**
+ * \ingroup access
+ * A base class for (non-Singleton) objects which shouldn't be copied.
+ *
+ * To prevent copying of your `class ExampleNC` just inherit from NonCopyable:
+ * \code
+ *   class ExampleNC : private NonCopyable { ... };
+ * \endcode
+ *
+ * This class prevents each instance of a derived class from being copied.
+ * If you want only a single global instance of the derived class,
+ * see Singleton.
+ *
+ * \internal
+ * This is based on `boost::noncopyable`.
+ */
+class NonCopyable
+{
+protected:
+  /** Constructor. */
+  NonCopyable () {}
+  /** Destructor. */
+  ~NonCopyable () {}
+
+private:
+  /** Copy constructor.  Private, so not copyable. */
+  NonCopyable (const NonCopyable &);
+  /**
+   * Assignment.  Private, so not copyable.
+   * \param [in] other The dummy argument
+   * \return The unmodified copy.
+   */
+  NonCopyable & operator = (const NonCopyable &other);
+}; 
+
+} // namespace ns3 
+
+#endif /* NS3_NON_COPYABLE_H */
diff -Naur ns-3.23/src/core/model/nstime.h ns-3.24/src/core/model/nstime.h
--- ns-3.23/src/core/model/nstime.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/nstime.h	2015-09-15 11:18:44.000000000 -0700
@@ -77,9 +77,9 @@
  *
  * You can also use the following non-member functions to manipulate
  * any of these ns3::Time object:
- *  - \ref Abs()
- *  - \ref Max()
- *  - \ref Min()
+ *  - Abs(Time)
+ *  - Max(Time,Time)
+ *  - Min(Time,Time)
  *
  * This class also controls the resolution of the underlying time value.
  * The resolution is the smallest representable time interval.
@@ -123,7 +123,7 @@
   /**
    *  Assignment operator
    * \param [in] o Time to assign.
-   * \return the Time.
+   * \return The Time.
    */      
   inline Time & operator = (const Time & o)
   {
@@ -161,7 +161,6 @@
    *  Construct from a numeric value.
    *  The current time resolution will be assumed as the unit.
    *  \param [in] v The value.
-   *  @{
    */
   explicit inline Time (double v)
     : m_data (lround (v))
@@ -228,7 +227,6 @@
       }
   }
   /**@}*/
-  /**@}*/
   
   /**
    * \brief Construct Time object from common time expressions like "1ms"
@@ -248,7 +246,7 @@
    * There can be no white space between the numerical portion
    * and the units.  Any otherwise malformed string causes a fatal error to
    * occur.
-   * \param s The string to parse into a Time
+   * \param [in] s The string to parse into a Time
    */
   explicit Time (const std::string & s);
 
@@ -272,27 +270,27 @@
       }
   }
 
-  /** \return true if the time is zero, false otherwise. */
+  /** \return \c true if the time is zero, \c false otherwise. */
   inline bool IsZero (void) const
   {
     return m_data == 0;
   }
-  /** \return true if the time is negative or zero, false otherwise. */
+  /** \return \c true if the time is negative or zero, \c false otherwise. */
   inline bool IsNegative (void) const
   {
     return m_data <= 0;
   }
-  /** \return true if the time is positive or zero, false otherwise. */
+  /** \return \c true if the time is positive or zero, \c false otherwise. */
   inline bool IsPositive (void) const
   {
     return m_data >= 0;
   }
-  /** \return true if the time is strictly negative, false otherwise. */
+  /** \return \c true if the time is strictly negative, \c false otherwise. */
   inline bool IsStrictlyNegative (void) const
   {
     return m_data < 0;
   }
-  /** \return true if the time is strictly positive, false otherwise. */
+  /** \return \c true if the time is strictly positive, \c false otherwise. */
   inline bool IsStrictlyPositive (void) const
   {
     return m_data > 0;
@@ -309,11 +307,20 @@
   }
 
   /**
+   * \name Convert to Number in a Unit.
+   * Convert a Time to number, in indicated units.
+   *
+   * Conversions to seconds and larger will return doubles, with
+   * possible loss of precision.  Conversions to units smaller than
+   * seconds will by rounded.
+   *
+   * @{
+   */
+  /**
    * Get an approximation of the time stored in this instance
    * in the indicated unit.
    *
    * \return An approximate value in the indicated unit.
-   * @{
    */
   inline double GetYears (void) const
   {
@@ -358,9 +365,15 @@
   /**@}*/
 
   /**
-   * \returns the raw time value, in the current unit
+   * \name Convert to Raw Value.
+   * Convert a Time to a number in the current resolution units.
+   *
    * @{
    */
+  /**
+   * Get the raw time value, in the current resolution unit.
+   * \returns The raw time value
+   */
   inline int64_t GetTimeStep (void) const
   {
     return m_data;
@@ -377,7 +390,7 @@
 
 
   /**
-   * \param resolution the new resolution to use
+   * \param [in] resolution The new resolution to use
    *
    * Change the global resolution used to convert all
    * user-provided time values in Time objects and Time objects
@@ -385,7 +398,7 @@
    */
   static void SetResolution (enum Unit resolution);
   /**
-   * \returns the current global resolution.
+   * \returns The current global resolution.
    */
   static enum Unit GetResolution (void);
 
@@ -401,12 +414,17 @@
     return Time (value);
   }
   /**
+   * \name Create Times from Values and Units.
+   * Create Times from values given in the indicated units.
+   *
+   * @{
+   */
+  /**
    *  Create a Time equal to \p value  in unit \c unit
    *
    *  \param [in] value The new Time value, expressed in \c unit
    *  \param [in] unit The unit of \p value
    *  \return The Time representing \p value in \c unit
-   *  @{
    */
   inline static Time FromInteger (uint64_t value, enum Unit unit)
   {
@@ -443,13 +461,18 @@
   }
   /**@}*/
 
-  
+
+  /**
+   * \name Get Times as Numbers in Specified Units
+   * Get the Time as integers or doubles in the indicated unit.
+   *
+   * @{
+   */
   /**
    *  Get the Time value expressed in a particular unit.
    *
    *  \param [in] unit The desired unit
    *  \return The Time expressed in \p unit
-   *  @{
    */
   inline int64_t ToInteger (enum Unit unit) const
   {
@@ -503,20 +526,11 @@
    * \endcode
    * will print ``+3140.0ms``
    *
-   * \param unit [in] The unit to use.
+   * \param [in] unit The unit to use.
    * \return The Time with embedded unit.
    */
   TimeWithUnit As (const enum Unit unit) const;
 
-  /**
-   * TracedValue callback signature for Time
-   *
-   * \param [in] oldValue original value of the traced variable
-   * \param [in] newValue new value of the traced variable
-   */
-  typedef void (* TracedValueCallback)(const Time oldValue,
-                                       const Time newValue);
-  
 private:
   /** How to convert between other units and the current unit. */
   struct Information
@@ -548,7 +562,7 @@
    *  Get the Information record for \p timeUnit for the current Resolution
    *
    *  \param [in] timeUnit The Unit to get Information for
-   *  \return the Information for \p timeUnit
+   *  \return The Information for \p timeUnit
    */
   static inline struct Information *PeekInformation (enum Unit timeUnit)
   {
@@ -610,7 +624,7 @@
   /**
    *  Function to force static initialization of Time.
    *
-   * \return true on the first call
+   * \return \c true on the first call
    */
   static bool StaticInit ();
 private:
@@ -642,11 +656,15 @@
    */
   static void ConvertTimes (const enum Unit unit);
 
+  /*
+   * \name Arithmetic Operators
+   * Arithmetic operators between Times, and scaling by scalars.
+   */
   /**
-   *  @{
+   * @{
    *  Arithmetic operator.
    *  \param [in] lhs Left hand argument
-   *  \param [in] rhs Righ hand argument
+   *  \param [in] rhs Right hand argument
    *  \return The result of the operator.
    */
   friend bool operator == (const Time & lhs, const Time & rhs);
@@ -663,26 +681,26 @@
   friend Time operator / (const Time & lhs, const int64_t & rhs);
   friend Time & operator += (Time & lhs, const Time & rhs);
   friend Time & operator -= (Time & lhs, const Time & rhs);
-  /**@}*/
-  
+  /** @} */
+
   /**
    *  Absolute value function for Time
-   *  \param time the input value
-   *  \returns the absolute value of the input value.
+   *  \param [in] time The input value
+   *  \returns The absolute value of the input value.
    */
   friend Time Abs (const Time & time);
   /**
    *  Max function for Time.
-   *  \param ta the first value
-   *  \param tb the seconds value
-   *  \returns the max of the two input values.
+   *  \param [in] ta The first value
+   *  \param [in] tb The seconds value
+   *  \returns The max of the two input values.
    */
   friend Time Max (const Time & ta, const Time & tb);
   /**
    *  Min function for Time.
-   *  \param ta the first value
-   *  \param tb the seconds value
-   *  \returns the min of the two input values.
+   *  \param [in] ta The first value
+   *  \param [in] tb The seconds value
+   *  \returns The min of the two input values.
    */
   friend Time Min (const Time & ta, const Time & tb);
 
@@ -690,6 +708,17 @@
 
 };  // class Time
 
+namespace TracedValueCallback {
+  
+  /**
+   * TracedValue callback signature for Time
+   *
+   * \param [in] oldValue Original value of the traced variable
+   * \param [in] newValue New value of the traced variable
+   */
+  typedef void (* Time)(Time oldValue, Time newValue);
+  
+}  // namespace TracedValueCallback
 
 /// Force static initialization of Time
 static bool NS_UNUSED_GLOBAL (g_TimeStaticInit) = Time::StaticInit ();
@@ -769,7 +798,7 @@
   lhs.m_data -= rhs.m_data;
   return lhs;
 }
-
+/**@}*/
   
 inline Time Abs (const Time & time)
 {
@@ -796,7 +825,7 @@
  * The stream `width` and `precision` are ignored; Time output always
  * includes ".0".
  *
- * \param [in] os The output stream.
+ * \param [in,out] os The output stream.
  * \param [in] time The Time to put on the stream.
  * \return The stream.
  */
@@ -807,7 +836,7 @@
  *
  * Uses the Time::Time (const std::string &) constructor
  *
- * \param [in] is The input stream.
+ * \param [in,out] is The input stream.
  * \param [out] time The Time variable to set from the stream data.
  * \return The stream.
  */
@@ -827,7 +856,7 @@
 /**
  * \ingroup timecivil
  * Construct a Time in the indicated unit.
- * \param value The value
+ * \param [in] value The value
  * \return The Time
  * @{
  */
@@ -935,7 +964,7 @@
  *
  *  \param [in] min Minimum allowed value.
  *  \param [in] max Maximum allowed value.
- *  \return the AttributeChecker
+ *  \return The AttributeChecker
  */
 Ptr<const AttributeChecker> MakeTimeChecker (const Time min, const Time max);
 
@@ -943,7 +972,7 @@
  * \ingroup time
  * \brief Helper to make an unbounded Time checker.
  *
- * \return the AttributeChecker
+ * \return The AttributeChecker
  */
 inline
 Ptr<const AttributeChecker> MakeTimeChecker (void)
@@ -956,7 +985,7 @@
  * \brief Helper to make a Time checker with a lower bound.
  *
  *  \param [in] min Minimum allowed value.
- * \return the AttributeChecker
+ * \return The AttributeChecker
  */
 inline
 Ptr<const AttributeChecker> MakeTimeChecker (const Time min)
@@ -988,7 +1017,7 @@
 
   /**
    *  Output streamer
-   *  \param [in] os The stream.
+   *  \param [in,out] os The stream.
    *  \param [in] timeU The Time with desired unit
    *  \returns The stream.
    */
diff -Naur ns-3.23/src/core/model/object-base.cc ns-3.24/src/core/model/object-base.cc
--- ns-3.23/src/core/model/object-base.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/object-base.cc	2015-09-15 11:18:44.000000000 -0700
@@ -53,6 +53,7 @@
   NS_LOG_FUNCTION_NOARGS ();
   TypeId tid = TypeId ("ns3::ObjectBase");
   tid.SetParent (tid);
+  tid.SetGroupName ("Core");
   return tid;
 }
 
diff -Naur ns-3.23/src/core/model/object-base.h ns-3.24/src/core/model/object-base.h
--- ns-3.23/src/core/model/object-base.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/object-base.h	2015-09-15 11:18:44.000000000 -0700
@@ -149,9 +149,9 @@
    *
    * The target trace source should be registered with TypeId::AddTraceSource.
    *
-   * \param name The name of the target trace source.
-   * \param context The trace context associated to the callback.
-   * \param cb The callback to connect to the trace source.
+   * \param [in] name The name of the target trace source.
+   * \param [in] context The trace context associated to the callback.
+   * \param [in] cb The callback to connect to the trace source.
    * \returns \c true.
    */
   bool TraceConnect (std::string name, std::string context, const CallbackBase &cb);
@@ -160,8 +160,8 @@
    *
    * The target trace source should be registered with TypeId::AddTraceSource.
    *
-   * \param name The name of the target trace source.
-   * \param cb The callback to connect to the trace source.
+   * \param [in] name The name of the target trace source.
+   * \param [in] cb The callback to connect to the trace source.
    * \returns \c true.
    */
   bool TraceConnectWithoutContext (std::string name, const CallbackBase &cb);
@@ -171,9 +171,9 @@
    *
    * The target trace source should be registered with TypeId::AddTraceSource.
    *
-   * \param name The name of the target trace source.
-   * \param context The trace context associated to the callback.
-   * \param cb The callback to disconnect from the trace source.
+   * \param [in] name The name of the target trace source.
+   * \param [in] context The trace context associated to the callback.
+   * \param [in] cb The callback to disconnect from the trace source.
    * \returns \c true.
    */
   bool TraceDisconnect (std::string name, std::string context, const CallbackBase &cb);
@@ -183,8 +183,8 @@
    *
    * The target trace source should be registered with TypeId::AddTraceSource.
    *
-   * \param name The name of the target trace source.
-   * \param cb The callback to disconnect from the trace source.
+   * \param [in] name The name of the target trace source.
+   * \param [in] cb The callback to disconnect from the trace source.
    * \returns \c true.
    */
   bool TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb);
@@ -209,7 +209,7 @@
    * you should make sure that you invoke this method from
    * your most-derived constructor.
    *
-   * \param attributes The attribute values used to initialize 
+   * \param [in] attributes The attribute values used to initialize 
    *        the member variables of this object's instance.
    */
   void ConstructSelf (const AttributeConstructionList &attributes);
diff -Naur ns-3.23/src/core/model/object-factory.h ns-3.24/src/core/model/object-factory.h
--- ns-3.23/src/core/model/object-factory.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/object-factory.h	2015-09-15 11:18:44.000000000 -0700
@@ -57,7 +57,7 @@
   /**
    * Construct a factory for a specific TypeId by name.
    *
-   * \param typeId The name of the TypeId this factory should create.
+   * \param [in] typeId The name of the TypeId this factory should create.
    */
   ObjectFactory (std::string typeId);
 
@@ -65,7 +65,7 @@
   /**
    * Set the TypeId of the Objects to be created by this factory.
    *
-   * \param tid The TypeId of the object to instantiate.
+   * \param [in] tid The TypeId of the object to instantiate.
    */
   void SetTypeId (TypeId tid);
   void SetTypeId (const char *tid);
@@ -75,8 +75,8 @@
   /**
    * Set an attribute to be set during construction.
    *
-   * \param name The name of the attribute to set.
-   * \param value The value of the attribute to set.
+   * \param [in] name The name of the attribute to set.
+   * \param [in] value The value of the attribute to set.
    */
   void Set (std::string name, const AttributeValue &value);
 
@@ -99,7 +99,7 @@
    * returning a pointer of the requested type to the user. This method
    * is really syntactical sugar.
    *
-   * \tparam T The requested Object type.
+   * \tparam T \explicit The requested Object type.
    * \returns A new object instance.
    */
   template <typename T>
@@ -112,7 +112,7 @@
    * The configuration will be printed as a string with the form
    * "<TypeId-name>[<attribute-name>=<attribute-value>|...]"
    *
-   * \param [in] os The stream.
+   * \param [in,out] os The stream.
    * \param [in] factory The ObjectFactory.
    * \returns The stream.
    */
@@ -123,7 +123,7 @@
    * The configuration should be in the form
    * "<TypeId-name>[<attribute-name>=<attribute-value>|...]"
    *
-   * \param [in] is The input stream.
+   * \param [in,out] is The input stream.
    * \param [out] factory The factory to configure as described by the stream.
    * \return The stream.
    */
@@ -146,38 +146,40 @@
  * \ingroup object
  * Allocate an Object on the heap and initialize with a set of attributes.
  *
- * \tparam T The requested Object type.
- * \param n1 Name of attribute
- * \param v1 Value of attribute
- * \param n2 Name of attribute
- * \param v2 Value of attribute
- * \param n3 Name of attribute
- * \param v3 Value of attribute
- * \param n4 Name of attribute
- * \param v4 Value of attribute
- * \param n5 Name of attribute
- * \param v5 Value of attribute
- * \param n6 Name of attribute
- * \param v6 Value of attribute
- * \param n7 Name of attribute
- * \param v7 Value of attribute
- * \param n8 Name of attribute
- * \param v8 Value of attribute
- * \param n9 Name of attribute
- * \param v9 Value of attribute
+ * \tparam T \explicit The requested Object type.
+ * \param [in] n1 Name of attribute
+ * \param [in] v1 Value of attribute
+ * \param [in] n2 Name of attribute
+ * \param [in] v2 Value of attribute
+ * \param [in] n3 Name of attribute
+ * \param [in] v3 Value of attribute
+ * \param [in] n4 Name of attribute
+ * \param [in] v4 Value of attribute
+ * \param [in] n5 Name of attribute
+ * \param [in] v5 Value of attribute
+ * \param [in] n6 Name of attribute
+ * \param [in] v6 Value of attribute
+ * \param [in] n7 Name of attribute
+ * \param [in] v7 Value of attribute
+ * \param [in] n8 Name of attribute
+ * \param [in] v8 Value of attribute
+ * \param [in] n9 Name of attribute
+ * \param [in] v9 Value of attribute
  * \returns A pointer to a newly allocated object.
  */
 template <typename T>
 Ptr<T> 
-CreateObjectWithAttributes (std::string n1 = "", const AttributeValue & v1 = EmptyAttributeValue (),
-                            std::string n2 = "", const AttributeValue & v2 = EmptyAttributeValue (),
-                            std::string n3 = "", const AttributeValue & v3 = EmptyAttributeValue (),
-                            std::string n4 = "", const AttributeValue & v4 = EmptyAttributeValue (),
-                            std::string n5 = "", const AttributeValue & v5 = EmptyAttributeValue (),
-                            std::string n6 = "", const AttributeValue & v6 = EmptyAttributeValue (),
-                            std::string n7 = "", const AttributeValue & v7 = EmptyAttributeValue (),
-                            std::string n8 = "", const AttributeValue & v8 = EmptyAttributeValue (),
-                            std::string n9 = "", const AttributeValue & v9 = EmptyAttributeValue ());
+CreateObjectWithAttributes
+  (std::string n1 = "", const AttributeValue & v1 = EmptyAttributeValue (),
+   std::string n2 = "", const AttributeValue & v2 = EmptyAttributeValue (),
+   std::string n3 = "", const AttributeValue & v3 = EmptyAttributeValue (),
+   std::string n4 = "", const AttributeValue & v4 = EmptyAttributeValue (),
+   std::string n5 = "", const AttributeValue & v5 = EmptyAttributeValue (),
+   std::string n6 = "", const AttributeValue & v6 = EmptyAttributeValue (),
+   std::string n7 = "", const AttributeValue & v7 = EmptyAttributeValue (),
+   std::string n8 = "", const AttributeValue & v8 = EmptyAttributeValue (),
+   std::string n9 = "", const AttributeValue & v9 = EmptyAttributeValue ()
+   );
 
 
 ATTRIBUTE_HELPER_HEADER (ObjectFactory);
diff -Naur ns-3.23/src/core/model/object.h ns-3.24/src/core/model/object.h
--- ns-3.23/src/core/model/object.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/object.h	2015-09-15 11:18:44.000000000 -0700
@@ -155,9 +155,9 @@
   template <typename T>
   inline Ptr<T> GetObject (void) const;
   /**
-   * Get a pointer to the requested aggregated Object.
+   * Get a pointer to the requested aggregated Object by TypeId.
    * 
-   * \param tid The TypeId of the requested Object.
+   * \param [in] tid The TypeId of the requested Object.
    * \returns A pointer to the requested Object, or zero
    *          if it could not be found.
    */
@@ -181,7 +181,7 @@
   /**
    * Aggregate two Objects together.
    *
-   * \param other The other Object pointer
+   * \param [in] other The other Object pointer
    *
    * This method aggregates the two Objects together: after this
    * method returns, it becomes possible to call GetObject()
@@ -265,7 +265,7 @@
   /**
    * Copy an Object.
    *
-   * \param o the Object to copy.
+   * \param [in] o the Object to copy.
    *
    * Allow subclasses to implement a copy constructor.
    *
@@ -275,9 +275,9 @@
    * to understand that this copy constructor will _not_
    * copy aggregated Objects, _i.e_, if your Object instance
    * is already aggregated to another Object and if you invoke
-   * this copy constructor, the new )bject instance will be
+   * this copy constructor, the new Object instance will be
    * a pristine standalone Object instance not aggregated to
-   * any other )bject. It is thus _your_ responsability
+   * any other Object. It is thus _your_ responsibility
    * as a caller of this method to do what needs to be done
    * (if it is needed) to ensure that the Object stays in a
    * valid state.
@@ -289,7 +289,7 @@
   /**
    * Copy an Object.
    *
-   * \param object A pointer to the object to copy.
+   * \param [in] object A pointer to the object to copy.
    * \returns A copy of the input object.
    *
    * This method invoke the copy constructor of the input object
@@ -305,7 +305,7 @@
   /**
    * Set the TypeId and construct all Attributes of an Object.
    *
-   * \tparam T The type of the derived object we are constructing.
+   * \tparam T \explicit The type of the derived object we are constructing.
    * \param [in] object The uninitialized object pointer.
    * \return The derived object.
    */
@@ -338,7 +338,7 @@
   /**
    * Find an Object of TypeId tid in the aggregates of this Object.
    *
-   * \param tid The TypeId we're looking for
+   * \param [in] tid The TypeId we're looking for
    * \return The matching Object, if it is found
    */
   Ptr<Object> DoGetObject (TypeId tid) const;
@@ -363,7 +363,7 @@
   /**
    * Set the TypeId of this Object.
    
-   * \param tid The TypeId value to set.
+   * \param [in] tid The TypeId value to set.
    *
    * Invoked from ns3::CreateObject only.
    * Initialize the \c m_tid member variable to
@@ -373,7 +373,7 @@
   /**
    * Initialize all member variables registered as Attributes of this TypeId.
    *
-   * \param attributes The attribute values used to initialize
+   * \param [in] attributes The attribute values used to initialize
    *        the member variables of this Object's instance.
    *
    * Invoked from ns3::ObjectFactory::Create and ns3::CreateObject only.
@@ -385,8 +385,8 @@
   /**
    * Keep the list of aggregates in most-recently-used order
    *
-   * \param aggregates The list of aggregated Objects.
-   * \param i The most recently used entry in the list.
+   * \param [in,out] aggregates The list of aggregated Objects.
+   * \param [in] i The most recently used entry in the list.
    */
   void UpdateSortedArray (struct Aggregates *aggregates, uint32_t i) const;
   /**
@@ -517,7 +517,7 @@
 /**
  * Create an object by type, with varying number of constructor parameters.
  *
- * \tparam T The type of the derived object to construct.
+ * \tparam T \explicit The type of the derived object to construct.
  * \return The derived object.
  */
 template <typename T>
@@ -527,9 +527,9 @@
 }
 /**
  * \copybrief CreateObject()
- * \tparam T The type of the derived object to construct.
- * \tparam T1 The type of the constructor argument.
- * \param a1 The constructor argument
+ * \tparam T \explicit The type of the derived object to construct.
+ * \tparam T1 \deduced The type of the constructor argument.
+ * \param [in] a1 The constructor argument
  * \return The derived object.
  */
 template <typename T, typename T1>
@@ -540,11 +540,11 @@
 
 /**
  * \copybrief CreateObject()
- * \tparam T The type of the derived object to construct.
- * \tparam T1 The type of the first constructor argument.
- * \tparam T2 The type of the second constructor argument.
- * \param a1 The constructor first argument
- * \param a2 The constructor second argument
+ * \tparam T \explicit The type of the derived object to construct.
+ * \tparam T1 \deduced The type of the first constructor argument.
+ * \tparam T2 \deduced The type of the second constructor argument.
+ * \param [in] a1 The constructor first argument
+ * \param [in] a2 The constructor second argument
  * \return The derived object.
  */
 template <typename T, typename T1, typename T2>
@@ -555,13 +555,13 @@
 
 /**
  * \copybrief CreateObject()
- * \tparam T The type of the derived object to construct.
- * \tparam T1 The type of the first constructor argument.
- * \tparam T2 The type of the second constructor argument.
- * \tparam T3 The type of the third constructor argument.
- * \param a1 The constructor first argument
- * \param a2 The constructor second argument
- * \param a3 The constructor third argument
+ * \tparam T \explicit The type of the derived object to construct.
+ * \tparam T1 \deduced The type of the first constructor argument.
+ * \tparam T2 \deduced The type of the second constructor argument.
+ * \tparam T3 \deduced The type of the third constructor argument.
+ * \param [in] a1 The constructor first argument
+ * \param [in] a2 The constructor second argument
+ * \param [in] a3 The constructor third argument
  * \return The derived object.
  */
 template <typename T, typename T1, typename T2, typename T3>
@@ -572,15 +572,15 @@
 
 /**
  * \copybrief CreateObject()
- * \tparam T The type of the derived object to construct.
- * \tparam T1 The type of the first constructor argument.
- * \tparam T2 The type of the second constructor argument.
- * \tparam T3 The type of the third constructor argument.
- * \tparam T4 The type of the fourth constructor argument.
- * \param a1 The constructor first argument
- * \param a2 The constructor second argument
- * \param a3 The constructor third argument
- * \param a4 The constructor fourth argument
+ * \tparam T \explicit The type of the derived object to construct.
+ * \tparam T1 \deduced The type of the first constructor argument.
+ * \tparam T2 \deduced The type of the second constructor argument.
+ * \tparam T3 \deduced The type of the third constructor argument.
+ * \tparam T4 \deduced The type of the fourth constructor argument.
+ * \param [in] a1 The constructor first argument
+ * \param [in] a2 The constructor second argument
+ * \param [in] a3 The constructor third argument
+ * \param [in] a4 The constructor fourth argument
  * \return The derived object.
  */
 template <typename T, typename T1, typename T2, typename T3, typename T4>
@@ -591,17 +591,17 @@
 
 /**
  * \copybrief CreateObject()
- * \tparam T The type of the derived object to construct.
- * \tparam T1 The type of the first constructor argument.
- * \tparam T2 The type of the second constructor argument.
- * \tparam T3 The type of the third constructor argument.
- * \tparam T4 The type of the fourth constructor argument.
- * \tparam T5 The type of the fifth constructor argument.
- * \param a1 The constructor first argument
- * \param a2 The constructor second argument
- * \param a3 The constructor third argument
- * \param a4 The constructor fourth argument
- * \param a5 The constructor fifth argument
+ * \tparam T \explicit The type of the derived object to construct.
+ * \tparam T1 \deduced The type of the first constructor argument.
+ * \tparam T2 \deduced The type of the second constructor argument.
+ * \tparam T3 \deduced The type of the third constructor argument.
+ * \tparam T4 \deduced The type of the fourth constructor argument.
+ * \tparam T5 \deduced The type of the fifth constructor argument.
+ * \param [in] a1 The constructor first argument
+ * \param [in] a2 The constructor second argument
+ * \param [in] a3 The constructor third argument
+ * \param [in] a4 The constructor fourth argument
+ * \param [in] a5 The constructor fifth argument
  * \return The derived object.
  */
 template <typename T, typename T1, typename T2, typename T3, typename T4, typename T5>
@@ -612,19 +612,19 @@
 
 /**
  * \copybrief CreateObject()
- * \tparam T The type of the derived object to construct.
- * \tparam T1 The type of the first constructor argument.
- * \tparam T2 The type of the second constructor argument.
- * \tparam T3 The type of the third constructor argument.
- * \tparam T4 The type of the fourth constructor argument.
- * \tparam T5 The type of the fifth constructor argument.
- * \tparam T6 The type of the sixth constructor argument.
- * \param a1 The constructor first argument
- * \param a2 The constructor second argument
- * \param a3 The constructor third argument
- * \param a4 The constructor fourth argument
- * \param a5 The constructor fifth argument
- * \param a6 The constructor sixth argument
+ * \tparam T \explicit The type of the derived object to construct.
+ * \tparam T1 \deduced The type of the first constructor argument.
+ * \tparam T2 \deduced The type of the second constructor argument.
+ * \tparam T3 \deduced The type of the third constructor argument.
+ * \tparam T4 \deduced The type of the fourth constructor argument.
+ * \tparam T5 \deduced The type of the fifth constructor argument.
+ * \tparam T6 \deduced The type of the sixth constructor argument.
+ * \param [in] a1 The constructor first argument
+ * \param [in] a2 The constructor second argument
+ * \param [in] a3 The constructor third argument
+ * \param [in] a4 The constructor fourth argument
+ * \param [in] a5 The constructor fifth argument
+ * \param [in] a6 The constructor sixth argument
  * \return The derived object.
  */
 template <typename T, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
@@ -635,21 +635,21 @@
 
 /**
  * \copybrief CreateObject()
- * \tparam T The type of the derived object to construct.
- * \tparam T1 The type of the first constructor argument.
- * \tparam T2 The type of the second constructor argument.
- * \tparam T3 The type of the third constructor argument.
- * \tparam T4 The type of the fourth constructor argument.
- * \tparam T5 The type of the fifth constructor argument.
- * \tparam T6 The type of the sixth constructor argument.
- * \tparam T7 The type of the seventh constructor argument.
- * \param a1 The constructor first argument
- * \param a2 The constructor second argument
- * \param a3 The constructor third argument
- * \param a4 The constructor fourth argument
- * \param a5 The constructor fifth argument
- * \param a6 The constructor sixth argument
- * \param a7 The constructor seventh argument
+ * \tparam T \explicit The type of the derived object to construct.
+ * \tparam T1 \deduced The type of the first constructor argument.
+ * \tparam T2 \deduced The type of the second constructor argument.
+ * \tparam T3 \deduced The type of the third constructor argument.
+ * \tparam T4 \deduced The type of the fourth constructor argument.
+ * \tparam T5 \deduced The type of the fifth constructor argument.
+ * \tparam T6 \deduced The type of the sixth constructor argument.
+ * \tparam T7 \deduced The type of the seventh constructor argument.
+ * \param [in] a1 The constructor first argument
+ * \param [in] a2 The constructor second argument
+ * \param [in] a3 The constructor third argument
+ * \param [in] a4 The constructor fourth argument
+ * \param [in] a5 The constructor fifth argument
+ * \param [in] a6 The constructor sixth argument
+ * \param [in] a7 The constructor seventh argument
  * \return The derived object.
  */
 template <typename T, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
diff -Naur ns-3.23/src/core/model/object-ptr-container.h ns-3.24/src/core/model/object-ptr-container.h
--- ns-3.23/src/core/model/object-ptr-container.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/object-ptr-container.h	2015-09-15 11:18:44.000000000 -0700
@@ -72,7 +72,7 @@
   /**
    * Get a specific Object.
    *
-   * \param i The index of the requested object.
+   * \param [in] i The index of the requested object.
    * \returns The requested object
    */
   Ptr<Object> Get (uint32_t i) const;
@@ -88,15 +88,15 @@
    *
    * Note this serializes the Ptr values, not the Objects themselves.
    *
-   * \param checker The checker to use (currently not used.)
+   * \param [in] checker The checker to use (currently not used.)
    * \returns The string form of the Objects.
    */
   virtual std::string SerializeToString (Ptr<const AttributeChecker> checker) const;
   /**
    * Deserialize from a string. (Not implemented; raises a fatal error.)
    *
-   * \param value The serialized string form.
-   * \param checker The checker to use.
+   * \param [in] value The serialized string form.
+   * \param [in] checker The checker to use.
    * \returns \c true.
    */
   virtual bool DeserializeFromString (std::string value, Ptr<const AttributeChecker> checker);
@@ -113,9 +113,9 @@
  *
  * The two versions of this function differ only in argument order.
  *
- * \tparam T The container class type.
- * \tparam U The type of object the get method returns.
- * \tparam INDEX The type of the index variable.
+ * \tparam T \deduced The container class type.
+ * \tparam U \deduced The type of object the get method returns.
+ * \tparam INDEX \deduced The type of the index variable.
  * \param [in] get The class method to get a specific instance
  *             from the container.
  * \param [in] getN The class method to return the number of objects
@@ -133,9 +133,9 @@
  *
  * The two versions of this function differ only in argument order.
  *
- * \tparam T The container class type.
- * \tparam U The type of object the get method returns.
- * \tparam INDEX The type of the index variable.
+ * \tparam T \deduced The container class type.
+ * \tparam U \deduced The type of object the get method returns.
+ * \tparam INDEX \deduced The type of the index variable.
  * \param [in] get The class method to get a specific instance
  *             from the container.
  * \param [in] getN The class method to return the number of objects
diff -Naur ns-3.23/src/core/model/pointer.h ns-3.24/src/core/model/pointer.h
--- ns-3.23/src/core/model/pointer.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/pointer.h	2015-09-15 11:18:44.000000000 -0700
@@ -61,13 +61,16 @@
   /**
    * Construct this PointerValue by referencing an explicit Object.
    *
-   * \tparam T (implicit) The type of the object.
+   * \tparam T \deduced The type of the object.
    * \param [in] object The object to begin with.
    */
   template <typename T>
   PointerValue (const Ptr<T> & object);
 
-  /** Cast to an Object of type \c T. */ 
+  /**
+   * Cast to an Object of type \c T.
+   * \tparam T \explicit The type to cast to.
+   */ 
   template <typename T>
   operator Ptr<T> () const;
 
@@ -75,6 +78,7 @@
   template <typename T>
   void Set (const Ptr<T> & value);
 
+  /** \tparam T \explicit The type to cast to. */
   template <typename T>
   Ptr<T> Get (void) const;
 
@@ -100,6 +104,12 @@
    */
   virtual TypeId GetPointeeTypeId (void) const = 0;
 };
+  
+/**
+ * Create a PointerChecker for a type.
+ * \tparam T \explicit The underlying type.
+ * \returns The PointerChecker.
+ */
 template <typename T>
 Ptr<AttributeChecker> MakePointerChecker (void);
 
diff -Naur ns-3.23/src/core/model/ptr.h ns-3.24/src/core/model/ptr.h
--- ns-3.23/src/core/model/ptr.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/ptr.h	2015-09-15 11:18:44.000000000 -0700
@@ -67,7 +67,7 @@
  * functions and their goal is just is save you a small
  * bit of typing.
  *
- * \tparam T The underlying type.
+ * \tparam T \explicit The underlying type.
  */
 template <typename T>
 class Ptr 
@@ -94,8 +94,8 @@
    * to returning to the caller so the caller is
    * responsible for calling Unref himself.
    *
-   * \param p smart pointer
-   * \return the pointer managed by this smart pointer.
+   * \param [in] p Smart pointer
+   * \return The pointer managed by this smart pointer.
    */
   template <typename U>
   friend U *GetPointer (const Ptr<U> &p);
@@ -106,8 +106,8 @@
    * to returning to the caller so the caller is not
    * responsible for calling Unref himself.
    *
-   * \param p smart pointer
-   * \return the pointer managed by this smart pointer.
+   * \param [in] p Smart pointer
+   * \return The pointer managed by this smart pointer.
    */
   template <typename U>
   friend U *PeekPointer (const Ptr<U> &p);
@@ -126,15 +126,15 @@
    * same, so that object is deleted if no more references to it
    * remain.
    *
-   * \param ptr raw pointer to manage
+   * \param [in] ptr Raw pointer to manage
    */
   Ptr (T *ptr);
   /**
    * Create a smart pointer which points to the object pointed to by
    * the input raw pointer ptr.
    *
-   * \param ptr raw pointer to manage
-   * \param ref if set to true, this method calls Ref, otherwise,
+   * \param [in] ptr Raw pointer to manage
+   * \param [in] ref if set to true, this method calls Ref, otherwise,
    *        it does not call Ref.
    */
   Ptr (T *ptr, bool ref);
@@ -147,7 +147,7 @@
   /**
    * Copy, removing \c const qualifier.
    *
-   * \tparam U The underlying type of the \c const object.
+   * \tparam U \deduced The underlying type of the \c const object.
    * \param [in] o The Ptr to copy.
    */
   template <typename U>
@@ -189,7 +189,7 @@
    *   Ptr<..> p = ...;
    *   if (!p) ...
    * \endcode
-   * \returns true if the underlying pointer is NULL.
+   * \returns \c true if the underlying pointer is NULL.
    */
   bool operator! ();
   /**
@@ -216,16 +216,16 @@
  */
 /** @{ */
 /**
- * \tparam T  The type of class object to create.
+ * \tparam T \explicit The type of class object to create.
  * \return A Ptr to the newly created \c T.
  */
 template <typename T>
 Ptr<T> Create (void);
 
 /**
- * \tparam T  The type of class object to create.
- * \tparam T1 The type of the first constructor argument.
- * \param  a1 The first constructor argument.
+ * \tparam T  \explicit The type of class object to create.
+ * \tparam T1 \deduced The type of the first constructor argument.
+ * \param  [in] a1 The first constructor argument.
  * \return A Ptr to the newly created \c T.
  */
 template <typename T,
@@ -233,11 +233,11 @@
 Ptr<T> Create (T1 a1);
 
 /**
- * \tparam T  The type of class object to create.
- * \tparam T1 The type of the first constructor argument.
- * \tparam T2 The type of the second constructor argument.
- * \param  a1 The first constructor argument.
- * \param  a2 The second constructor argument.
+ * \tparam T  \explicit The type of class object to create.
+ * \tparam T1 \deduced The type of the first constructor argument.
+ * \tparam T2 \deduced The type of the second constructor argument.
+ * \param  [in] a1 The first constructor argument.
+ * \param  [in] a2 The second constructor argument.
  * \return A Ptr to the newly created \c T.
  */
 template <typename T,
@@ -245,13 +245,13 @@
 Ptr<T> Create (T1 a1, T2 a2);
 
 /**
- * \tparam T  The type of class object to create.
- * \tparam T1 The type of the first constructor argument.
- * \tparam T2 The type of the second constructor argument.
- * \tparam T3 The type of the third constructor argument.
- * \param  a1 The first constructor argument.
- * \param  a2 The second constructor argument.
- * \param  a3 The third constructor argument.
+ * \tparam T  \explicit The type of class object to create.
+ * \tparam T1 \deduced The type of the first constructor argument.
+ * \tparam T2 \deduced The type of the second constructor argument.
+ * \tparam T3 \deduced The type of the third constructor argument.
+ * \param  [in] a1 The first constructor argument.
+ * \param  [in] a2 The second constructor argument.
+ * \param  [in] a3 The third constructor argument.
  * \return A Ptr to the newly created \c T.
  */
 template <typename T,
@@ -260,15 +260,15 @@
 Ptr<T> Create (T1 a1, T2 a2, T3 a3);
 
 /**
- * \tparam T  The type of class object to create.
- * \tparam T1 The type of the first constructor argument.
- * \tparam T2 The type of the second constructor argument.
- * \tparam T3 The type of the third constructor argument.
- * \tparam T4 The type of the fourth constructor argument.
- * \param  a1 The first constructor argument.
- * \param  a2 The second constructor argument.
- * \param  a3 The third constructor argument.
- * \param  a4 The fourth constructor argument.
+ * \tparam T  \explicit The type of class object to create.
+ * \tparam T1 \deduced The type of the first constructor argument.
+ * \tparam T2 \deduced The type of the second constructor argument.
+ * \tparam T3 \deduced The type of the third constructor argument.
+ * \tparam T4 \deduced The type of the fourth constructor argument.
+ * \param  [in] a1 The first constructor argument.
+ * \param  [in] a2 The second constructor argument.
+ * \param  [in] a3 The third constructor argument.
+ * \param  [in] a4 The fourth constructor argument.
  * \return A Ptr to the newly created \c T.
  */
 template <typename T,
@@ -277,17 +277,17 @@
 Ptr<T> Create (T1 a1, T2 a2, T3 a3, T4 a4);
 
 /**
- * \tparam T  The type of class object to create.
- * \tparam T1 The type of the first constructor argument.
- * \tparam T2 The type of the second constructor argument.
- * \tparam T3 The type of the third constructor argument.
- * \tparam T4 The type of the fourth constructor argument.
- * \tparam T5 The type of the fifth constructor argument.
- * \param  a1 The first constructor argument.
- * \param  a2 The second constructor argument.
- * \param  a3 The third constructor argument.
- * \param  a4 The fourth constructor argument.
- * \param  a5 The fifth constructor argument.
+ * \tparam T  \explicit The type of class object to create.
+ * \tparam T1 \deduced The type of the first constructor argument.
+ * \tparam T2 \deduced The type of the second constructor argument.
+ * \tparam T3 \deduced The type of the third constructor argument.
+ * \tparam T4 \deduced The type of the fourth constructor argument.
+ * \tparam T5 \deduced The type of the fifth constructor argument.
+ * \param  [in] a1 The first constructor argument.
+ * \param  [in] a2 The second constructor argument.
+ * \param  [in] a3 The third constructor argument.
+ * \param  [in] a4 The fourth constructor argument.
+ * \param  [in] a5 The fifth constructor argument.
  * \return A Ptr to the newly created \c T.
  */
 template <typename T,
@@ -297,19 +297,19 @@
 Ptr<T> Create (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
 
 /**
- * \tparam T  The type of class object to create.
- * \tparam T1 The type of the first constructor argument.
- * \tparam T2 The type of the second constructor argument.
- * \tparam T3 The type of the third constructor argument.
- * \tparam T4 The type of the fourth constructor argument.
- * \tparam T5 The type of the fifth constructor argument.
- * \tparam T6 The type of the sixth constructor argument.
- * \param  a1 The first constructor argument.
- * \param  a2 The second constructor argument.
- * \param  a3 The third constructor argument.
- * \param  a4 The fourth constructor argument.
- * \param  a5 The fifth constructor argument.
- * \param  a6 The sixth constructor argument.
+ * \tparam T  \explicit The type of class object to create.
+ * \tparam T1 \deduced The type of the first constructor argument.
+ * \tparam T2 \deduced The type of the second constructor argument.
+ * \tparam T3 \deduced The type of the third constructor argument.
+ * \tparam T4 \deduced The type of the fourth constructor argument.
+ * \tparam T5 \deduced The type of the fifth constructor argument.
+ * \tparam T6 \deduced The type of the sixth constructor argument.
+ * \param  [in] a1 The first constructor argument.
+ * \param  [in] a2 The second constructor argument.
+ * \param  [in] a3 The third constructor argument.
+ * \param  [in] a4 The fourth constructor argument.
+ * \param  [in] a5 The fifth constructor argument.
+ * \param  [in] a6 The sixth constructor argument.
  * \return A Ptr to the newly created \c T.
  */
 template <typename T,
@@ -319,21 +319,21 @@
 Ptr<T> Create (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6);
 
 /**
- * \tparam T  The type of class object to create.
- * \tparam T1 The type of the first constructor argument.
- * \tparam T2 The type of the second constructor argument.
- * \tparam T3 The type of the third constructor argument.
- * \tparam T4 The type of the fourth constructor argument.
- * \tparam T5 The type of the fifth constructor argument.
- * \tparam T6 The type of the sixth constructor argument.
- * \tparam T7 The type of the seventh constructor argument.
- * \param  a1 The first constructor argument.
- * \param  a2 The second constructor argument.
- * \param  a3 The third constructor argument.
- * \param  a4 The fourth constructor argument.
- * \param  a5 The fifth constructor argument.
- * \param  a6 The sixth constructor argument.
- * \param  a7 The seventh constructor argument.
+ * \tparam T  \explicit The type of class object to create.
+ * \tparam T1 \deduced The type of the first constructor argument.
+ * \tparam T2 \deduced The type of the second constructor argument.
+ * \tparam T3 \deduced The type of the third constructor argument.
+ * \tparam T4 \deduced The type of the fourth constructor argument.
+ * \tparam T5 \deduced The type of the fifth constructor argument.
+ * \tparam T6 \deduced The type of the sixth constructor argument.
+ * \tparam T7 \deduced The type of the seventh constructor argument.
+ * \param  [in] a1 The first constructor argument.
+ * \param  [in] a2 The second constructor argument.
+ * \param  [in] a3 The third constructor argument.
+ * \param  [in] a4 The fourth constructor argument.
+ * \param  [in] a5 The fifth constructor argument.
+ * \param  [in] a6 The sixth constructor argument.
+ * \param  [in] a7 The seventh constructor argument.
  * \return A Ptr to the newly created \c T.
  */
 template <typename T,
@@ -347,7 +347,7 @@
 /**
  * \ingroup ptr
  * Output streamer.
- * \param [in] os The output stream.
+ * \param [in,out] os The output stream.
  * \param [in] p The Ptr.
  * \returns The stream.
  */
@@ -368,11 +368,11 @@
  * Note that either \c p or \c q could also be ordinary pointers
  * to the underlying object.
  *
- * \tparam T1 Type of the object on the lhs.
- * \tparam T2 Type of the object on the rhs.
+ * \tparam T1 \deduced Type of the object on the lhs.
+ * \tparam T2 \deduced Type of the object on the rhs.
  * \param [in] lhs The left operand.
  * \param [in] rhs The right operand.
- * \return true if the operands point to the same underlying object.
+ * \return \c true if the operands point to the same underlying object.
  */
 /** @{ */
 template <typename T1, typename T2>
@@ -399,11 +399,11 @@
  * Note that either \c p or \c q could also be ordinary pointers
  * to the underlying object.
  *
- * \tparam T1 Type of the object on the lhs.
- * \tparam T2 Type of the object on the rhs.
+ * \tparam T1 \deduced Type of the object on the lhs.
+ * \tparam T2 \deduced Type of the object on the rhs.
  * \param [in] lhs The left operand.
  * \param [in] rhs The right operand.
- * \return true if the operands point to the same underlying object.
+ * \return \c true if the operands point to the same underlying object.
  */
 /** @{ */
 template <typename T1, typename T2>
@@ -440,9 +440,9 @@
  * Return a copy of \c p with its stored pointer const casted from
  * \c T2 to \c T1.
  *
- * \tparam T1 The type to return in a Ptr.
- * \tparam T2 The type of the underlying object.
- * \param p The original \c const Ptr.
+ * \tparam T1 \deduced The type to return in a Ptr.
+ * \tparam T2 \deduced The type of the underlying object.
+ * \param [in] p The original \c const Ptr.
  * \return A non-const Ptr.
  */
 template <typename T1, typename T2>
@@ -460,14 +460,14 @@
  *
  * This is the specialization for Ptr types.
  *
- * \tparam T The base object type.
+ * \tparam T \deduced The base object type.
  */
 template <typename T>
 struct CallbackTraits<Ptr<T> >
 {
   /**
-   * \param p object pointer
-   * \return a reference to the object pointed to by p
+   * \param [in] p Object pointer
+   * \return A reference to the object pointed to by p
    */
   static T & GetReference (Ptr<T> const p)
   {
@@ -485,14 +485,14 @@
  *
  * This is the specialization for Ptr types.
  *
- * \tparam T The class type.
+ * \tparam T \explicit The class type.
  */
 template <typename T>
 struct EventMemberImplObjTraits<Ptr<T> >
 {
   /**
-   * \param p object pointer
-   * \return a reference to the object pointed to by p
+   * \param [in] p Object pointer
+   * \return A reference to the object pointed to by p
    */
   static T &GetReference (Ptr<T> p) {
     return *PeekPointer (p);
@@ -647,9 +647,9 @@
 /**
  * Cast a Ptr.
  *
- * \tparam T1 The desired type to cast to.
- * \tparam T2 The type of the original Ptr.
- * \param p The original Ptr.
+ * \tparam T1 \deduced The desired type to cast to.
+ * \tparam T2 \deduced The type of the original Ptr.
+ * \param [in] p The original Ptr.
  * \return The result of the cast.
  */
 /** @{ */
@@ -678,7 +678,7 @@
 /**
  * Return a deep copy of a Ptr.
  *
- * \param object The object Ptr to copy.
+ * \param [in] object The object Ptr to copy.
  * \returns The copy.
  */
 /** @{ */
diff -Naur ns-3.23/src/core/model/random-variable-stream.h ns-3.24/src/core/model/random-variable-stream.h
--- ns-3.23/src/core/model/random-variable-stream.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/random-variable-stream.h	2015-09-15 11:18:44.000000000 -0700
@@ -31,6 +31,12 @@
 #include "attribute-helper.h"
 #include <stdint.h>
 
+/**
+ * \file
+ * \ingroup randomvariable
+ * Declaration of ns3::RandomVariableStream and derivatives.
+ */
+
 namespace ns3 {
 
 /**
@@ -67,13 +73,13 @@
 
 /**
  * \ingroup randomvariable
- * \brief The Random Number Generator (RNG) that allows stream numbers to be set deterministically.
+ * \brief The basic uniform Random Number Generator (RNG).
  *
- * Note: The underlying random number generation method used
- * by NS-3 is the RngStream code by Pierre L'Ecuyer at
+ * \note The underlying random number generation method used
+ * by ns-3 is the RngStream code by Pierre L'Ecuyer at
  * the University of Montreal.
  *
- * NS-3 has a rich set of random number generators that allow stream
+ * ns-3 has a rich set of random number generators that allow stream
  * numbers to be set deterministically if desired.  Class
  * RandomVariableStream defines the base class functionalty required
  * for all such random number generators.
@@ -83,6 +89,10 @@
  * \ref GlobalValueRngSeed "RngSeed" and \ref GlobalValueRngRun
  * "RngRun".  Also by default, the stream number value for this RNG
  * stream is automatically allocated.
+ *
+ * Instances can be configured to return "antithetic" values.
+ * See the documentation for the specific distributions to see
+ * how this modifies the returned values.
  */
 class RandomVariableStream : public Object
 {
@@ -92,80 +102,106 @@
    * \return The object TypeId.
    */
   static TypeId GetTypeId (void);
+  /**
+   * \brief Default constructor.
+   */
   RandomVariableStream ();
+  /**
+   * \brief Destructor.
+   */
   virtual ~RandomVariableStream();
 
   /**
    * \brief Specifies the stream number for this RNG stream.
-   * \param stream The stream number for this RNG stream. -1 means "allocate a stream number automatically".
- */
+   * \param [in] stream The stream number for this RNG stream.
+   * -1 means "allocate a stream number automatically".
+   */
   void SetStream (int64_t stream);
 
   /**
    * \brief Returns the stream number for this RNG stream.
-   * \return The stream number for this RNG stream. -1 means "allocate a stream number automatically".
+   * \return The stream number for this RNG stream.
+   * -1 means this stream was allocated automatically.
    */
   int64_t GetStream(void) const;
 
   /**
-   * \brief Specifies whether antithetic values should be generated.
-   * \param isAntithetic Set equal to true if antithetic values should
-   * be generated by this RNG stream.
+   * \brief Specify whether antithetic values should be generated.
+   * \param [in] isAntithetic If \c true antithetic value will be generated.
    */
   void SetAntithetic(bool isAntithetic);
 
   /**
-   * \brief Returns true if antithetic values should be generated.
-   * \return A bool value that indicates if antithetic values should
-   * be generated by this RNG stream.
+   * \brief Check if antithetic values will be generated.
+   * \return \c true if antithetic values will be generated.
    */
   bool IsAntithetic(void) const;
 
   /**
-   * \brief Returns a random double from the underlying distribution
+   * \brief Get the next random value as a double drawn from the distribution.
    * \return A floating point random value.
    */
   virtual double GetValue (void) = 0;
 
   /**
-   * \brief Returns a random integer integer from the underlying distribution
-   * \return  Integer cast of RandomVariableStream::GetValue
+   * \brief Get the next random value as an integer drawn from the distribution.
+   * \return  An integer random value.
    */
   virtual uint32_t GetInteger (void) = 0;
 
 protected:
   /**
-   * \brief Returns a pointer to the underlying RNG stream.
+   * \brief Get the pointer to the underlying RNG stream.
    */
   RngStream *Peek(void) const;
 
 private:
-  // you can't copy these objects.
-  // Theoretically, it is possible to give them good copy semantics
-  // but not enough time to iron out the details.
+  /**
+   * Copy constructor.  These objects are not copyable.
+   *
+   * \param [in] o The RandomVariableStream to copy in construction.
+   * \internal
+   * Theoretically, it is possible to give them good copy semantics
+   * but not enough time to iron out the details.
+   */
   RandomVariableStream (const RandomVariableStream &o);
+  /**
+   * Assignment operator.  These objects can't be copied by assignement.
+   *
+   * \param [in] o The RandomVariableStream to copy.
+   * \return lvalue RandomVariableStream.
+   *
+   * \internal
+   * Theoretically, it is possible to give them good copy semantics
+   * but not enough time to iron out the details.
+   */
   RandomVariableStream &operator = (const RandomVariableStream &o);
 
-  /// Pointer to the underlying RNG stream.
+  /** Pointer to the underlying RNG stream. */
   RngStream *m_rng;
 
-  /// Indicates if antithetic values should be generated by this RNG stream.
+  /** Indicates if antithetic values should be generated by this RNG stream. */
   bool m_isAntithetic;
 
-  /// The stream number for this RNG stream.
+  /** The stream number for this RNG stream. */
   int64_t m_stream;
-};
 
+};  // class RandomVariableStream
+
+  
 /**
  * \ingroup randomvariable
- * \brief The uniform distribution Random Number Generator (RNG) that allows stream numbers to be set deterministically.
+ * \brief The uniform distribution Random Number Generator (RNG).
  *
  * This class supports the creation of objects that return random numbers
  * from a fixed uniform distribution.  It also supports the generation of
  * single random numbers from various uniform distributions.
  *
- * The low end of the range is always included and the high end
- * of the range is always excluded.
+ * The output range is \f$[min, max)\f$ for floating point values,
+ * (\c max <i>excluded</i>), and \f$[min, max]\f$ (\c max <i>included</i>)
+ * for integral values.
+ *
+ * \par Example
  *
  * Here is an example of how to use this class:
  * \code
@@ -183,10 +219,24 @@
  *   //
  *   double value = x->GetValue ();
  * \endcode
+ *
+ * \par Antithetic Values.
+ *
+ * Normally this RNG returns values \f$x\f$ in the interval \f$[min,max)\f$.
+ * If an instance of this RNG is configured to return antithetic values,
+ * the actual value returned is calculated as follows:
+ *
+ *   - Compute the initial random value \f$x\f$ as normal.
+ *   - Compute the distance from the maximum, \f$y = max - x\f$
+ *   - Return \f$x' = min + y = min + (max - x)\f$:
  */
 class UniformRandomVariable : public RandomVariableStream
 {
 public:
+  /**
+   * \brief Register this type.
+   * \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
 
   /**
@@ -195,118 +245,82 @@
   UniformRandomVariable ();
 
   /**
-   * \brief Returns the lower bound on values that can be returned by this RNG stream.
-   * \return The lower bound on values that can be returned by this RNG stream.
+   * \brief Get the lower bound on randoms returned by GetValue(void).
+   * \return The lower bound on values from GetValue(void).
    */
   double GetMin (void) const;
 
   /**
-   * \brief Returns the upper bound on values that can be returned by this RNG stream.
-   * \return The upper bound on values that can be returned by this RNG stream.
+   * \brief Get the upper bound on values returned by GetValue(void).
+   * \return The upper bound on values from GetValue(void).
    */
   double GetMax (void) const;
 
   /**
-   * \brief Returns a random double from the uniform distribution with the specified range.
-   * \param min Low end of the range.
-   * \param max High end of the range.
-   * \return A floating point random value.
-   *
-   * Note that antithetic values are being generated if
-   * m_isAntithetic is equal to true.  If \f$x\f$ is a value that
-   * would be returned normally, then \f$(max - x\f$) is the distance
-   * that \f$x\f$ would be from \f$max\f$.  The value returned in the
-   * antithetic case, \f$x'\f$, is calculated as
+   * \brief Get the next random value, as a double in the specified range
+   * \f$[min, max)\f$.
    *
-   *    \f[
-   *    x'  =  min + (max - x)  ,
-   *    \f]
+   * \note The upper limit is excluded from the output range.
    *
-   * which is the lower bound plus the distance \f$x\f$ is from the
-   * upper bound.
+   * \param [in] min Low end of the range (included).
+   * \param [in] max High end of the range (excluded).
+   * \return A floating point random value.
    */
   double GetValue (double min, double max);
 
   /**
-   * \brief Returns a random unsigned integer from a uniform distribution over the interval [min,max] including both ends.
-   * \param min Low end of the range.
-   * \param max High end of the range.
-   * \return A random unsigned integer value.
-   *
-   * Note that antithetic values are being generated if
-   * m_isAntithetic is equal to true.  If \f$x\f$ is a value that
-   * would be returned normally, then \f$(max - x\f$) is the distance
-   * that \f$x\f$ would be from \f$max\f$.  The value returned in the
-   * antithetic case, \f$x'\f$, is calculated as
+   * \brief Get the next random value, as an unsigned integer in the
+   * specified range \f$[min, max]/f$.
    *
-   *    \f[
-   *    x'  =  min + (max - x)  ,
-   *    \f]
+   * \note The upper limit is included in the output range.
    *
-   * which is the lower bound plus the distance \f$x\f$ is from the
-   * upper bound.
+   * \param [in] min Low end of the range.
+   * \param [in] max High end of the range.
+   * \return A random unsigned integer value.
    */
   uint32_t GetInteger (uint32_t min, uint32_t max);
 
+  // Inherited from RandomVariableStream
   /**
-   * \brief Returns a random double from the uniform distribution with the range [min,max), where min and max are the current lower and upper bounds.
+   * \brief Get the next random value as a double drawn from the distribution.
    * \return A floating point random value.
-   *
-   * Note that antithetic values are being generated if
-   * m_isAntithetic is equal to true.  If \f$x\f$ is a value that
-   * would be returned normally, then \f$(max - x\f$) is the distance
-   * that \f$x\f$ would be from \f$max\f$.  The value returned in the
-   * antithetic case, \f$x'\f$, is calculated as
-   *
-   *    \f[
-   *        x'  =  min + (max - x)  ,
-   *    \f]
-   *
-   * which is the lower bound plus the distance \f$x\f$ is from the
-   * upper bound.
-   *
-   * Note that we have to re-implement this method here because the method is
-   * overloaded above for the two-argument variant and the c++ name resolution
-   * rules don't work well with overloads split between parent and child
-   * classes.
-   */
+   * \note The upper limit is excluded from the output range.
+  */
   virtual double GetValue (void);
-
   /**
-   * \brief Returns a random unsigned integer from a uniform distribution over the interval [min,max] including both ends, where min and max are the current lower and upper bounds.
-   * \return A random unsigned integer value.
-   *
-   * Note that antithetic values are being generated if
-   * m_isAntithetic is equal to true.  If \f$x\f$ is a value that
-   * would be returned normally, then \f$(max - x\f$) is the distance
-   * that \f$x\f$ would be from \f$max\f$.  The value returned in the
-   * antithetic case, \f$x'\f$, is calculated as
-   *
-   *    \f[
-   *        x'  =  min + (max - x)  ,
-   *    \f]
-   *
-   * which is the lower bound plus the distance \f$x\f$ is from the
-   * upper bound.
+   * \brief Get the next random value as an integer drawn from the distribution.
+   * \return  An integer random value.
+   * \note The upper limit is included in the output range.
    */
   virtual uint32_t GetInteger (void);
+  
 private:
-  /// The lower bound on values that can be returned by this RNG stream.
+  /** The lower bound on values that can be returned by this RNG stream. */
   double m_min;
 
-  /// The upper bound on values that can be returned by this RNG stream.
+  /** The upper bound on values that can be returned by this RNG stream. */
   double m_max;
-};
 
+};  // class UniformRandomVariable
+
+  
 /**
  * \ingroup randomvariable
  * \brief The Random Number Generator (RNG) that returns a constant.
  *
- * Class ConstantRandomVariable returns the same value for every sample.
+ * This RNG returns the same value for every sample.
+ *
+ * \par Antithetic Values.
+ *
+ * This RNG ignores the antithetic setting.
  */
 class ConstantRandomVariable : public RandomVariableStream
 {
 public:
+  /**
+   * \brief Register this type.
+   * \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
 
   /**
@@ -315,147 +329,186 @@
   ConstantRandomVariable ();
 
   /**
-   * \brief Returns the constant value returned by this RNG stream.
-   * \return The constant value returned by this RNG stream.
+   * \brief Get the constant value returned by this RNG stream.
+   * \return The constant value.
    */
   double GetConstant (void) const;
 
   /**
-   * \brief Returns the value passed in.
-   * \return The floating point value passed in.
+   * \brief Get the next random value, as a double equal to the argument.
+   * \param [in] constant The value to return.
+   * \return The floating point argument.
    */
   double GetValue (double constant);
   /**
-   * \brief Returns the value passed in.
-   * \return The integer value passed in.
+   * \brief Get the next random value, as an integer equal to the argument.
+   * \param [in] constant The value to return.
+   * \return The integer argument.
    */
   uint32_t GetInteger (uint32_t constant);
 
-  /**
-   * \brief Returns the constant value returned by this RNG stream.
-   * \return The constant value returned by this RNG stream.
-   */
+  // Inherited from RandomVariableStream
+  /* \note This RNG always returns the same value. */
   virtual double GetValue (void);
-
-  /**
-   * \brief Returns an integer cast of the constant value returned by this RNG stream.
-   * \return Integer cast of the constant value returned by this RNG stream.
-   */
+  /* \note This RNG always returns the same value. */
   virtual uint32_t GetInteger (void);
 
 private:
-  /// The constant value returned by this RNG stream.
+  /** The constant value returned by this RNG stream. */
   double m_constant;
-};
 
+};  // class ConstantRandomVariable
+
+  
 /**
  * \ingroup randomvariable
- * \brief The Random Number Generator (RNG) that returns a sequential
- * list of values
+ * \brief The Random Number Generator (RNG) that returns a pattern of
+ * sequential values.
+ *
+ * This RNG has four configuration attributes:
+ *
+ *  - An increment, \c Increment.
+ *  - A consecutive repeat numer, \c Consecutive.
+ *  - The minimum value, \c Min.
+ *  - The maximum value, \c Max.
  *
- * Class SequentialRandomVariable defines a random number generator
- * that returns a sequence of values.  The sequence monotonically
- * increases for a period, then wraps around to the low value and
- * begins monotonically increasing again.
+ * The RNG starts at the \c Min value.  Each return value is
+ * repeated \c Consecutive times, before advancing by the \c Increment.
+ * When the \c Increment would cause the value to equal or exceed
+ * \c Max it is reset to \c Min first.
+ *
+ * For example, if an instance is configured with:
+ *
+ *   Attribute   | Value
+ *   :---------- | -----:
+ *   Min         |    2
+ *   Max         |   13
+ *   Increment   |    4
+ *   Consecutive |    3
+ *
+ * The sequence will repeat this pattern:  2 2 2 6 6 6 10 10 10.
+ *
+ * Notice that \c Max will be a strict upper bound on the values:
+ * all values in the sequence will be less than \c Max.
+ *
+ * \par Antithetic Values.
+ *
+ * This RNG ignores the antithetic setting.
  */
 class SequentialRandomVariable : public RandomVariableStream
 {
 public:
+  /**
+   * \brief Register this type.
+   * \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
 
   /**
-   * \brief Creates a sequential RNG with the default values for the sequence parameters.
+   * \brief Creates a sequential RNG with the default values
+   * for the sequence parameters.
    */
   SequentialRandomVariable ();
 
   /**
-   * \brief Returns the first value of the sequence.
+   * \brief Get the first value of the sequence.
    * \return The first value of the sequence.
    */
   double GetMin (void) const;
 
   /**
-   * \brief Returns one more than the last value of the sequence.
-   * \return One more than the last value of the sequence.
+   * \brief Get the limit of the sequence, which is (at least)
+   * one more than the last value of the sequence.
+   * \return The limit of the sequence.
    */
   double GetMax (void) const;
 
   /**
-   * \brief Returns the random variable increment for the sequence.
-   * \return The random variable increment for the sequence.
+   * \brief Get the increment for the sequence.
+   * \return The increment between distinct values for the sequence.
    */
   Ptr<RandomVariableStream> GetIncrement (void) const;
 
   /**
-   * \brief Returns the number of times each member of the sequence is repeated.
-   * \return The number of times each member of the sequence is repeated.
+   * \brief Get the number of times each distinct value of the sequence
+   * is repeated before incrementing to the next value.
+   * \return The number of times each value is repeated.
    */
   uint32_t GetConsecutive (void) const;
 
-  /**
-   * \brief Returns the next value in the sequence returned by this RNG stream.
-   * \return The next value in the sequence returned by this RNG stream.
-   *
-   * The following four parameters define the sequence.  For example,
-   *
-   *   - m_min         = 0   (First value of the sequence)
-   *   - m_max         = 5   (One more than the last value of the sequence)
-   *   - m_increment   = 1   (Random variable increment between sequence values)
-   *   - m_consecutive = 2   (Number of times each member of the sequence is repeated)
-   *
-   * creates a RNG that has the sequence 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 0, 0 ...
-   */
+  // Inherited from RandomVariableStream
   virtual double GetValue (void);
-
-  /**
-   * \brief Returns an integer cast of the next value in the sequence returned by this RNG stream.
-   * \return Integer cast of the next value in the sequence returned by this RNG stream.
-   */
   virtual uint32_t GetInteger (void);
 
 private:
-  /// The first value of the sequence.
+  /** The first value of the sequence. */
   double m_min;
 
-  /// One more than the last value of the sequence.
+  /** Strict upper bound on the sequence. */
   double m_max;
 
-  /// The sequence random variable increment.
+  /** Increment between distinct values. */
   Ptr<RandomVariableStream> m_increment;
 
-  /// The number of times each member of the sequence is repeated.
+  /** The number of times each distinct value is repeated. */
   uint32_t m_consecutive;
 
-  /// The current sequence value.
+  /** The current sequence value. */
   double m_current;
 
-  /// The number of times the sequence has been repeated.
+  /** The number of times the current distinct value has been repeated. */
   uint32_t m_currentConsecutive;
 
-  /// Indicates if the current sequence value has been set.
+  /** Indicates if the current sequence value has been properly initialized. */
   bool m_isCurrentSet;
 
-};
+};  // class SequentialRandomVariable
 
+  
 /**
  * \ingroup randomvariable
- * \brief The exponential distribution Random Number Generator (RNG) that allows stream numbers to be set deterministically.
+ * \brief The exponential distribution Random Number Generator (RNG).
  *
  * This class supports the creation of objects that return random numbers
  * from a fixed exponential distribution.  It also supports the generation of
  * single random numbers from various exponential distributions.
  *
  * The probability density function of an exponential variable
- * is defined over the interval [0, \f$+\infty\f$) as:
- * \f$ \alpha  e^{-\alpha x} \f$
- * where \f$ \alpha = \frac{1}{mean} \f$
+ * is defined as:
+ *   \f[
+ *       P(x) dx = \alpha  e^{-\alpha x} dx, \quad x \in [0, +\infty)
+ *   \f]
+ * over the interval \f$[0, +\infty)\f$, where \f$ \alpha = \frac{1}{Mean} \f$
+ * and \c Mean is a configurable attribute.
+ *
+ * The normal RNG value \f$x\f$ is calculated by
+ *
+ *   \f[
+ *       x = - 1/\alpha \log(u)
+ *   \f]
+ *
+ * where \f$u\f$ is a uniform random variable on \f$[0,1)\f$.
+ *
+ * \par Bounded Distribution
  *
  * Since exponential distributions can theoretically return unbounded
  * values, it is sometimes useful to specify a fixed upper limit.  The
- * bounded version is defined over the interval [0,b] as: \f$ \alpha
- * e^{-\alpha x} \quad x \in [0,b] \f$.  Note that in this case the
- * true mean of the distribution is slightly smaller than the mean
- * value specified: \f$ 1/\alpha - b/(e^{\alpha \, b}-1) \f$.
+ * bounded version is defined over the interval \f$[0,b]\f$ as:
+ *
+ *   \f[
+ *       P(x; b) dx = \alpha e^{-\alpha x} dx \quad x \in [0,b]
+ *   \f]
+ *
+ * where the \c Bound \f$b\f$ is a configurable attribute.
+ *
+ * Note that in this case the true mean of the distribution is smaller
+ * than the nominal mean value:
+ *
+ *   \f[
+ *       <X: P(x; b)> = 1/\alpha - b/(e^{\alpha \, b} -1)
+ *   \f]
+ *
+ * \par Example
  *
  * Here is an example of how to use this class:
  * \code
@@ -470,10 +523,24 @@
  *   // exponentially distributed random variable is equal to mean.
  *   double value = x->GetValue ();
  * \endcode
+ *
+ * \par Antithetic Values.
+ *
+ * The antithetic value is calculated from
+ *
+ *   \f[
+ *       x' = - mean * \log(1 - u), 
+ *   \f]
+ *
+ * where again \f$u\f$ is a uniform random variable on \f$[0,1)\f$.
  */
 class ExponentialRandomVariable : public RandomVariableStream
 {
 public:
+  /**
+   * \brief Register this type.
+   * \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
 
   /**
@@ -483,133 +550,55 @@
   ExponentialRandomVariable ();
 
   /**
-   * \brief Returns the mean value of the random variables returned by this RNG stream.
-   * \return The mean value of the random variables returned by this RNG stream.
+   * \brief Get the configured mean value of this RNG.
+   *
+   * \note This will not be the actual mean if the distribution is
+   * truncated by a bound.
+   * \return The configured mean value.
    */
   double GetMean (void) const;
 
   /**
-   * \brief Returns the upper bound on values that can be returned by this RNG stream.
-   * \return The upper bound on values that can be returned by this RNG stream.
+   * \brief Get the configured upper bound of this RNG.
+   * \return The upper bound.
    */
   double GetBound (void) const;
 
   /**
-   * \brief Returns a random double from an exponential distribution with the specified mean and upper bound.
-   * \param mean Mean value of the random variables.
-   * \param bound Upper bound on values returned.
+   * \brief Get the next random value, as a double from
+   * the exponential distribution with the specified mean and upper bound.
+   * \param [in] mean Mean value of the unbounded exponential distribution.
+   * \param [in] bound Upper bound on values returned.
    * \return A floating point random value.
-   *
-   * Note that antithetic values are being generated if
-   * m_isAntithetic is equal to true.  If \f$u\f$ is a uniform variable
-   * over [0,1] and
-   *
-   *    \f[
-   *         x = - mean * \log(u) 
-   *    \f]
-   *
-   * is a value that would be returned normally, then \f$(1 - u\f$) is
-   * the distance that \f$u\f$ would be from \f$1\f$.  The value
-   * returned in the antithetic case, \f$x'\f$, is calculated as
-   *
-   *    \f[
-   *         x' = - mean * \log(1 - u), 
-   *    \f]
-   *
-   * which now involves the log of the distance \f$u\f$ is from the 1.
    */
   double GetValue (double mean, double bound);
 
   /**
-   * \brief Returns a random unsigned integer from an exponential distribution with the specified mean and upper bound.
-   * \param mean Mean value of the random variables.
-   * \param bound Upper bound on values returned.
+   * \brief Get the next random value, as an unsigned integer from
+   * the exponential distribution with the specified mean and upper bound.
+   * \param [in] mean Mean value of the unbounded exponential distributuion.
+   * \param [in] bound Upper bound on values returned.
    * \return A random unsigned integer value.
-   *
-   * Note that antithetic values are being generated if
-   * m_isAntithetic is equal to true.  If \f$u\f$ is a uniform variable
-   * over [0,1] and
-   *
-   *    \f[
-   *         x = - mean * \log(u) 
-   *    \f]
-   *
-   * is a value that would be returned normally, then \f$(1 - u\f$) is
-   * the distance that \f$u\f$ would be from \f$1\f$.  The value
-   * returned in the antithetic case, \f$x'\f$, is calculated as
-   *
-   *    \f[
-   *         x' = - mean * \log(1 - u), 
-   *    \f]
-   *
-   * which now involves the log of the distance \f$u\f$ is from the 1.
    */
   uint32_t GetInteger (uint32_t mean, uint32_t bound);
 
-  /**
-   * \brief Returns a random double from an exponential distribution with the current mean and upper bound.
-   * \return A floating point random value.
-   *
-   * Note that antithetic values are being generated if
-   * m_isAntithetic is equal to true.  If \f$u\f$ is a uniform variable
-   * over [0,1] and
-   *
-   *    \f[
-   *         x = - mean * \log(u) 
-   *    \f]
-   *
-   * is a value that would be returned normally, then \f$(1 - u\f$) is
-   * the distance that \f$u\f$ would be from \f$1\f$.  The value
-   * returned in the antithetic case, \f$x'\f$, is calculated as
-   *
-   *    \f[
-   *         x' = - mean * \log(1 - u), 
-   *    \f]
-   *
-   * which now involves the log of the distance \f$u\f$ is from the 1.
-   *
-   * Note that we have to re-implement this method here because the method is
-   * overloaded above for the two-argument variant and the c++ name resolution
-   * rules don't work well with overloads split between parent and child
-   * classes.
-   */
+  // Inherited from RandomVariableStream
   virtual double GetValue (void);
-
-  /**
-   * \brief Returns a random unsigned integer from an exponential distribution with the current mean and upper bound.
-   * \return A random unsigned integer value.
-   *
-   * Note that antithetic values are being generated if
-   * m_isAntithetic is equal to true.  If \f$u\f$ is a uniform variable
-   * over [0,1] and
-   *
-   *    \f[
-   *         x = - mean * \log(u) 
-   *    \f]
-   *
-   * is a value that would be returned normally, then \f$(1 - u\f$) is
-   * the distance that \f$u\f$ would be from \f$1\f$.  The value
-   * returned in the antithetic case, \f$x'\f$, is calculated as
-   *
-   *    \f[
-   *         x' = - mean * \log(1 - u), 
-   *    \f]
-   *
-   * which now involves the log of the distance \f$u\f$ is from the 1.
-   */
   virtual uint32_t GetInteger (void);
 
 private:
-  /// The mean value of the random variables returned by this RNG stream.
+  /** The mean value of the unbounded exponential distribution. */
   double m_mean;
 
-  /// The upper bound on values that can be returned by this RNG stream.
+  /** The upper bound on values that can be returned by this RNG stream. */
   double m_bound;
-};
 
+};  // class ExponentialRandomVariable
+
+  
 /**
  * \ingroup randomvariable
- * \brief The Pareto distribution Random Number Generator (RNG) that allows stream numbers to be set deterministically.
+ * \brief The Pareto distribution Random Number Generator (RNG).
  *
  * This class supports the creation of objects that return random numbers
  * from a fixed Pareto distribution.  It also supports the generation of
@@ -654,6 +643,10 @@
 class ParetoRandomVariable : public RandomVariableStream
 {
 public:
+  /**
+   * \brief Register this type.
+   * \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
 
   /**
@@ -682,9 +675,9 @@
 
   /**
    * \brief Returns a random double from a Pareto distribution with the specified mean, shape, and upper bound.
-   * \param mean Mean parameter for the Pareto distribution.
-   * \param shape Shape parameter for the Pareto distribution.
-   * \param bound Upper bound on values returned.
+   * \param [in] mean Mean parameter for the Pareto distribution.
+   * \param [in] shape Shape parameter for the Pareto distribution.
+   * \param [in] bound Upper bound on values returned.
    * \return A floating point random value.
    *
    * Note that antithetic values are being generated if
@@ -715,9 +708,9 @@
 
   /**
    * \brief Returns a random unsigned integer from a Pareto distribution with the specified mean, shape, and upper bound.
-   * \param mean Mean parameter for the Pareto distribution.
-   * \param shape Shape parameter for the Pareto distribution.
-   * \param bound Upper bound on values returned.
+   * \param [in] mean Mean parameter for the Pareto distribution.
+   * \param [in] shape Shape parameter for the Pareto distribution.
+   * \param [in] bound Upper bound on values returned.
    * \return A random unsigned integer value.
    *
    * Note that antithetic values are being generated if
@@ -812,16 +805,18 @@
   virtual uint32_t GetInteger (void);
 
 private:
-  /// The mean parameter for the Pareto distribution returned by this RNG stream.
+  /** The mean parameter for the Pareto distribution returned by this RNG stream. */
   double m_mean;
 
-  /// The shape parameter for the Pareto distribution returned by this RNG stream.
+  /** The shape parameter for the Pareto distribution returned by this RNG stream. */
   double m_shape;
 
-  /// The upper bound on values that can be returned by this RNG stream.
+  /** The upper bound on values that can be returned by this RNG stream. */
   double m_bound;
-};
 
+};  // class ParetoRandomVariable
+
+  
 /**
  * \ingroup randomvariable
  * \brief The Weibull distribution Random Number Generator (RNG) that allows stream numbers to be set deterministically.
@@ -878,6 +873,10 @@
 class WeibullRandomVariable : public RandomVariableStream
 {
 public:
+  /**
+   * \brief Register this type.
+   * \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
 
   /**
@@ -906,9 +905,9 @@
 
   /**
    * \brief Returns a random double from a Weibull distribution with the specified scale, shape, and upper bound.
-   * \param scale Scale parameter for the Weibull distribution.
-   * \param shape Shape parameter for the Weibull distribution.
-   * \param bound Upper bound on values returned.
+   * \param [in] scale Scale parameter for the Weibull distribution.
+   * \param [in] shape Shape parameter for the Weibull distribution.
+   * \param [in] bound Upper bound on values returned.
    * \return A floating point random value.
    *
    * Note that antithetic values are being generated if
@@ -933,9 +932,9 @@
 
   /**
    * \brief Returns a random unsigned integer from a Weibull distribution with the specified scale, shape, and upper bound.
-   * \param scale Scale parameter for the Weibull distribution.
-   * \param shape Shape parameter for the Weibull distribution.
-   * \param bound Upper bound on values returned.
+   * \param [in] scale Scale parameter for the Weibull distribution.
+   * \param [in] shape Shape parameter for the Weibull distribution.
+   * \param [in] bound Upper bound on values returned.
    * \return A random unsigned integer value.
    *
    * Note that antithetic values are being generated if
@@ -1012,16 +1011,18 @@
   virtual uint32_t GetInteger (void);
 
 private:
-  /// The scale parameter for the Weibull distribution returned by this RNG stream.
+  /** The scale parameter for the Weibull distribution returned by this RNG stream. */
   double m_scale;
 
-  /// The shape parameter for the Weibull distribution returned by this RNG stream.
+  /** The shape parameter for the Weibull distribution returned by this RNG stream. */
   double m_shape;
 
-  /// The upper bound on values that can be returned by this RNG stream.
+  /** The upper bound on values that can be returned by this RNG stream. */
   double m_bound;
-};
 
+};  // class WeibullRandomVariable
+
+  
 /**
  * \ingroup randomvariable
  * \brief The normal (Gaussian) distribution Random Number Generator
@@ -1058,8 +1059,13 @@
 class NormalRandomVariable : public RandomVariableStream
 {
 public:
+  /** Large constant to bound the range. */
   static const double INFINITE_VALUE;
 
+  /**
+   * \brief Register this type.
+   * \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
 
   /**
@@ -1088,9 +1094,9 @@
 
   /**
    * \brief Returns a random double from a normal distribution with the specified mean, variance, and bound.
-   * \param mean Mean value for the normal distribution.
-   * \param variance Variance value for the normal distribution.
-   * \param bound Bound on values returned.
+   * \param [in] mean Mean value for the normal distribution.
+   * \param [in] variance Variance value for the normal distribution.
+   * \param [in] bound Bound on values returned.
    * \return A floating point random value.
    *
    * Note that antithetic values are being generated if m_isAntithetic
@@ -1126,9 +1132,9 @@
 
   /**
    * \brief Returns a random unsigned integer from a normal distribution with the specified mean, variance, and bound.
-   * \param mean Mean value for the normal distribution.
-   * \param variance Variance value for the normal distribution.
-   * \param bound Bound on values returned.
+   * \param [in] mean Mean value for the normal distribution.
+   * \param [in] variance Variance value for the normal distribution.
+   * \param [in] bound Bound on values returned.
    * \return A random unsigned integer value.
    *
    * Note that antithetic values are being generated if m_isAntithetic
@@ -1238,22 +1244,24 @@
   virtual uint32_t GetInteger (void);
 
 private:
-  /// The mean value for the normal distribution returned by this RNG stream.
+  /** The mean value for the normal distribution returned by this RNG stream. */
   double m_mean;
 
-  /// The variance value for the normal distribution returned by this RNG stream.
+  /** The variance value for the normal distribution returned by this RNG stream. */
   double m_variance;
 
-  /// The bound on values that can be returned by this RNG stream.
+  /** The bound on values that can be returned by this RNG stream. */
   double m_bound;
 
-  /// True if the next value is valid.
+  /** True if the next value is valid. */
   bool m_nextValid;
 
-  /// The algorithm produces two values at a time.
+  /** The algorithm produces two values at a time. */
   double m_next;
-};
 
+};  // class NormalRandomVariable
+
+  
 /**
  * \ingroup randomvariable
  * \brief The log-normal distribution Random Number Generator
@@ -1300,6 +1308,10 @@
 class LogNormalRandomVariable : public RandomVariableStream
 {
 public:
+  /**
+   * \brief Register this type.
+   * \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
 
   /**
@@ -1322,8 +1334,8 @@
 
   /**
    * \brief Returns a random double from a log-normal distribution with the specified mu and sigma.
-   * \param mu Mu value for the log-normal distribution.
-   * \param sigma Sigma value for the log-normal distribution.
+   * \param [in] mu Mu value for the log-normal distribution.
+   * \param [in] sigma Sigma value for the log-normal distribution.
    * \return A floating point random value.
    *
    * Note that antithetic values are being generated if m_isAntithetic
@@ -1357,8 +1369,8 @@
 
   /**
    * \brief Returns a random unsigned integer from a log-normal distribution with the specified mu and sigma.
-   * \param mu Mu value for the log-normal distribution.
-   * \param sigma Sigma value for the log-normal distribution.
+   * \param [in] mu Mu value for the log-normal distribution.
+   * \param [in] sigma Sigma value for the log-normal distribution.
    * \return A random unsigned integer value.
    *
    * Note that antithetic values are being generated if m_isAntithetic
@@ -1462,12 +1474,14 @@
   virtual uint32_t GetInteger (void);
 
 private:
-  /// The mu value for the log-normal distribution returned by this RNG stream.
+  /** The mu value for the log-normal distribution returned by this RNG stream. */
   double m_mu;
 
-  /// The sigma value for the log-normal distribution returned by this RNG stream.
+  /** The sigma value for the log-normal distribution returned by this RNG stream. */
   double m_sigma;
-};
+
+};  // class LogNormalRandomVariable
+  
 
 /**
  * \ingroup randomvariable
@@ -1503,6 +1517,10 @@
 class GammaRandomVariable : public RandomVariableStream
 {
 public:
+  /**
+   * \brief Register this type.
+   * \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
 
   /**
@@ -1525,8 +1543,8 @@
 
   /**
    * \brief Returns a random double from a gamma distribution with the specified alpha and beta.
-   * \param alpha Alpha value for the gamma distribution.
-   * \param beta Beta value for the gamma distribution.
+   * \param [in] alpha Alpha value for the gamma distribution.
+   * \param [in] beta Beta value for the gamma distribution.
    * \return A floating point random value.
    *
    * Note that antithetic values are being generated if m_isAntithetic
@@ -1540,8 +1558,8 @@
 
   /**
    * \brief Returns a random unsigned integer from a gamma distribution with the specified alpha and beta.
-   * \param alpha Alpha value for the gamma distribution.
-   * \param beta Beta value for the gamma distribution.
+   * \param [in] alpha Alpha value for the gamma distribution.
+   * \param [in] beta Beta value for the gamma distribution.
    * \return A random unsigned integer value.
    *
    * Note that antithetic values are being generated if m_isAntithetic
@@ -1587,9 +1605,9 @@
 private:
   /**
    * \brief Returns a random double from a normal distribution with the specified mean, variance, and bound.
-   * \param mean Mean value for the normal distribution.
-   * \param variance Variance value for the normal distribution.
-   * \param bound Bound on values returned.
+   * \param [in] mean Mean value for the normal distribution.
+   * \param [in] variance Variance value for the normal distribution.
+   * \param [in] bound Bound on values returned.
    * \return A floating point random value.
    *
    * Note that antithetic values are being generated if m_isAntithetic
@@ -1623,19 +1641,20 @@
    */
   double GetNormalValue (double mean, double variance, double bound);
 
-  /// The alpha value for the gamma distribution returned by this RNG stream.
+  /** The alpha value for the gamma distribution returned by this RNG stream. */
   double m_alpha;
 
-  /// The beta value for the gamma distribution returned by this RNG stream.
+  /** The beta value for the gamma distribution returned by this RNG stream. */
   double m_beta;
 
-  /// True if the next normal value is valid.
+  /** True if the next normal value is valid. */
   bool m_nextValid;
 
-  /// The algorithm produces two normal values at a time.
+  /** The algorithm produces two normal values at a time. */
   double m_next;
 
-};
+};  // class GammaRandomVariable
+  
 
 /**
  * \ingroup randomvariable
@@ -1675,6 +1694,10 @@
 class ErlangRandomVariable : public RandomVariableStream
 {
 public:
+  /**
+   * \brief Register this type.
+   * \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
 
   /**
@@ -1697,8 +1720,8 @@
 
   /**
    * \brief Returns a random double from an Erlang distribution with the specified k and lambda.
-   * \param k K value for the Erlang distribution.
-   * \param lambda Lambda value for the Erlang distribution.
+   * \param [in] k K value for the Erlang distribution.
+   * \param [in] lambda Lambda value for the Erlang distribution.
    * \return A floating point random value.
    *
    * Note that antithetic values are being generated if m_isAntithetic
@@ -1712,8 +1735,8 @@
 
   /**
    * \brief Returns a random unsigned integer from an Erlang distribution with the specified k and lambda.
-   * \param k K value for the Erlang distribution.
-   * \param lambda Lambda value for the Erlang distribution.
+   * \param [in] k K value for the Erlang distribution.
+   * \param [in] lambda Lambda value for the Erlang distribution.
    * \return A random unsigned integer value.
    *
    * Note that antithetic values are being generated if m_isAntithetic
@@ -1759,8 +1782,8 @@
 private:
   /**
    * \brief Returns a random double from an exponential distribution with the specified mean and upper bound.
-   * \param mean Mean value of the random variables.
-   * \param bound Upper bound on values returned.
+   * \param [in] mean Mean value of the random variables.
+   * \param [in] bound Upper bound on values returned.
    * \return A floating point random value.
    *
    * Note that antithetic values are being generated if
@@ -1783,13 +1806,14 @@
    */
   double GetExponentialValue (double mean, double bound);
 
-  /// The k value for the Erlang distribution returned by this RNG stream.
+  /** The k value for the Erlang distribution returned by this RNG stream. */
   uint32_t m_k;
 
-  /// The lambda value for the Erlang distribution returned by this RNG stream.
+  /** The lambda value for the Erlang distribution returned by this RNG stream. */
   double m_lambda;
 
-};
+};  // class ErlangRandomVariable
+  
 
 /**
  * \ingroup randomvariable
@@ -1822,6 +1846,10 @@
 class TriangularRandomVariable : public RandomVariableStream
 {
 public:
+  /**
+   * \brief Register this type.
+   * \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
 
   /**
@@ -1850,9 +1878,9 @@
 
   /**
    * \brief Returns a random double from a triangular distribution with the specified mean, min, and max.
-   * \param mean Mean value for the triangular distribution.
-   * \param min Low end of the range.
-   * \param max High end of the range.
+   * \param [in] mean Mean value for the triangular distribution.
+   * \param [in] min Low end of the range.
+   * \param [in] max High end of the range.
    * \return A floating point random value.
    *
    * Note that antithetic values are being generated if
@@ -1890,9 +1918,9 @@
 
   /**
    * \brief Returns a random unsigned integer from a triangular distribution with the specified mean, min, and max.
-   * \param mean Mean value for the triangular distribution.
-   * \param min Low end of the range.
-   * \param max High end of the range.
+   * \param [in] mean Mean value for the triangular distribution.
+   * \param [in] min Low end of the range.
+   * \param [in] max High end of the range.
    * \return A random unsigned integer value.
    *
    * Note that antithetic values are being generated if
@@ -2008,15 +2036,17 @@
   virtual uint32_t GetInteger (void);
 
 private:
-  /// The mean value for the triangular distribution returned by this RNG stream.
+  /** The mean value for the triangular distribution returned by this RNG stream. */
   double m_mean;
 
-  /// The lower bound on values that can be returned by this RNG stream.
+  /** The lower bound on values that can be returned by this RNG stream. */
   double m_min;
 
-  /// The upper bound on values that can be returned by this RNG stream.
+  /** The upper bound on values that can be returned by this RNG stream. */
   double m_max;
-};
+
+};  // class TriangularRandomVariable
+  
 
 /**
  * \ingroup randomvariable
@@ -2079,6 +2109,10 @@
 class ZipfRandomVariable : public RandomVariableStream
 {
 public:
+  /**
+   * \brief Register this type.
+   * \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
 
   /**
@@ -2101,8 +2135,8 @@
 
   /**
    * \brief Returns a random double from a Zipf distribution with the specified n and alpha.
-   * \param n N value for the Zipf distribution.
-   * \param alpha Alpha value for the Zipf distribution.
+   * \param [in] n N value for the Zipf distribution.
+   * \param [in] alpha Alpha value for the Zipf distribution.
    * \return A floating point random value.
    *
    * Note that antithetic values are being generated if m_isAntithetic
@@ -2116,8 +2150,8 @@
 
   /**
    * \brief Returns a random unsigned integer from a Zipf distribution with the specified n and alpha.
-   * \param n N value for the Zipf distribution.
-   * \param alpha Alpha value for the Zipf distribution.
+   * \param [in] n N value for the Zipf distribution.
+   * \param [in] alpha Alpha value for the Zipf distribution.
    * \return A random unsigned integer value.
    *
    * Note that antithetic values are being generated if m_isAntithetic
@@ -2161,15 +2195,17 @@
   virtual uint32_t GetInteger (void);
 
 private:
-  /// The n value for the Zipf distribution returned by this RNG stream.
+  /** The n value for the Zipf distribution returned by this RNG stream. */
   uint32_t m_n;
 
-  /// The alpha value for the Zipf distribution returned by this RNG stream.
+  /** The alpha value for the Zipf distribution returned by this RNG stream. */
   double m_alpha;
 
-  /// The normalization constant.
+  /** The normalization constant. */
   double m_c;
-};
+
+};  // class ZipfRandomVariable
+  
 
 /**
  * \ingroup randomvariable
@@ -2213,6 +2249,10 @@
 class ZetaRandomVariable : public RandomVariableStream
 {
 public:
+  /**
+   * \brief Register this type.
+   * \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
 
   /**
@@ -2229,7 +2269,7 @@
 
   /**
    * \brief Returns a random double from a zeta distribution with the specified alpha.
-   * \param alpha Alpha value for the zeta distribution.
+   * \param [in] alpha Alpha value for the zeta distribution.
    * \return A floating point random value.
    *
    * Note that antithetic values are being generated if m_isAntithetic
@@ -2243,7 +2283,7 @@
 
   /**
    * \brief Returns a random unsigned integer from a zeta distribution with the specified alpha.
-   * \param alpha Alpha value for the zeta distribution.
+   * \param [in] alpha Alpha value for the zeta distribution.
    * \return A random unsigned integer value.
    *
    * Note that antithetic values are being generated if m_isAntithetic
@@ -2287,12 +2327,14 @@
   virtual uint32_t GetInteger (void);
 
 private:
-  /// The alpha value for the zeta distribution returned by this RNG stream.
+  /** The alpha value for the zeta distribution returned by this RNG stream. */
   double m_alpha;
 
-  /// Just for calculus simplifications.
+  /** Just for calculus simplifications. */
   double m_b;
-};
+
+};  // class ZetaRandomVariable
+  
 
 /**
  * \ingroup randomvariable
@@ -2300,7 +2342,7 @@
  *
  * Defines a random variable that has a specified, predetermined
  * sequence.  This would be useful when trying to force the RNG to
- * return a known sequence, perhaps to compare NS-3 to some other
+ * return a known sequence, perhaps to compare ns-3 to some other
  * simulator
  *
  * Creates a generator that returns successive elements of the values
@@ -2327,6 +2369,10 @@
 class DeterministicRandomVariable : public RandomVariableStream
 {
 public:
+  /**
+   * \brief Register this type.
+   * \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
 
   /**
@@ -2338,8 +2384,8 @@
 
   /**
    * \brief Sets the array of values that holds the predetermined sequence.
-   * \param values Array of random values to return in sequence.
-   * \param length Number of values in the array.
+   * \param [in] values Array of random values to return in sequence.
+   * \param [in] length Number of values in the array.
    *
    * Note that the values in the array are copied and stored
    * (deep-copy).
@@ -2359,15 +2405,17 @@
   virtual uint32_t GetInteger (void);
 
 private:
-  /// Position in the array of values.
+  /** Position in the array of values. */
   uint64_t   m_count;
 
-  /// Position of the next value in the array of values.
+  /** Position of the next value in the array of values. */
   uint64_t   m_next;
 
-  /// Array of values to return in sequence.
+  /** Array of values to return in sequence. */
   double* m_data;
-};
+
+};  // class DeterministicRandomVariable
+  
 
 /**
  * \ingroup randomvariable
@@ -2403,6 +2451,10 @@
 class EmpiricalRandomVariable : public RandomVariableStream
 {
 public:
+  /**
+   * \brief Register this type.
+   * \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
 
   /**
@@ -2413,8 +2465,8 @@
 
   /**
    * \brief Specifies a point in the empirical distribution
-   * \param v The function value for this point
-   * \param c Probability that the function is less than or equal to v
+   * \param [in] v The function value for this point
+   * \param [in] c Probability that the function is less than or equal to v
    */
   void CDF (double v, double c);  // Value, prob <= Value
 
@@ -2445,20 +2497,63 @@
   virtual uint32_t GetInteger (void);
 
 private:
+  /** Helper to hold one point of the CDF. */
   class ValueCDF
   {
 public:
+    /** Constructor. */
     ValueCDF ();
+    /**
+     * Construct from values.
+     *
+     * \param [in] v The argumetn value.
+     * \param [in] c The CDF at the argument value \p v.
+     */
     ValueCDF (double v, double c);
+    /**
+     * Copy constructor.
+     *
+     * \param [in] c The other ValueCDF.
+     */
     ValueCDF (const ValueCDF& c);
+
+    /** The argument value. */
     double value;
+    /** The CDF at \p value. */
     double    cdf;
   };
-  virtual void Validate ();  // Insure non-decreasing emiprical values
-  virtual double Interpolate (double, double, double, double, double);
-  bool validated; // True if non-decreasing validated
-  std::vector<ValueCDF> emp;       // Empicical CDF
-};
+  /**
+   * Check that the CDF is valid.
+   *
+   * A valid CDF has
+   *
+   * - Strictly increasing arguments, and
+   * - Strictly increasing CDF.
+   *
+   * It is a fatal error to fail validation.
+   */
+  virtual void Validate ();
+  /**
+   * Linear nterpolation between two points on the CDF to estimate
+   * the value at \p r.
+   *
+   * \param [in] c1 The first argument value.
+   * \param [in] c2 The secong argument value.
+   * \param [in] v1 The first CDF value.
+   * \param [in] v2 The secong CDF value.
+   * \param [in] r  The argument value to interpolate to.
+   * \returns The interpolated CDF at \p r.
+   */
+  virtual double Interpolate (double c1, double c2,
+                              double v1, double v2, double r);
+  
+  /** \c true once the CDF has been validated. */
+  bool validated;
+  /** The vector of CDF points. */
+  std::vector<ValueCDF> emp; 
+
+};  // class EmpiricalRandomVariable
+  
 
 } // namespace ns3
 
diff -Naur ns-3.23/src/core/model/realtime-simulator-impl.cc ns-3.24/src/core/model/realtime-simulator-impl.cc
--- ns-3.23/src/core/model/realtime-simulator-impl.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/realtime-simulator-impl.cc	2015-09-15 11:18:44.000000000 -0700
@@ -499,19 +499,19 @@
 }
 
 void 
-RealtimeSimulatorImpl::Stop (Time const &time)
+RealtimeSimulatorImpl::Stop (Time const &delay)
 {
-  NS_LOG_FUNCTION (this << time);
-  Simulator::Schedule (time, &Simulator::Stop);
+  NS_LOG_FUNCTION (this << delay);
+  Simulator::Schedule (delay, &Simulator::Stop);
 }
 
 //
 // Schedule an event for a _relative_ time in the future.
 //
 EventId
-RealtimeSimulatorImpl::Schedule (Time const &time, EventImpl *impl)
+RealtimeSimulatorImpl::Schedule (Time const &delay, EventImpl *impl)
 {
-  NS_LOG_FUNCTION (this << time << impl);
+  NS_LOG_FUNCTION (this << delay << impl);
 
   Scheduler::Event ev;
   {
@@ -522,7 +522,7 @@
     // multi-threaded, we need this calculation to be atomic.  You can see it is
     // here since we are running in a CriticalSection.
     //
-    Time tAbsolute = Simulator::Now () + time;
+    Time tAbsolute = Simulator::Now () + delay;
     NS_ASSERT_MSG (tAbsolute.IsPositive (), "RealtimeSimulatorImpl::Schedule(): Negative time");
     NS_ASSERT_MSG (tAbsolute >= TimeStep (m_currentTs), "RealtimeSimulatorImpl::Schedule(): time < m_currentTs");
     ev.impl = impl;
@@ -539,9 +539,9 @@
 }
 
 void
-RealtimeSimulatorImpl::ScheduleWithContext (uint32_t context, Time const &time, EventImpl *impl)
+RealtimeSimulatorImpl::ScheduleWithContext (uint32_t context, Time const &delay, EventImpl *impl)
 {
-  NS_LOG_FUNCTION (this << context << time << impl);
+  NS_LOG_FUNCTION (this << context << delay << impl);
 
   {
     CriticalSection cs (m_mutex);
@@ -549,7 +549,7 @@
 
     if (SystemThread::Equals (m_main))
       {
-        ts = m_currentTs + time.GetTimeStep ();
+        ts = m_currentTs + delay.GetTimeStep ();
       }
     else
       {
@@ -558,7 +558,7 @@
         // realtime clock.  If we're not, then m_currentTs is where we stopped.
         // 
         ts = m_running ? m_synchronizer->GetCurrentRealtime () : m_currentTs;
-        ts += time.GetTimeStep ();
+        ts += delay.GetTimeStep ();
       }
 
     NS_ASSERT_MSG (ts >= m_currentTs, "RealtimeSimulatorImpl::ScheduleRealtime(): schedule for time < m_currentTs");
diff -Naur ns-3.23/src/core/model/realtime-simulator-impl.h ns-3.24/src/core/model/realtime-simulator-impl.h
--- ns-3.23/src/core/model/realtime-simulator-impl.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/realtime-simulator-impl.h	2015-09-15 11:18:44.000000000 -0700
@@ -92,9 +92,9 @@
   virtual void Destroy ();
   virtual bool IsFinished (void) const;
   virtual void Stop (void);
-  virtual void Stop (Time const &time);
-  virtual EventId Schedule (Time const &time, EventImpl *event);
-  virtual void ScheduleWithContext (uint32_t context, Time const &time, EventImpl *event);
+  virtual void Stop (Time const &delay);
+  virtual EventId Schedule (Time const &delay, EventImpl *event);
+  virtual void ScheduleWithContext (uint32_t context, Time const &delay, EventImpl *event);
   virtual EventId ScheduleNow (EventImpl *event);
   virtual EventId ScheduleDestroy (EventImpl *event);
   virtual void Remove (const EventId &ev);
@@ -108,18 +108,18 @@
   virtual uint32_t GetSystemId (void) const; 
   virtual uint32_t GetContext (void) const;
 
-  /** \copydoc ScheduleWithContext */
-  void ScheduleRealtimeWithContext (uint32_t context, Time const &time, EventImpl *event);
-  /** \copydoc Schedule */
-  void ScheduleRealtime (Time const &time, EventImpl *event);
+  /** \copydoc ScheduleWithContext(uint32_t,const Time&,EventImpl*) */
+  void ScheduleRealtimeWithContext (uint32_t context, Time const &delay, EventImpl *event);
+  /** \copydoc Schedule(const Time&,EventImpl*) */
+  void ScheduleRealtime (Time const &delay, EventImpl *event);
   /**
-   * \copybrief ScheduleNow
+   * \copybrief ScheduleNow(EventImpl*)
    *
-   * \param context Event context.
-   * \param event The event to schedule.
+   * \param [in] context Event context.
+   * \param [in] event The event to schedule.
    */
   void ScheduleRealtimeNowWithContext (uint32_t context, EventImpl *event);
-  /** \copydoc ScheduleNow */
+  /** \copydoc ScheduleNow(EventImpl*) */
   void ScheduleRealtimeNow (EventImpl *event);
   /**
    * Get the current real time from the synchronizer.
@@ -130,7 +130,7 @@
   /**
    * Set the SynchronizationMode.
    *
-   * \param mode The new SynchronizationMode.
+   * \param [in] mode The new SynchronizationMode.
    */
   void SetSynchronizationMode (RealtimeSimulatorImpl::SynchronizationMode mode);
   /**
@@ -142,7 +142,7 @@
   /**
    * Set the fatal error threshold for SynchronizationMode SYNC_HARD_LIMIT.
    *
-   * \param limit The maximum amount of real time we are allowed to fall
+   * \param [in] limit The maximum amount of real time we are allowed to fall
    *     behind before we trigger a fatal error.
    */
   void SetHardLimit (Time limit);
diff -Naur ns-3.23/src/core/model/rng-seed-manager.h ns-3.24/src/core/model/rng-seed-manager.h
--- ns-3.23/src/core/model/rng-seed-manager.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/rng-seed-manager.h	2015-09-15 11:18:44.000000000 -0700
@@ -22,68 +22,92 @@
 
 #include <stdint.h>
 
+/**
+ * \file
+ * \ingroup randomvariable
+ * ns3::RngSeedManager declaration.
+ */
+
 namespace ns3 {
 
+/**
+ * \ingroup randomvariable 
+ *
+ * Manage the seed number and run number of the underlying
+ * random number generator, and automatic assignment of stream numbers.
+ */
 class RngSeedManager
 {
 public:
   /**
-   * \brief set the seed
-   * it will duplicate the seed value 6 times
+   * \brief Set the seed.
+   *
+   * This sets the global initial seed which will be used all
+   * subsequently instantiated RandomVariableStream objects.
+   *
    * \code
-   * RngSeedManger::SetSeed(15);
-   * UniformVariable x(2,3);     //these will give the same output everytime
-   * ExponentialVariable y(120); //as long as the seed stays the same
+   *   RngSeedManger::SetSeed(15);
+   *   UniformVariable x(2,3);     // These will give the same output everytime
+   *   ExponentialVariable y(120); // as long as the seed stays the same.
    * \endcode
-   * \param seed
+   * \param [in] seed The seed value to use.
    *
-   * Note, while the underlying RNG takes six integer values as a seed;
+   * \note While the underlying RNG takes six integer values as a seed;
    * it is sufficient to set these all to the same integer, so we provide
    * a simpler interface here that just takes one integer.
    */
   static void SetSeed (uint32_t seed);
 
   /**
-   * \brief Get the seed value
-   * \return the seed value
+   * \brief Get the current seed value which will be used by all
+   * subsequently instantiated RandomVariableStream objects.
+   * 
+   * \return The seed value.
    *
-   * Note:  returns the first of the six seed values used in the underlying RNG
+   * This returns the current seed value. 
    */
   static uint32_t GetSeed (void);
 
   /**
-   * \brief Set the run number of simulation
+   * \brief Set the run number of simulation.
    *
    * \code
-   * RngSeedManager::SetSeed(12);
-   * int N = atol(argv[1]); //read in run number from command line
-   * RngSeedManager::SetRun(N);
-   * UniformVariable x(0,10);
-   * ExponentialVariable y(2902);
+   *   RngSeedManager::SetSeed(12);
+   *   int N = atol(argv[1]);      // Read in run number from command line.
+   *   RngSeedManager::SetRun(N);
+   *   UniformVariable x(0,10);
+   *   ExponentialVariable y(2902);
    * \endcode
-   * In this example, N could successivly be equal to 1,2,3, etc. and the user
-   * would continue to get independent runs out of the single simulation.  For
-   * this simple example, the following might work:
+   * In this example, \c N could successivly be equal to 1,2,3, _etc._
+   * and the user would continue to get independent runs out of the
+   * single simulation.  For this simple example, the following might work:
    * \code
-   * ./simulation 0
-   * ...Results for run 0:...
+   *   ./simulation 0
+   *   ...Results for run 0:...
    *
-   * ./simulation 1
-   * ...Results for run 1:...
+   *   ./simulation 1
+   *   ...Results for run 1:...
    * \endcode
+   *
+   * \param [in] run The run number.
    */
   static void SetRun (uint64_t run);
   /**
-   * \returns the current run number
-   * @sa SetRun
+   * \brief Get the current run number.
+   * \returns The current run number
+   * \see SetRun
    */
   static uint64_t GetRun (void);
 
+  /**
+   * Get the next automatically assigned stream index.
+   * \returns The next stream index.
+   */
   static uint64_t GetNextStreamIndex(void);
 
 };
 
-// for compatibility
+/** Alias for compatibility. */
 typedef RngSeedManager SeedManager;
 
 } // namespace ns3
diff -Naur ns-3.23/src/core/model/rng-stream.cc ns-3.24/src/core/model/rng-stream.cc
--- ns-3.23/src/core/model/rng-stream.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/rng-stream.cc	2015-09-15 11:18:44.000000000 -0700
@@ -26,6 +26,10 @@
 #include "fatal-error.h"
 #include "log.h"
 
+/// \file
+/// \ingroup rngimpl
+/// Class RngStream and MRG32k3a implementation.
+
 namespace ns3 {
   
 // Note:  Logging in this file is largely avoided due to the
@@ -36,26 +40,61 @@
 } // namespace ns3
 
 
+/// \ingroup rngimpl
+/// Unnamed namespace for MRG32k3a implementation details.
 namespace
 {
+
+/// \ingroup rngimpl
+/// Type for 3x3 matrix of doubles.
 typedef double Matrix[3][3];
 
+/// \ingroup rngimpl
+/// First component modulus, 2<sup>32</sup> - 209.
 const double m1   =       4294967087.0;
+
+/// \ingroup rngimpl
+/// Second component modulus, 2<sup>32</sup> - 22853.
 const double m2   =       4294944443.0;
+  
+/// \ingroup rngimpl
+/// Normalization to obtain randoms on [0,1).
 const double norm =       1.0 / (m1 + 1.0);
+  
+/// \ingroup rngimpl
+/// First component multiplier of <i>n</i> - 2 value.
 const double a12  =       1403580.0;
+  
+/// \ingroup rngimpl
+/// First component multiplier of <i>n</i> - 3 value.
 const double a13n =       810728.0;
+  
+/// \ingroup rngimpl
+/// Second component multiplier of <i>n</i> - 1 value.
 const double a21  =       527612.0;
+  
+/// \ingroup rngimpl
+/// Second component multiplier of <i>n</i> - 3 value.
 const double a23n =       1370589.0;
+
+/// \ingroup rngimpl
+/// Decomposition factor for computing a*s in less than 53 bits, 2<sup>17</sup>
 const double two17 =      131072.0;
+  
+/// \ingroup rngimpl
+/// IEEE-754 floating point precision, 2<sup>53</sup>
 const double two53 =      9007199254740992.0;
-
+  
+/// \ingroup rngimpl
+/// First component transition matrix.
 const Matrix A1p0 = {
   {       0.0,        1.0,       0.0 },
   {       0.0,        0.0,       1.0 },
   { -810728.0,  1403580.0,       0.0 }
 };
 
+/// \ingroup rngimpl
+/// Second component transition matrix.
 const Matrix A2p0 = {
   {        0.0,        1.0,       0.0 },
   {        0.0,        0.0,       1.0 },
@@ -64,7 +103,17 @@
 
 
 //-------------------------------------------------------------------------
-// Return (a*s + c) MOD m; a, s, c and m must be < 2^35
+/// \ingroup rngimpl
+/// Return (a*s + c) MOD m; a, s, c and m must be < 2^35
+///
+/// This computes the result exactly, without exceeding the 53 bit
+/// precision of doubles.
+///
+/// \param [in] a First multiplicative argument.
+/// \param [in] s Second multiplicative argument.
+/// \param [in] c Additive argument.
+/// \param [in] m Modulus.
+/// \returns <tt>(a*s +c) MOD m</tt>
 //
 double MultModM (double a, double s, double c, double m)
 {
@@ -97,8 +146,14 @@
 
 
 //-------------------------------------------------------------------------
-// Compute the vector v = A*s MOD m. Assume that -m < s[i] < m.
-// Works also when v = s.
+/// \ingroup rngimpl
+/// Compute the vector v = A*s MOD m. Assume that -m < s[i] < m.
+/// Works also when v = s.
+///
+/// \param [in] A Matrix argument, 3x3.
+/// \param [in] s Three component input vector.
+/// \param [out] v Three component output vector.
+/// \param [in] m Modulus.
 //
 void MatVecModM (const Matrix A, const double s[3], double v[3],
                  double m)
@@ -120,8 +175,14 @@
 
 
 //-------------------------------------------------------------------------
-// Compute the matrix C = A*B MOD m. Assume that -m < s[i] < m.
-// Note: works also if A = C or B = C or A = B = C.
+/// \ingroup rngimpl
+/// Compute the matrix C = A*B MOD m. Assume that -m < s[i] < m.
+/// Note: works also if A = C or B = C or A = B = C.
+///
+/// \param [in] A First matrix argument.
+/// \param [in] B Second matrix argument.
+/// \param [out] C Result matrix.
+/// \param [in] m Modulus.
 //
 void MatMatModM (const Matrix A, const Matrix B,
                  Matrix C, double m)
@@ -153,7 +214,13 @@
 
 
 //-------------------------------------------------------------------------
-// Compute the matrix B = (A^(2^e) Mod m);  works also if A = B. 
+/// \ingroup rngimpl
+/// Compute the matrix B = (A^(2^e) Mod m);  works also if A = B. 
+///
+/// \param [in] src Matrix input argument \c A.
+/// \param [out] dst Matrix output \c B.
+/// \param [in] m Modulus.
+/// \param [in] e The exponent.
 //
 void MatTwoPowModM (const Matrix src, Matrix dst, double m, int32_t e)
 {
@@ -176,9 +243,15 @@
 
 
 //-------------------------------------------------------------------------
-// Compute the matrix B = (A^n Mod m);  works even if A = B.
-//
 /*
+/// \ingroup rngimpl
+/// Compute the matrix B = (A^n Mod m);  works even if A = B.
+///
+/// \param [in] A Matrix input argument.
+/// \param [out] B Matrix output.
+/// \param [in] m Modulus.
+/// \param [in] n Exponent.
+//
 void MatPowModM (const double A[3][3], double B[3][3], double m, int32_t n)
 {
   NS_LOG_FUNCTION (A << B << m << n);
@@ -212,13 +285,19 @@
 }
 */
 
-// The following are the transition matrices of the two MRG components
-// (in matrix form), raised to all powers of 2 from 1 to 191
+/// The transition matrices of the two MRG components
+/// (in matrix form), raised to all powers of 2 from 1 to 191
+//
 struct Precalculated
 {
-  Matrix a1[190];
-  Matrix a2[190];
+  Matrix a1[190];  //!< First component transition matrix powers.
+  Matrix a2[190];  //!< Second component transition matrix powers.
 };
+/// Compute the transition matrices of the two MRG components
+//  raised to all powers of 2 from 1 to 191.
+///
+/// \returns The precalculated powers of the transition matrices.
+//
 struct Precalculated PowerOfTwoConstants (void)
 {
   struct Precalculated precalculated;
@@ -230,6 +309,12 @@
     }
   return precalculated;
 }
+/// Get the transition matrices raised to a power of 2.
+///
+/// \param [in] n The power of 2.
+/// \param [out] a1p The first transition matrix power.
+/// \param [out] a2p The second transition matrix power.
+//
 void PowerOfTwoMatrix (int n, Matrix a1p, Matrix a2p)
 {
   static struct Precalculated constants = PowerOfTwoConstants ();
diff -Naur ns-3.23/src/core/model/rng-stream.h ns-3.24/src/core/model/rng-stream.h
--- ns-3.23/src/core/model/rng-stream.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/rng-stream.h	2015-09-15 11:18:44.000000000 -0700
@@ -22,10 +22,21 @@
 #include <string>
 #include <stdint.h>
 
+/**
+ * \file
+ * \ingroup rngimpl
+ * Declaration of class RngStream.
+ */
+
 namespace ns3 {
 
 /**
- * \ingroup randomvariable 
+ * \ingroup randomvariable
+ * \defgroup rngimpl RNG Implementation.
+ */
+  
+/**
+ * \ingroup rngimpl
  *
  * \brief Combined Multiple-Recursive Generator MRG32k3a
  *
@@ -38,17 +49,39 @@
 class RngStream
 {
 public:
+  /**
+   * Construct from explicit seed, stream and substream values.
+   *
+   * \param [in] seed The starting seed.
+   * \param [in] stream The stream number.
+   * \param [in] substream The sub-stream number.
+   */
   RngStream (uint32_t seed, uint64_t stream, uint64_t substream);
-  RngStream (const RngStream&);
+  /**
+   * Copy constructor.
+   *
+   * \param [in] r The RngStream to copy.
+   */
+  RngStream (const RngStream & r);
   /**
    * Generate the next random number for this stream.
    * Uniformly distributed between 0 and 1.
+   *
+   * \returns The next random.
    */
   double RandU01 (void);
 
 private:
+  /**
+   * Advance \p state of the RNG by leaps and bounds.
+   *
+   * \param [in] nth The stream or substream index.
+   * \param [in] by The log2 base of \p nth.
+   * \param [in] state The state vector to advance.
+   */
   void AdvanceNthBy (uint64_t nth, int by, double state[6]);
 
+  /** The RNG state vector. */
   double m_currentState[6];
 };
 
diff -Naur ns-3.23/src/core/model/scheduler.h ns-3.24/src/core/model/scheduler.h
--- ns-3.23/src/core/model/scheduler.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/scheduler.h	2015-09-15 11:18:44.000000000 -0700
@@ -66,6 +66,10 @@
 class Scheduler : public Object
 {
 public:
+  /**
+   *  Register this type.
+   *  \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
 
   /**
@@ -91,42 +95,63 @@
     EventKey key;          /**< Key for sorting and ordering Events. */
   };
 
+  /** Destructor. */
   virtual ~Scheduler () = 0;
 
   /**
-   * \param ev event to store in the event list
+   * Insert a new Event in the schedule.
+   *
+   * \param [in] ev Event to store in the event list
    */
   virtual void Insert (const Event &ev) = 0;
   /**
-   * \returns true if the event list is empty and false otherwise.
+   * Test if the schedule is empty.
+   *
+   * \returns \c true if the event list is empty and \c false otherwise.
    */
   virtual bool IsEmpty (void) const = 0;
   /**
-   * \returns a pointer to the next earliest event. The caller
-   *      takes ownership of the returned pointer.
+   * Get a pointer to the next event.
    *
    * This method cannot be invoked if the list is empty.
+   *
+   * \returns A pointer to the next earliest event. The caller
+   *      takes ownership of the returned pointer.
    */
   virtual Event PeekNext (void) const = 0;
   /**
+   * Remove the earliest event from the event list.
+   *
    * This method cannot be invoked if the list is empty.
-   * Remove the next earliest event from the event list.
+   *
+   * \return The Event.
    */
   virtual Event RemoveNext (void) = 0;
   /**
-   * \param ev the event to remove
+   * Remove a specific event from the event list.
    *
-   * This methods cannot be invoked if the list is empty.
+   * This method cannot be invoked if the list is empty.
+   *
+   * \param [in] ev The event to remove
    */
   virtual void Remove (const Event &ev) = 0;
 };
 
-/* Note the invariants which this function must provide:
- * - irreflexibility: f (x,x) is false)
+/**
+ * \ingroup Events
+ * Compare (less than) two events by EventKey.
+ *
+ * Note the invariants which this function must provide:
+ * - irreflexibility: f (x,x) is false
  * - antisymmetry: f(x,y) = !f(y,x)
  * - transitivity: f(x,y) and f(y,z) => f(x,z)
+ *
+ * \param [in] a The first event.
+ * \param [in] b The second event.
+ * \returns \c true if \c a < \c b
  */
-inline bool operator < (const Scheduler::EventKey &a, const Scheduler::EventKey &b)
+inline bool operator < (const Scheduler::EventKey &a,
+                        const Scheduler::EventKey &b)
 {
   if (a.m_ts < b.m_ts)
     {
@@ -142,11 +167,30 @@
       return false;
     }
 }
-inline bool operator != (const Scheduler::EventKey &a, const Scheduler::EventKey &b)
+
+/**
+ * \ingroup Events
+ * Compare (not equal) two events by EventKey.
+ *
+ * \param [in] a The first event.
+ * \param [in] b The second event.
+ * \returns \c true if \c a != \c b
+ */
+inline bool operator != (const Scheduler::EventKey &a,
+                         const Scheduler::EventKey &b)
 {
   return a.m_uid != b.m_uid;
 }
-inline bool operator > (const Scheduler::EventKey &a, const Scheduler::EventKey &b)
+
+/**
+ * Compare (greater than) two events by EventKey.
+ *
+ * \param [in] a The first event.
+ * \param [in] b The second event.
+ * \returns \c true if \c a > \c b
+ */
+inline bool operator > (const Scheduler::EventKey &a,
+                        const Scheduler::EventKey &b)
 {
   if (a.m_ts > b.m_ts)
     {
@@ -163,9 +207,15 @@
     }
 }
 
-
-
-inline bool operator < (const Scheduler::Event &a, const Scheduler::Event &b)
+/**
+ * Compare (less than) two events by Event.
+ *
+ * \param [in] a The first event.
+ * \param [in] b The second event.
+ * \returns \c true if \c a < \c b
+ */
+inline bool operator < (const Scheduler::Event &a,
+                        const Scheduler::Event &b)
 {
   return a.key < b.key;
 }
diff -Naur ns-3.23/src/core/model/simple-ref-count.h ns-3.24/src/core/model/simple-ref-count.h
--- ns-3.23/src/core/model/simple-ref-count.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/simple-ref-count.h	2015-09-15 11:18:44.000000000 -0700
@@ -53,17 +53,18 @@
  * This template takes 3 arguments but only the first argument is
  * mandatory:
  *
- * \tparam T The typename of the subclass which derives from this template
- *      class. Yes, this is weird but it's a common C++ template pattern
- *      whose name is CRTP (Curiously Recursive Template Pattern)
- * \tparam PARENT: the typename of the parent of this template. By default,
- *      this typename is "'ns3::empty'" which is an empty class: compilers
- *      which implement the RBCO optimization (empty base class optimization)
- *      will make this a no-op
- * \tparam DELETER: the typename of a class which implements a public static 
- *      method named 'Delete'. This method will be called whenever the
- *      SimpleRefCount template detects that no references to the object
- *      it manages exist anymore.
+ * \tparam T \explicit The typename of the subclass which derives
+ *      from this template class. Yes, this is weird but it's a
+ *      common C++ template pattern whose name is CRTP (Curiously
+ *      Recursive Template Pattern)
+ * \tparam PARENT \explicit The typename of the parent of this template.
+ *      By default, this typename is "'ns3::empty'" which is an empty
+ *      class: compilers which implement the RBCO optimization (empty
+ *      base class optimization) will make this a no-op
+ * \tparam DELETER \explicit The typename of a class which implements
+ *      a public static method named 'Delete'. This method will be called
+ *      whenever the SimpleRefCount template detects that no references
+ *      to the object it manages exist anymore.
  *
  * Interesting users of this class include ns3::Object as well as ns3::Packet.
  */
diff -Naur ns-3.23/src/core/model/simulator.cc ns-3.24/src/core/model/simulator.cc
--- ns-3.23/src/core/model/simulator.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/simulator.cc	2015-09-15 11:18:44.000000000 -0700
@@ -79,7 +79,7 @@
  * \ingroup logging
  * Default TimePrinter implementation.
  *
- * \param [in] os The output stream to print the time on.
+ * \param [in,out] os The output stream to print the time on.
  */
 static void
 TimePrinter (std::ostream &os)
@@ -91,7 +91,7 @@
  * \ingroup logging
  * Default node id printer implementation.
  * 
- * \param [in] os The output stream to print the node id on.
+ * \param [in,out] os The output stream to print the node id on.
  */
 static void
 NodePrinter (std::ostream &os)
@@ -213,10 +213,10 @@
 }
 
 void 
-Simulator::Stop (Time const &time)
+Simulator::Stop (Time const &delay)
 {
-  NS_LOG_FUNCTION (time);
-  GetImpl ()->Stop (time);
+  NS_LOG_FUNCTION (delay);
+  GetImpl ()->Stop (delay);
 }
 
 Time
@@ -236,9 +236,9 @@
 }
 
 EventId
-Simulator::Schedule (Time const &time, const Ptr<EventImpl> &ev)
+Simulator::Schedule (Time const &delay, const Ptr<EventImpl> &event)
 {
-  return DoSchedule (time, GetPointer (ev));
+  return DoSchedule (delay, GetPointer (event));
 }
 
 EventId
@@ -247,9 +247,9 @@
   return DoScheduleNow (GetPointer (ev));
 }
 void
-Simulator::ScheduleWithContext (uint32_t context, const Time &time, EventImpl *impl)
+Simulator::ScheduleWithContext (uint32_t context, const Time &delay, EventImpl *impl)
 {
-  return GetImpl ()->ScheduleWithContext (context, time, impl);
+  return GetImpl ()->ScheduleWithContext (context, delay, impl);
 }
 EventId
 Simulator::ScheduleDestroy (const Ptr<EventImpl> &ev)
@@ -274,15 +274,15 @@
 
 
 EventId
-Simulator::Schedule (Time const &time, void (*f)(void))
+Simulator::Schedule (Time const &delay, void (*f)(void))
 {
-  return DoSchedule (time, MakeEvent (f));
+  return DoSchedule (delay, MakeEvent (f));
 }
 
 void
-Simulator::ScheduleWithContext (uint32_t context, Time const &time, void (*f)(void))
+Simulator::ScheduleWithContext (uint32_t context, Time const &delay, void (*f)(void))
 {
-  return ScheduleWithContext (context, time, MakeEvent (f));
+  return ScheduleWithContext (context, delay, MakeEvent (f));
 }
 
 EventId
diff -Naur ns-3.23/src/core/model/simulator.h ns-3.24/src/core/model/simulator.h
--- ns-3.23/src/core/model/simulator.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/simulator.h	2015-09-15 11:18:44.000000000 -0700
@@ -32,8 +32,8 @@
 #include <string>
 
 /**
- * \file
- * \ingroup simulator
+ * @file
+ * @ingroup simulator
  * ns3::Simulator declaration.
  */
 
@@ -43,14 +43,14 @@
 class Scheduler;
 
 /**
- * \ingroup core
- * \defgroup simulator Simulator
- * \brief Control the virtual time and the execution of simulation events. 
+ * @ingroup core
+ * @defgroup simulator Simulator
+ * @brief Control the virtual time and the execution of simulation events. 
  */
 /**
- * \ingroup simulator
+ * @ingroup simulator
  *
- * \brief Control the scheduling of simulation events. 
+ * @brief Control the scheduling of simulation events. 
  *
  * The internal simulation clock is maintained
  * as a 64-bit integer in a unit specified by the user
@@ -62,16 +62,16 @@
  * expire first.
  * 
  * A simple example of how to use the Simulator class to schedule events
- * is shown in sample-simulator.cc ::
- * \include src/core/examples/sample-simulator.cc
+ * is shown in sample-simulator.cc:
+ * @include src/core/examples/sample-simulator.cc
  *
- * \todo Define what the simulation or event context means.
+ * @todo Define what the simulation or event context means.
  */
 class Simulator 
 {
 public:
   /**
-   * \param impl A new simulator implementation.
+   * @param [in] impl A new simulator implementation.
    *
    * The simulator provides a mechanism to swap out different implementations.
    * For example, the default implementation is a single-threaded simulator
@@ -85,9 +85,9 @@
   static void SetImplementation (Ptr<SimulatorImpl> impl);
 
   /**
-   * \brief Get the SimulatorImpl singleton.
+   * @brief Get the SimulatorImpl singleton.
    *
-   * \internal
+   * @internal
    * If the SimulatorImpl singleton hasn't been created yet,
    * this function does so.  At the same time it also creates
    * the Scheduler.  Both of these respect the global values
@@ -99,12 +99,13 @@
    * since we can't really do any logging until we have
    * a SimulatorImpl and Scheduler.
    
-   * \return The SimulatorImpl singleton.
+   * @return The SimulatorImpl singleton.
    */
   static Ptr<SimulatorImpl> GetImplementation (void);
 
   /**
-   * \param schedulerFactory a new event scheduler factory
+   * @brief Set the scheduler type with an ObjectFactory.
+   * @param [in] schedulerFactory The configured ObjectFactory.
    *
    * The event scheduler can be set at any time: the events scheduled
    * in the previous scheduler will be transfered to the new scheduler
@@ -112,175 +113,288 @@
    */
   static void SetScheduler (ObjectFactory schedulerFactory);
 
-  /**  \copydoc SimulatorImpl::Destroy   */
+  /**
+   * Execute the events scheduled with ScheduleDestroy().
+   *
+   * This method is typically invoked at the end of a simulation
+   * to avoid false-positive reports by a leak checker.
+   * After this method has been invoked, it is actually possible
+   * to restart a new simulation with a set of calls to Simulator::Run,
+   * Simulator::Schedule and Simulator::ScheduleWithContext.
+   */
   static void Destroy (void);
 
-  /** \copydoc SimulatorImpl::IsFinished */
+  /**
+   * Check if the simulation should finish.
+   *
+   * Reasons to finish are because there are
+   * no more events lefts to be scheduled, or if simulation
+   * time has already reached the "stop time" (see Simulator::Stop()).
+   *
+   * @return @c true if no more events or stop time reached.
+   */
   static bool IsFinished (void);
 
-  /** \copydoc SimulatorImpl::Run */
+  /**
+   * Run the simulation.
+   *
+   * The simulation will run until one of:
+   *   - No events are present anymore
+   *   - The user called Simulator::Stop
+   *   - The user called Simulator::Stop with a stop time and the
+   *     expiration time of the next event to be processed
+   *     is greater than or equal to the stop time.
+   */
   static void Run (void);
 
-  /** \copydoc SimulatorImpl::Stop(void) */
+  /**
+   * Tell the Simulator the calling event should be the last one
+   * executed.
+   *
+   * If a running event invokes this method, it will be the last
+   * event executed by the Simulator::Run method before
+   * returning to the caller.
+   */
   static void Stop (void);
 
-  /** \copydoc SimulatorImpl::Stop(Time const &) */
-  static void Stop (Time const &time);
+  /**
+   * Schedule the time delay until the Simulator should stop.
+   *
+   * Force the Simulator::Run method to return to the caller when the
+   * expiration time of the next event to be processed is greater than
+   * or equal to the stop time.  The stop time is relative to the
+   * current simulation time.
+   * @param [in] delay The stop time, relative to the current time.
+   */
+  static void Stop (Time const &delay);
 
   /**
-   * \name Schedule events (in the same context) to run at a future time.
+   * @name Schedule events (in the same context) to run at a future time.
    */
   /** @{ */
   /**
-   * Schedule an event to expire at the relative time "time"
-   * is reached.  This can be thought of as scheduling an event
-   * for the current simulation time plus the Time passed as a
-   * parameter
+   * Schedule an event to expire after @p delay.
+   * This can be thought of as scheduling an event
+   * for the current simulation time plus the @p delay  passed as a
+   * parameter.
    *
    * When the event expires (when it becomes due to be run), the 
    * input method will be invoked on the input object.
    *
-   * @param time the relative expiration time of the event.
-   * @param mem_ptr member method pointer to invoke
-   * @param obj the object on which to invoke the member method
-   * @returns an id for the scheduled event.
+   * @tparam MEM @inferred Class method function signature type.
+   * @tparam OBJ @inferred Class type of the object.
+   * @param [in] delay The relative expiration time of the event.
+   * @param [in] mem_ptr Member method pointer to invoke
+   * @param [in] obj The object on which to invoke the member method
+   * @returns The id for the scheduled event.
    */
   template <typename MEM, typename OBJ>
-  static EventId Schedule (Time const &time, MEM mem_ptr, OBJ obj);
+  static EventId Schedule (Time const &delay, MEM mem_ptr, OBJ obj);
 
   /**
-   * @param time the relative expiration time of the event.
-   * @param mem_ptr member method pointer to invoke
-   * @param obj the object on which to invoke the member method
-   * @param a1 the first argument to pass to the invoked method
-   * @returns an id for the scheduled event.
+   * @see Schedule(const Time&,MEM,OBJ)
+   * @tparam MEM @inferred Class method function signature type.
+   * @tparam OBJ @inferred Class type of the object.
+   * @tparam T1 @inferred Type of first argument.
+   * @param [in] delay The relative expiration time of the event.
+   * @param [in] mem_ptr Member method pointer to invoke
+   * @param [in] obj The object on which to invoke the member method
+   * @param [in] a1 The first argument to pass to the invoked method
+   * @returns The id for the scheduled event.
    */
   template <typename MEM, typename OBJ, typename T1>
-  static EventId Schedule (Time const &time, MEM mem_ptr, OBJ obj, T1 a1);
+  static EventId Schedule (Time const &delay, MEM mem_ptr, OBJ obj, T1 a1);
 
   /**
-   * @param time the relative expiration time of the event.
-   * @param mem_ptr member method pointer to invoke
-   * @param obj the object on which to invoke the member method
-   * @param a1 the first argument to pass to the invoked method
-   * @param a2 the second argument to pass to the invoked method
-   * @returns an id for the scheduled event.
+   * @see Schedule(const Time&,MEM,OBJ)
+   * @tparam MEM @inferred Class method function signature type.
+   * @tparam OBJ @inferred Class type of the object.
+   * @tparam T1 @inferred Type of first argument.
+   * @tparam T2 @inferred Type of second argument.
+   * @param [in] delay The relative expiration time of the event.
+   * @param [in] mem_ptr Member method pointer to invoke
+   * @param [in] obj The object on which to invoke the member method
+   * @param [in] a1 The first argument to pass to the invoked method
+   * @param [in] a2 The second argument to pass to the invoked method
+   * @returns The id for the scheduled event.
    */
   template <typename MEM, typename OBJ, typename T1, typename T2>
-  static EventId Schedule (Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2);
+  static EventId Schedule (Time const &delay, MEM mem_ptr, OBJ obj, T1 a1, T2 a2);
 
   /**
-   * @param time the relative expiration time of the event.
-   * @param mem_ptr member method pointer to invoke
-   * @param obj the object on which to invoke the member method
-   * @param a1 the first argument to pass to the invoked method
-   * @param a2 the second argument to pass to the invoked method
-   * @param a3 the third argument to pass to the invoked method
-   * @returns an id for the scheduled event.
+   * @see Schedule(const Time&,MEM,OBJ)
+   * @tparam MEM @inferred Class method function signature type.
+   * @tparam OBJ @inferred Class type of the object.
+   * @tparam T1 @inferred Type of first argument.
+   * @tparam T2 @inferred Type of second argument.
+   * @tparam T3 @inferred Type of third argument.
+   * @param [in] delay The relative expiration time of the event.
+   * @param [in] mem_ptr Member method pointer to invoke
+   * @param [in] obj The object on which to invoke the member method
+   * @param [in] a1 The first argument to pass to the invoked method
+   * @param [in] a2 The second argument to pass to the invoked method
+   * @param [in] a3 The third argument to pass to the invoked method
+   * @returns The id for the scheduled event.
    */
   template <typename MEM, typename OBJ, 
             typename T1, typename T2, typename T3>
-  static EventId Schedule (Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3);
+  static EventId Schedule (Time const &delay, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3);
 
   /**
-   * @param time the relative expiration time of the event.
-   * @param mem_ptr member method pointer to invoke
-   * @param obj the object on which to invoke the member method
-   * @param a1 the first argument to pass to the invoked method
-   * @param a2 the second argument to pass to the invoked method
-   * @param a3 the third argument to pass to the invoked method
-   * @param a4 the fourth argument to pass to the invoked method
-   * @returns an id for the scheduled event.
+   * @see Schedule(const Time&,MEM,OBJ)
+   * @tparam MEM @inferred Class method function signature type.
+   * @tparam OBJ @inferred Class type of the object.
+   * @tparam T1 @inferred Type of first argument.
+   * @tparam T2 @inferred Type of second argument.
+   * @tparam T3 @inferred Type of third argument.
+   * @tparam T4 @inferred Type of fourth argument.
+   * @param [in] delay The relative expiration time of the event.
+   * @param [in] mem_ptr Member method pointer to invoke
+   * @param [in] obj The object on which to invoke the member method
+   * @param [in] a1 The first argument to pass to the invoked method
+   * @param [in] a2 The second argument to pass to the invoked method
+   * @param [in] a3 The third argument to pass to the invoked method
+   * @param [in] a4 The fourth argument to pass to the invoked method
+   * @returns The id for the scheduled event.
    */
   template <typename MEM, typename OBJ, 
             typename T1, typename T2, typename T3, typename T4>
-  static EventId Schedule (Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3, T4 a4);
+  static EventId Schedule (Time const &delay, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3, T4 a4);
 
   /**
-   * @param time the relative expiration time of the event.
-   * @param mem_ptr member method pointer to invoke
-   * @param obj the object on which to invoke the member method
-   * @param a1 the first argument to pass to the invoked method
-   * @param a2 the second argument to pass to the invoked method
-   * @param a3 the third argument to pass to the invoked method
-   * @param a4 the fourth argument to pass to the invoked method
-   * @param a5 the fifth argument to pass to the invoked method
-   * @returns an id for the scheduled event.
+   * @see Schedule(const Time&,MEM,OBJ)
+   * @tparam MEM @inferred Class method function signature type.
+   * @tparam OBJ @inferred Class type of the object.
+   * @tparam T1 @inferred Type of first argument.
+   * @tparam T2 @inferred Type of second argument.
+   * @tparam T3 @inferred Type of third argument.
+   * @tparam T4 @inferred Type of fourth argument.
+   * @tparam T5 @inferred Type of fifth argument.
+   * @param [in] delay The relative expiration time of the event.
+   * @param [in] mem_ptr Member method pointer to invoke
+   * @param [in] obj The object on which to invoke the member method
+   * @param [in] a1 The first argument to pass to the invoked method
+   * @param [in] a2 The second argument to pass to the invoked method
+   * @param [in] a3 The third argument to pass to the invoked method
+   * @param [in] a4 The fourth argument to pass to the invoked method
+   * @param [in] a5 The fifth argument to pass to the invoked method
+   * @returns The id for the scheduled event.
    */
   template <typename MEM, typename OBJ, 
             typename T1, typename T2, typename T3, typename T4, typename T5>
-  static EventId Schedule (Time const &time, MEM mem_ptr, OBJ obj, 
+  static EventId Schedule (Time const &delay, MEM mem_ptr, OBJ obj, 
                            T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
   /**
-   * @param time the relative expiration time of the event.
-   * @param f the function to invoke
-   * @returns an id for the scheduled event.
-   */
-  static EventId Schedule (Time const &time, void (*f)(void));
-
-  /**
-   * @param time the relative expiration time of the event.
-   * @param f the function to invoke
-   * @param a1 the first argument to pass to the function to invoke
-   * @returns an id for the scheduled event.
+   * @copybrief Schedule(const Time&,MEM,OBJ)
+   *
+   * When the event expires (when it becomes due to be run), the
+   * function will be invoked with any supplied arguments.
+   * @param [in] delay The relative expiration time of the event.
+   * @param [in] f The function to invoke
+   * @returns The id for the scheduled event.
+   */
+  static EventId Schedule (Time const &delay, void (*f)(void));
+
+  /**
+   * @see Schedule(const Time&,(*)())
+   * @tparam U1 @inferred Formal type of the first argument to the function.
+   * @tparam T1 @inferred Actual type of the first argument.
+   * @param [in] delay The relative expiration time of the event.
+   * @param [in] f The function to invoke
+   * @param [in] a1 The first argument to pass to the function to invoke.
+   * @returns The id for the scheduled event.
    */
   template <typename U1, typename T1>
-  static EventId Schedule (Time const &time, void (*f)(U1), T1 a1);
+  static EventId Schedule (Time const &delay, void (*f)(U1), T1 a1);
 
   /**
-   * @param time the relative expiration time of the event.
-   * @param f the function to invoke
-   * @param a1 the first argument to pass to the function to invoke
-   * @param a2 the second argument to pass to the function to invoke
-   * @returns an id for the scheduled event.
+   * @see Schedule(const Time&,(*)())
+   * @tparam U1 @inferred Formal type of the first argument to the function.
+   * @tparam U2 @inferred Formal type of the second argument to the function.
+   * @tparam T1 @inferred Actual type of the first argument.
+   * @tparam T2 @inferred Actual type of the second argument.
+   * @param [in] delay The relative expiration time of the event.
+   * @param [in] f The function to invoke
+   * @param [in] a1 The first argument to pass to the function to invoke
+   * @param [in] a2 The second argument to pass to the function to invoke
+   * @returns The id for the scheduled event.
    */
-  template <typename U1, typename U2, typename T1, typename T2>
-  static EventId Schedule (Time const &time, void (*f)(U1,U2), T1 a1, T2 a2);
+  template <typename U1, typename U2,
+            typename T1, typename T2>
+  static EventId Schedule (Time const &delay, void (*f)(U1,U2), T1 a1, T2 a2);
 
   /**
-   * @param time the relative expiration time of the event.
-   * @param f the function to invoke
-   * @param a1 the first argument to pass to the function to invoke
-   * @param a2 the second argument to pass to the function to invoke
-   * @param a3 the third argument to pass to the function to invoke
-   * @returns an id for the scheduled event.
+   * @see Schedule(const Time&,void(*)())
+   * @tparam U1 @inferred Formal type of the first argument to the function.
+   * @tparam U2 @inferred Formal type of the second argument to the function.
+   * @tparam U3 @inferred Formal type of the third argument to the function.
+   * @tparam T1 @inferred Actual type of the first argument.
+   * @tparam T2 @inferred Actual type of the second argument.
+   * @tparam T3 @inferred Actual type of the third argument.
+   * @param [in] delay The relative expiration time of the event.
+   * @param [in] f The function to invoke
+   * @param [in] a1 The first argument to pass to the function to invoke
+   * @param [in] a2 The second argument to pass to the function to invoke
+   * @param [in] a3 The third argument to pass to the function to invoke
+   * @returns The id for the scheduled event.
    */
-  template <typename U1, typename U2, typename U3, typename T1, typename T2, typename T3>
-  static EventId Schedule (Time const &time, void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3);
+  template <typename U1, typename U2, typename U3,
+            typename T1, typename T2, typename T3>
+  static EventId Schedule (Time const &delay, void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3);
 
   /**
-   * @param time the relative expiration time of the event.
-   * @param f the function to invoke
-   * @param a1 the first argument to pass to the function to invoke
-   * @param a2 the second argument to pass to the function to invoke
-   * @param a3 the third argument to pass to the function to invoke
-   * @param a4 the fourth argument to pass to the function to invoke
-   * @returns an id for the scheduled event.
+   * @see Schedule(const Time&,(*)(void))
+   * @tparam U1 @inferred Formal type of the first argument to the function.
+   * @tparam U2 @inferred Formal type of the second argument to the function.
+   * @tparam U3 @inferred Formal type of the third argument to the function.
+   * @tparam U4 @inferred Formal type of the fourth argument to the function.
+   * @tparam T1 @inferred Actual type of the first argument.
+   * @tparam T2 @inferred Actual type of the second argument.
+   * @tparam T3 @inferred Actual type of the third argument.
+   * @tparam T4 @inferred Actual type of the fourth argument.
+   * @param [in] delay The relative expiration time of the event.
+   * @param [in] f The function to invoke
+   * @param [in] a1 The first argument to pass to the function to invoke
+   * @param [in] a2 The second argument to pass to the function to invoke
+   * @param [in] a3 The third argument to pass to the function to invoke
+   * @param [in] a4 The fourth argument to pass to the function to invoke
+   * @returns The id for the scheduled event.
    */
   template <typename U1, typename U2, typename U3, typename U4, 
             typename T1, typename T2, typename T3, typename T4>
-  static EventId Schedule (Time const &time, void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4);
+  static EventId Schedule (Time const &delay, void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4);
 
   /**
-   * @param time the relative expiration time of the event.
-   * @param f the function to invoke
-   * @param a1 the first argument to pass to the function to invoke
-   * @param a2 the second argument to pass to the function to invoke
-   * @param a3 the third argument to pass to the function to invoke
-   * @param a4 the fourth argument to pass to the function to invoke
-   * @param a5 the fifth argument to pass to the function to invoke
-   * @returns an id for the scheduled event.
+   * @see Schedule(const Time&,void(*)(void))
+   * @tparam U1 @inferred Formal type of the first argument to the function.
+   * @tparam U2 @inferred Formal type of the second argument to the function.
+   * @tparam U3 @inferred Formal type of the third argument to the function.
+   * @tparam U4 @inferred Formal type of the fourth argument to the function.
+   * @tparam U5 @inferred Formal type of the fifth argument to the function.
+   * @tparam T1 @inferred Actual type of the first argument.
+   * @tparam T2 @inferred Actual type of the second argument.
+   * @tparam T3 @inferred Actual type of the third argument.
+   * @tparam T4 @inferred Actual type of the fourth argument.
+   * @tparam T5 @inferred Actual type of the fifth argument.
+   * @param [in] delay The relative expiration time of the event.
+   * @param [in] f The function to invoke
+   * @param [in] a1 The first argument to pass to the function to invoke
+   * @param [in] a2 The second argument to pass to the function to invoke
+   * @param [in] a3 The third argument to pass to the function to invoke
+   * @param [in] a4 The fourth argument to pass to the function to invoke
+   * @param [in] a5 The fifth argument to pass to the function to invoke
+   * @returns The id for the scheduled event.
    */
   template <typename U1, typename U2, typename U3, typename U4, typename U5,
             typename T1, typename T2, typename T3, typename T4, typename T5>
-  static EventId Schedule (Time const &time, void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
+  static EventId Schedule (Time const &delay, void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
 
   /** @} */
 
   /**
-   * \name Schedule events (in a different context) to run at a particular time.
+   * @name Schedule events (in a different context) to run now or at a future time.
    *
-   * See \ref main-test-sync.cc for example usage.
+   * See @ref main-test-sync.cc for example usage.
    */
   /** @{ */
   /**
@@ -288,167 +402,222 @@
    * A context of 0xffffffff means no context is specified.
    * This method is thread-safe: it can be called from any thread.
    *
-   * @param time the relative expiration time of the event.
-   * @param context user-specified context parameter
-   * @param mem_ptr member method pointer to invoke
-   * @param obj the object on which to invoke the member method
+   * @see Schedule(const Time&,MEM,OBJ)
+   * @tparam MEM @inferred Class method function signature type.
+   * @tparam OBJ @inferred Class type of the object.
+   * @param [in] context User-specified context parameter
+   * @param [in] delay The relative expiration time of the event.
+   * @param [in] mem_ptr Member method pointer to invoke
+   * @param [in] obj The object on which to invoke the member method
    */
   template <typename MEM, typename OBJ>
-  static void ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj);
+  static void ScheduleWithContext (uint32_t context, Time const &delay, MEM mem_ptr, OBJ obj);
 
   /**
-   * This method is thread-safe: it can be called from any thread.
-   *
-   * @param time the relative expiration time of the event.
-   * @param context user-specified context parameter
-   * @param mem_ptr member method pointer to invoke
-   * @param obj the object on which to invoke the member method
-   * @param a1 the first argument to pass to the invoked method
+   * @see ScheduleWithContext(uint32_t,const Time&,MEM,OBJ)
+   * @tparam MEM @inferred Class method function signature type.
+   * @tparam OBJ @inferred Class type of the object.
+   * @tparam T1 @inferred Type of first argument.
+   * @param [in] context User-specified context parameter
+   * @param [in] delay The relative expiration time of the event.
+   * @param [in] mem_ptr Member method pointer to invoke
+   * @param [in] obj The object on which to invoke the member method
+   * @param [in] a1 The first argument to pass to the invoked method
    */
   template <typename MEM, typename OBJ, typename T1>
-  static void ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj, T1 a1);
+  static void ScheduleWithContext (uint32_t context, Time const &delay, MEM mem_ptr, OBJ obj, T1 a1);
 
   /**
-   * This method is thread-safe: it can be called from any thread.
-   *
-   * @param time the relative expiration time of the event.
-   * @param context user-specified context parameter
-   * @param mem_ptr member method pointer to invoke
-   * @param obj the object on which to invoke the member method
-   * @param a1 the first argument to pass to the invoked method
-   * @param a2 the second argument to pass to the invoked method
+   * @see ScheduleWithContext(uint32_t,const Time&,MEM,OBJ)
+   * @tparam MEM @inferred Class method function signature type.
+   * @tparam OBJ @inferred Class type of the object.
+   * @tparam T1 @inferred Type of first argument.
+   * @tparam T2 @inferred Type of second argument.
+   * @param [in] context User-specified context parameter
+   * @param [in] delay The relative expiration time of the event.
+   * @param [in] mem_ptr Member method pointer to invoke
+   * @param [in] obj The object on which to invoke the member method
+   * @param [in] a1 The first argument to pass to the invoked method
+   * @param [in] a2 The second argument to pass to the invoked method
    */
   template <typename MEM, typename OBJ, typename T1, typename T2>
-  static void ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2);
+  static void ScheduleWithContext (uint32_t context, Time const &delay, MEM mem_ptr, OBJ obj, T1 a1, T2 a2);
 
   /**
-   * This method is thread-safe: it can be called from any thread.
-   *
-   * @param time the relative expiration time of the event.
-   * @param context user-specified context parameter
-   * @param mem_ptr member method pointer to invoke
-   * @param obj the object on which to invoke the member method
-   * @param a1 the first argument to pass to the invoked method
-   * @param a2 the second argument to pass to the invoked method
-   * @param a3 the third argument to pass to the invoked method
+   * @see ScheduleWithContext(uint32_t,const Time&,MEM,OBJ)
+   * @tparam MEM @inferred Class method function signature type.
+   * @tparam OBJ @inferred Class type of the object.
+   * @tparam T1 @inferred Type of first argument.
+   * @tparam T2 @inferred Type of second argument.
+   * @tparam T3 @inferred Type of third argument.
+   * @param [in] context User-specified context parameter
+   * @param [in] delay The relative expiration time of the event.
+   * @param [in] mem_ptr Member method pointer to invoke
+   * @param [in] obj The object on which to invoke the member method
+   * @param [in] a1 The first argument to pass to the invoked method
+   * @param [in] a2 The second argument to pass to the invoked method
+   * @param [in] a3 The third argument to pass to the invoked method
    */
   template <typename MEM, typename OBJ, 
             typename T1, typename T2, typename T3>
-  static void ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3);
+  static void ScheduleWithContext (uint32_t context, Time const &delay, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3);
 
   /**
-   * This method is thread-safe: it can be called from any thread.
-   *
-   * @param time the relative expiration time of the event.
-   * @param context user-specified context parameter
-   * @param mem_ptr member method pointer to invoke
-   * @param obj the object on which to invoke the member method
-   * @param a1 the first argument to pass to the invoked method
-   * @param a2 the second argument to pass to the invoked method
-   * @param a3 the third argument to pass to the invoked method
-   * @param a4 the fourth argument to pass to the invoked method
+   * @see ScheduleWithContext(uint32_t,const Time&,MEM,OBJ)
+   * @tparam MEM @inferred Class method function signature type.
+   * @tparam OBJ @inferred Class type of the object.
+   * @tparam T1 @inferred Type of first argument.
+   * @tparam T2 @inferred Type of second argument.
+   * @tparam T3 @inferred Type of third argument.
+   * @tparam T4 @inferred Type of fourth argument.
+   * @param [in] context User-specified context parameter
+   * @param [in] delay The relative expiration time of the event.
+   * @param [in] mem_ptr Member method pointer to invoke
+   * @param [in] obj The object on which to invoke the member method
+   * @param [in] a1 The first argument to pass to the invoked method
+   * @param [in] a2 The second argument to pass to the invoked method
+   * @param [in] a3 The third argument to pass to the invoked method
+   * @param [in] a4 The fourth argument to pass to the invoked method
    */
   template <typename MEM, typename OBJ, 
             typename T1, typename T2, typename T3, typename T4>
-  static void ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3, T4 a4);
+  static void ScheduleWithContext (uint32_t context, Time const &delay, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3, T4 a4);
 
   /**
-   * This method is thread-safe: it can be called from any thread.
-   *
-   * @param time the relative expiration time of the event.
-   * @param context user-specified context parameter
-   * @param mem_ptr member method pointer to invoke
-   * @param obj the object on which to invoke the member method
-   * @param a1 the first argument to pass to the invoked method
-   * @param a2 the second argument to pass to the invoked method
-   * @param a3 the third argument to pass to the invoked method
-   * @param a4 the fourth argument to pass to the invoked method
-   * @param a5 the fifth argument to pass to the invoked method
+   * @see ScheduleWithContext(uint32_t,const Time&,MEM,OBJ)
+   * @tparam MEM @inferred Class method function signature type.
+   * @tparam OBJ @inferred Class type of the object.
+   * @tparam T1 @inferred Type of first argument.
+   * @tparam T2 @inferred Type of second argument.
+   * @tparam T3 @inferred Type of third argument.
+   * @tparam T4 @inferred Type of fourth argument.
+   * @tparam T5 @inferred Type of fifth argument.
+   * @param [in] context User-specified context parameter
+   * @param [in] delay The relative expiration time of the event.
+   * @param [in] mem_ptr Member method pointer to invoke
+   * @param [in] obj The object on which to invoke the member method
+   * @param [in] a1 The first argument to pass to the invoked method
+   * @param [in] a2 The second argument to pass to the invoked method
+   * @param [in] a3 The third argument to pass to the invoked method
+   * @param [in] a4 The fourth argument to pass to the invoked method
+   * @param [in] a5 The fifth argument to pass to the invoked method
    */
   template <typename MEM, typename OBJ, 
             typename T1, typename T2, typename T3, typename T4, typename T5>
-  static void ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj, 
+  static void ScheduleWithContext (uint32_t context, Time const &delay, MEM mem_ptr, OBJ obj, 
                                    T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
   /**
-   * This method is thread-safe: it can be called from any thread.
+   * @copybrief ScheduleWithContext(uint32_t,const Time&,MEM,OBJ)
    *
-   * @param time the relative expiration time of the event.
-   * @param context user-specified context parameter
-   * @param f the function to invoke
-   */
-  static void ScheduleWithContext (uint32_t context, Time const &time, void (*f)(void));
+   * When the event expires (when it becomes due to be run), the
+   * function will be invoked with any supplied arguments.
+   *
+   * This method is thread-safe: it can be called from any thread.
+   * @param [in] context User-specified context parameter
+   * @param [in] delay The relative expiration time of the event.
+   * @param [in] f The function to invoke
+   */
+  static void ScheduleWithContext (uint32_t context, Time const &delay, void (*f)(void));
 
   /**
-   * This method is thread-safe: it can be called from any thread.
-   *
-   * @param time the relative expiration time of the event.
-   * @param context user-specified context parameter
-   * @param f the function to invoke
-   * @param a1 the first argument to pass to the function to invoke
+   * @see ScheduleWithContext(uint32_t,const Time&,(*)())
+   * @tparam U1 @inferred Formal type of the first argument to the function.
+   * @tparam T1 @inferred Actual type of the first argument.
+   * @param [in] context User-specified context parameter
+   * @param [in] delay The relative expiration time of the event.
+   * @param [in] f The function to invoke
+   * @param [in] a1 The first argument to pass to the function to invoke
    */
-  template <typename U1, typename T1>
-  static void ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1), T1 a1);
+  template <typename U1,
+            typename T1>
+  static void ScheduleWithContext (uint32_t context, Time const &delay, void (*f)(U1), T1 a1);
 
   /**
-   * This method is thread-safe: it can be called from any thread.
-   *
-   * @param time the relative expiration time of the event.
-   * @param context user-specified context parameter
-   * @param f the function to invoke
-   * @param a1 the first argument to pass to the function to invoke
-   * @param a2 the second argument to pass to the function to invoke
+   * @see ScheduleWithContext(uint32_t,const Time&,(*)())
+   * @tparam U1 @inferred Formal type of the first argument to the function.
+   * @tparam U2 @inferred Formal type of the second argument to the function.
+   * @tparam T1 @inferred Actual type of the first argument.
+   * @tparam T2 @inferred Actual type of the second argument.
+   * @param [in] context User-specified context parameter
+   * @param [in] delay The relative expiration time of the event.
+   * @param [in] f The function to invoke
+   * @param [in] a1 The first argument to pass to the function to invoke
+   * @param [in] a2 The second argument to pass to the function to invoke
    */
-  template <typename U1, typename U2, typename T1, typename T2>
-  static void ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1,U2), T1 a1, T2 a2);
+  template <typename U1, typename U2,
+            typename T1, typename T2>
+  static void ScheduleWithContext (uint32_t context, Time const &delay, void (*f)(U1,U2), T1 a1, T2 a2);
 
   /**
-   * This method is thread-safe: it can be called from any thread.
-   *
-   * @param time the relative expiration time of the event.
-   * @param context user-specified context parameter
-   * @param f the function to invoke
-   * @param a1 the first argument to pass to the function to invoke
-   * @param a2 the second argument to pass to the function to invoke
-   * @param a3 the third argument to pass to the function to invoke
+   * @see ScheduleWithContext(uint32_t,const Time&,(*)())
+   * @tparam U1 @inferred Formal type of the first argument to the function.
+   * @tparam U2 @inferred Formal type of the second argument to the function.
+   * @tparam U3 @inferred Formal type of the third argument to the function.
+   * @tparam T1 @inferred Actual type of the first argument.
+   * @tparam T2 @inferred Actual type of the second argument.
+   * @tparam T3 @inferred Actual type of the third argument.
+   * @param [in] context User-specified context parameter
+   * @param [in] delay The relative expiration time of the event.
+   * @param [in] f The function to invoke
+   * @param [in] a1 The first argument to pass to the function to invoke
+   * @param [in] a2 The second argument to pass to the function to invoke
+   * @param [in] a3 The third argument to pass to the function to invoke
    */
-  template <typename U1, typename U2, typename U3, typename T1, typename T2, typename T3>
-  static void ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3);
+  template <typename U1, typename U2, typename U3,
+            typename T1, typename T2, typename T3>
+  static void ScheduleWithContext (uint32_t context, Time const &delay, void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3);
 
   /**
-   * This method is thread-safe: it can be called from any thread.
-   *
-   * @param time the relative expiration time of the event.
-   * @param context user-specified context parameter
-   * @param f the function to invoke
-   * @param a1 the first argument to pass to the function to invoke
-   * @param a2 the second argument to pass to the function to invoke
-   * @param a3 the third argument to pass to the function to invoke
-   * @param a4 the fourth argument to pass to the function to invoke
+   * @see ScheduleWithContext(uint32_t,const Time&,(*)())
+   * @tparam U1 @inferred Formal type of the first argument to the function.
+   * @tparam U2 @inferred Formal type of the second argument to the function.
+   * @tparam U3 @inferred Formal type of the third argument to the function.
+   * @tparam U4 @inferred Formal type of the fourth argument to the function.
+   * @tparam T1 @inferred Actual type of the first argument.
+   * @tparam T2 @inferred Actual type of the second argument.
+   * @tparam T3 @inferred Actual type of the third argument.
+   * @tparam T4 @inferred Actual type of the fourth argument.
+   * @param [in] context User-specified context parameter
+   * @param [in] delay The relative expiration time of the event.
+   * @param [in] f The function to invoke
+   * @param [in] a1 The first argument to pass to the function to invoke
+   * @param [in] a2 The second argument to pass to the function to invoke
+   * @param [in] a3 The third argument to pass to the function to invoke
+   * @param [in] a4 The fourth argument to pass to the function to invoke
    */
   template <typename U1, typename U2, typename U3, typename U4, 
             typename T1, typename T2, typename T3, typename T4>
-  static void ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4);
+  static void ScheduleWithContext (uint32_t context, Time const &delay, void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4);
 
   /**
-   * This method is thread-safe: it can be called from any thread.
-   *
-   * @param time the relative expiration time of the event.
-   * @param context user-specified context parameter
-   * @param f the function to invoke
-   * @param a1 the first argument to pass to the function to invoke
-   * @param a2 the second argument to pass to the function to invoke
-   * @param a3 the third argument to pass to the function to invoke
-   * @param a4 the fourth argument to pass to the function to invoke
-   * @param a5 the fifth argument to pass to the function to invoke
+   * @see ScheduleWithContext(uint32_t,const Time&,(*)())
+   * @tparam U1 @inferred Formal type of the first argument to the function.
+   * @tparam U2 @inferred Formal type of the second argument to the function.
+   * @tparam U3 @inferred Formal type of the third argument to the function.
+   * @tparam U4 @inferred Formal type of the fourth argument to the function.
+   * @tparam U5 @inferred Formal type of the fifth argument to the function.
+   * @tparam T1 @inferred Actual type of the first argument.
+   * @tparam T2 @inferred Actual type of the second argument.
+   * @tparam T3 @inferred Actual type of the third argument.
+   * @tparam T4 @inferred Actual type of the fourth argument.
+   * @tparam T5 @inferred Actual type of the fifth argument.
+   * @param [in] context User-specified context parameter
+   * @param [in] delay The relative expiration time of the event.
+   * @param [in] f The function to invoke
+   * @param [in] a1 The first argument to pass to the function to invoke
+   * @param [in] a2 The second argument to pass to the function to invoke
+   * @param [in] a3 The third argument to pass to the function to invoke
+   * @param [in] a4 The fourth argument to pass to the function to invoke
+   * @param [in] a5 The fifth argument to pass to the function to invoke
    */
   template <typename U1, typename U2, typename U3, typename U4, typename U5,
             typename T1, typename T2, typename T3, typename T4, typename T5>
-  static void ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
+  static void ScheduleWithContext (uint32_t context, Time const &delay, void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
 
   /** @} */
   
   /**
-   * \name Schedule events (in the same context) to run now.
+   * @name Schedule events (in the same context) to run now.
    */
   /** @{ */
   /**
@@ -456,17 +625,23 @@
    * to expire "Now" are scheduled FIFO, after all normal events
    * have expired. 
    *
-   * @param mem_ptr member method pointer to invoke
-   * @param obj the object on which to invoke the member method
+   * @tparam MEM @inferred Class method function signature type.
+   * @tparam OBJ @inferred Class type of the object.
+   * @param [in] mem_ptr Member method pointer to invoke
+   * @param [in] obj The object on which to invoke the member method
    * @return The EventId of the scheduled event.
    */
   template <typename MEM, typename OBJ>
   static EventId ScheduleNow (MEM mem_ptr, OBJ obj);
 
   /**
-   * @param mem_ptr member method pointer to invoke
-   * @param obj the object on which to invoke the member method
-   * @param a1 the first argument to pass to the invoked method
+   * @see ScheduleNow(MEM,OBJ)
+   * @tparam MEM @inferred Class method function signature type.
+   * @tparam OBJ @inferred Class type of the object.
+   * @tparam T1 @inferred Type of first argument.
+   * @param [in] mem_ptr Member method pointer to invoke
+   * @param [in] obj The object on which to invoke the member method
+   * @param [in] a1 The first argument to pass to the invoked method
    * @return The EventId of the scheduled event.
    */
   template <typename MEM, typename OBJ, 
@@ -474,10 +649,15 @@
   static EventId ScheduleNow (MEM mem_ptr, OBJ obj, T1 a1);
 
   /**
-   * @param mem_ptr member method pointer to invoke
-   * @param obj the object on which to invoke the member method
-   * @param a1 the first argument to pass to the invoked method
-   * @param a2 the second argument to pass to the invoked method
+   * @see ScheduleNow(MEM,OBJ)
+   * @tparam MEM @inferred Class method function signature type.
+   * @tparam OBJ @inferred Class type of the object.
+   * @tparam T1 @inferred Type of first argument.
+   * @tparam T2 @inferred Type of second argument.
+   * @param [in] mem_ptr Member method pointer to invoke
+   * @param [in] obj The object on which to invoke the member method
+   * @param [in] a1 The first argument to pass to the invoked method
+   * @param [in] a2 The second argument to pass to the invoked method
    * @return The EventId of the scheduled event.
    */
   template <typename MEM, typename OBJ, 
@@ -485,11 +665,17 @@
   static EventId ScheduleNow (MEM mem_ptr, OBJ obj, T1 a1, T2 a2);
 
   /**
-   * @param mem_ptr member method pointer to invoke
-   * @param obj the object on which to invoke the member method
-   * @param a1 the first argument to pass to the invoked method
-   * @param a2 the second argument to pass to the invoked method
-   * @param a3 the third argument to pass to the invoked method
+   * @see ScheduleNow(MEM,OBJ)
+   * @tparam MEM @inferred Class method function signature type.
+   * @tparam OBJ @inferred Class type of the object.
+   * @tparam T1 @inferred Type of first argument.
+   * @tparam T2 @inferred Type of second argument.
+   * @tparam T3 @inferred Type of third argument.
+   * @param [in] mem_ptr Member method pointer to invoke
+   * @param [in] obj The object on which to invoke the member method
+   * @param [in] a1 The first argument to pass to the invoked method
+   * @param [in] a2 The second argument to pass to the invoked method
+   * @param [in] a3 The third argument to pass to the invoked method
    * @return The EventId of the scheduled event.
    */
   template <typename MEM, typename OBJ, 
@@ -497,12 +683,19 @@
   static EventId ScheduleNow (MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3);
 
   /**
-   * @param mem_ptr member method pointer to invoke
-   * @param obj the object on which to invoke the member method
-   * @param a1 the first argument to pass to the invoked method
-   * @param a2 the second argument to pass to the invoked method
-   * @param a3 the third argument to pass to the invoked method
-   * @param a4 the fourth argument to pass to the invoked method
+   * @see ScheduleNow(MEM,OBJ)
+   * @tparam MEM @inferred Class method function signature type.
+   * @tparam OBJ @inferred Class type of the object.
+   * @tparam T1 @inferred Type of first argument.
+   * @tparam T2 @inferred Type of second argument.
+   * @tparam T3 @inferred Type of third argument.
+   * @tparam T4 @inferred Type of fourth argument.
+   * @param [in] mem_ptr Member method pointer to invoke
+   * @param [in] obj The object on which to invoke the member method
+   * @param [in] a1 The first argument to pass to the invoked method
+   * @param [in] a2 The second argument to pass to the invoked method
+   * @param [in] a3 The third argument to pass to the invoked method
+   * @param [in] a4 The fourth argument to pass to the invoked method
    * @return The EventId of the scheduled event.
    */
   template <typename MEM, typename OBJ, 
@@ -510,13 +703,21 @@
   static EventId ScheduleNow (MEM mem_ptr, OBJ obj, 
                               T1 a1, T2 a2, T3 a3, T4 a4);
   /**
-   * @param mem_ptr member method pointer to invoke
-   * @param obj the object on which to invoke the member method
-   * @param a1 the first argument to pass to the invoked method
-   * @param a2 the second argument to pass to the invoked method
-   * @param a3 the third argument to pass to the invoked method
-   * @param a4 the fourth argument to pass to the invoked method
-   * @param a5 the fifth argument to pass to the invoked method
+   * @see ScheduleNow(MEM,OBJ)
+   * @tparam MEM @inferred Class method function signature type.
+   * @tparam OBJ @inferred Class type of the object.
+   * @tparam T1 @inferred Type of first argument.
+   * @tparam T2 @inferred Type of second argument.
+   * @tparam T3 @inferred Type of third argument.
+   * @tparam T4 @inferred Type of fourth argument.
+   * @tparam T5 @inferred Type of fifth argument.
+   * @param [in] mem_ptr Member method pointer to invoke
+   * @param [in] obj The object on which to invoke the member method
+   * @param [in] a1 The first argument to pass to the invoked method
+   * @param [in] a2 The second argument to pass to the invoked method
+   * @param [in] a3 The third argument to pass to the invoked method
+   * @param [in] a4 The fourth argument to pass to the invoked method
+   * @param [in] a5 The fifth argument to pass to the invoked method
    * @return The EventId of the scheduled event.
    */
   template <typename MEM, typename OBJ, 
@@ -524,14 +725,21 @@
   static EventId ScheduleNow (MEM mem_ptr, OBJ obj, 
                               T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
   /**
-   * @param f the function to invoke
+   * @copybrief ScheduleNow(MEM,OBJ)
+   *
+   * When the event expires (when it becomes due to be run), the
+   * function will be invoked with any supplied arguments.
+   * @param [in] f The function to invoke
    * @return The EventId of the scheduled event.
    */
   static EventId ScheduleNow (void (*f)(void));
 
   /**
-   * @param f the function to invoke
-   * @param a1 the first argument to pass to the function to invoke
+   * @see ScheduleNow(*)
+   * @tparam U1 @inferred Formal type of the first argument to the function.
+   * @tparam T1 @inferred Actual type of the first argument.
+   * @param [in] f The function to invoke
+   * @param [in] a1 The first argument to pass to the function to invoke
    * @return The EventId of the scheduled event.
    */
   template <typename U1,
@@ -539,9 +747,14 @@
   static EventId ScheduleNow (void (*f)(U1), T1 a1);
 
   /**
-   * @param f the function to invoke
-   * @param a1 the first argument to pass to the function to invoke
-   * @param a2 the second argument to pass to the function to invoke
+   * @see ScheduleNow(*)
+   * @tparam U1 @inferred Formal type of the first argument to the function.
+   * @tparam U2 @inferred Formal type of the second argument to the function.
+   * @tparam T1 @inferred Actual type of the first argument.
+   * @tparam T2 @inferred Actual type of the second argument.
+   * @param [in] f The function to invoke
+   * @param [in] a1 The first argument to pass to the function to invoke
+   * @param [in] a2 The second argument to pass to the function to invoke
    * @return The EventId of the scheduled event.
    */
   template <typename U1, typename U2,
@@ -549,10 +762,17 @@
   static EventId ScheduleNow (void (*f)(U1,U2), T1 a1, T2 a2);
 
   /**
-   * @param f the function to invoke
-   * @param a1 the first argument to pass to the function to invoke
-   * @param a2 the second argument to pass to the function to invoke
-   * @param a3 the third argument to pass to the function to invoke
+   * @see ScheduleNow(*)
+   * @tparam U1 @inferred Formal type of the first argument to the function.
+   * @tparam U2 @inferred Formal type of the second argument to the function.
+   * @tparam U3 @inferred Formal type of the third argument to the function.
+   * @tparam T1 @inferred Actual type of the first argument.
+   * @tparam T2 @inferred Actual type of the second argument.
+   * @tparam T3 @inferred Actual type of the third argument.
+   * @param [in] f The function to invoke
+   * @param [in] a1 The first argument to pass to the function to invoke
+   * @param [in] a2 The second argument to pass to the function to invoke
+   * @param [in] a3 The third argument to pass to the function to invoke
    * @return The EventId of the scheduled event.
    */
   template <typename U1, typename U2, typename U3,
@@ -560,11 +780,20 @@
   static EventId ScheduleNow (void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3);
 
   /**
-   * @param f the function to invoke
-   * @param a1 the first argument to pass to the function to invoke
-   * @param a2 the second argument to pass to the function to invoke
-   * @param a3 the third argument to pass to the function to invoke
-   * @param a4 the fourth argument to pass to the function to invoke
+   * @see ScheduleNow(*)
+   * @tparam U1 @inferred Formal type of the first argument to the function.
+   * @tparam U2 @inferred Formal type of the second argument to the function.
+   * @tparam U3 @inferred Formal type of the third argument to the function.
+   * @tparam U4 @inferred Formal type of the fourth argument to the function.
+   * @tparam T1 @inferred Actual type of the first argument.
+   * @tparam T2 @inferred Actual type of the second argument.
+   * @tparam T3 @inferred Actual type of the third argument.
+   * @tparam T4 @inferred Actual type of the fourth argument.
+   * @param [in] f The function to invoke
+   * @param [in] a1 The first argument to pass to the function to invoke
+   * @param [in] a2 The second argument to pass to the function to invoke
+   * @param [in] a3 The third argument to pass to the function to invoke
+   * @param [in] a4 The fourth argument to pass to the function to invoke
    * @return The EventId of the scheduled event.
    */
   template <typename U1, typename U2, typename U3, typename U4,
@@ -572,12 +801,23 @@
   static EventId ScheduleNow (void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4);
 
   /**
-   * @param f the function to invoke
-   * @param a1 the first argument to pass to the function to invoke
-   * @param a2 the second argument to pass to the function to invoke
-   * @param a3 the third argument to pass to the function to invoke
-   * @param a4 the fourth argument to pass to the function to invoke
-   * @param a5 the fifth argument to pass to the function to invoke
+   * @see ScheduleNow(*)
+   * @tparam U1 @inferred Formal type of the first argument to the function.
+   * @tparam U2 @inferred Formal type of the second argument to the function.
+   * @tparam U3 @inferred Formal type of the third argument to the function.
+   * @tparam U4 @inferred Formal type of the fourth argument to the function.
+   * @tparam U5 @inferred Formal type of the fifth argument to the function.
+   * @tparam T1 @inferred Actual type of the first argument.
+   * @tparam T2 @inferred Actual type of the second argument.
+   * @tparam T3 @inferred Actual type of the third argument.
+   * @tparam T4 @inferred Actual type of the fourth argument.
+   * @tparam T5 @inferred Actual type of the fifth argument.
+   * @param [in] f The function to invoke
+   * @param [in] a1 The first argument to pass to the function to invoke
+   * @param [in] a2 The second argument to pass to the function to invoke
+   * @param [in] a3 The third argument to pass to the function to invoke
+   * @param [in] a4 The fourth argument to pass to the function to invoke
+   * @param [in] a5 The fifth argument to pass to the function to invoke
    * @return The EventId of the scheduled event.
    */
   template <typename U1, typename U2, typename U3, typename U4, typename U5,
@@ -587,26 +827,32 @@
   /** @} */
 
   /**
-   * \name Schedule events to run at the end of the simulation.
+   * @name Schedule events to run at the end of the simulation, when Simulator:Destroy() is called.
    */
   /** @{ */
   /**
-   * Schedule an event to expire at Destroy time. All events 
-   * scheduled to expire at "Destroy" time are scheduled FIFO, 
+   * Schedule an event to expire when Simulator::Destroy is called.
+   * All events scheduled to expire at "Destroy" time are scheduled FIFO, 
    * after all normal events have expired and only when 
    * Simulator::Destroy is invoked.
    *
-   * @param mem_ptr member method pointer to invoke
-   * @param obj the object on which to invoke the member method
+   * @tparam MEM @inferred Class method function signature type.
+   * @tparam OBJ @inferred Class type of the object.
+   * @param [in] mem_ptr Member method pointer to invoke
+   * @param [in] obj The object on which to invoke the member method
    * @return The EventId of the scheduled event.
    */
   template <typename MEM, typename OBJ>
   static EventId ScheduleDestroy (MEM mem_ptr, OBJ obj);
 
   /**
-   * @param mem_ptr member method pointer to invoke
-   * @param obj the object on which to invoke the member method
-   * @param a1 the first argument to pass to the invoked method
+   * @see ScheduleDestroy(MEM,OBJ)
+   * @tparam MEM @inferred Class method function signature type.
+   * @tparam OBJ @inferred Class type of the object.
+   * @tparam T1 @inferred Type of first argument.
+   * @param [in] mem_ptr Member method pointer to invoke
+   * @param [in] obj The object on which to invoke the member method
+   * @param [in] a1 The first argument to pass to the invoked method
    * @return The EventId of the scheduled event.
    */
   template <typename MEM, typename OBJ, 
@@ -614,10 +860,15 @@
   static EventId ScheduleDestroy (MEM mem_ptr, OBJ obj, T1 a1);
 
   /**
-   * @param mem_ptr member method pointer to invoke
-   * @param obj the object on which to invoke the member method
-   * @param a1 the first argument to pass to the invoked method
-   * @param a2 the second argument to pass to the invoked method
+   * @see ScheduleDestroy(MEM,OBJ)
+   * @tparam MEM @inferred Class method function signature type.
+   * @tparam OBJ @inferred Class type of the object.
+   * @tparam T1 @inferred Type of first argument.
+   * @tparam T2 @inferred Type of second argument.
+   * @param [in] mem_ptr Member method pointer to invoke
+   * @param [in] obj The object on which to invoke the member method
+   * @param [in] a1 The first argument to pass to the invoked method
+   * @param [in] a2 The second argument to pass to the invoked method
    * @return The EventId of the scheduled event.
    */
   template <typename MEM, typename OBJ,
@@ -625,11 +876,17 @@
   static EventId ScheduleDestroy (MEM mem_ptr, OBJ obj, T1 a1, T2 a2);
 
   /**
-   * @param mem_ptr member method pointer to invoke
-   * @param obj the object on which to invoke the member method
-   * @param a1 the first argument to pass to the invoked method
-   * @param a2 the second argument to pass to the invoked method
-   * @param a3 the third argument to pass to the invoked method
+   * @see ScheduleDestroy(MEM,OBJ)
+   * @tparam MEM @inferred Class method function signature type.
+   * @tparam OBJ @inferred Class type of the object.
+   * @tparam T1 @inferred Type of first argument.
+   * @tparam T2 @inferred Type of second argument.
+   * @tparam T3 @inferred Type of third argument.
+   * @param [in] mem_ptr Member method pointer to invoke
+   * @param [in] obj The object on which to invoke the member method
+   * @param [in] a1 The first argument to pass to the invoked method
+   * @param [in] a2 The second argument to pass to the invoked method
+   * @param [in] a3 The third argument to pass to the invoked method
    * @return The EventId of the scheduled event.
    */
   template <typename MEM, typename OBJ, 
@@ -637,12 +894,19 @@
   static EventId ScheduleDestroy (MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3);
 
   /**
-   * @param mem_ptr member method pointer to invoke
-   * @param obj the object on which to invoke the member method
-   * @param a1 the first argument to pass to the invoked method
-   * @param a2 the second argument to pass to the invoked method
-   * @param a3 the third argument to pass to the invoked method
-   * @param a4 the fourth argument to pass to the invoked method
+   * @see ScheduleDestroy(MEM,OBJ)
+   * @tparam MEM @inferred Class method function signature type.
+   * @tparam OBJ @inferred Class type of the object.
+   * @tparam T1 @inferred Type of first argument.
+   * @tparam T2 @inferred Type of second argument.
+   * @tparam T3 @inferred Type of third argument.
+   * @tparam T4 @inferred Type of fourth argument.
+   * @param [in] mem_ptr Member method pointer to invoke
+   * @param [in] obj The object on which to invoke the member method
+   * @param [in] a1 The first argument to pass to the invoked method
+   * @param [in] a2 The second argument to pass to the invoked method
+   * @param [in] a3 The third argument to pass to the invoked method
+   * @param [in] a4 The fourth argument to pass to the invoked method
    * @return The EventId of the scheduled event.
    */
   template <typename MEM, typename OBJ, 
@@ -650,13 +914,21 @@
   static EventId ScheduleDestroy (MEM mem_ptr, OBJ obj, 
                                   T1 a1, T2 a2, T3 a3, T4 a4);
   /**
-   * @param mem_ptr member method pointer to invoke
-   * @param obj the object on which to invoke the member method
-   * @param a1 the first argument to pass to the invoked method
-   * @param a2 the second argument to pass to the invoked method
-   * @param a3 the third argument to pass to the invoked method
-   * @param a4 the fourth argument to pass to the invoked method
-   * @param a5 the fifth argument to pass to the invoked method
+   * @see ScheduleDestroy(MEM,OBJ)
+   * @tparam MEM @inferred Class method function signature type.
+   * @tparam OBJ @inferred Class type of the object.
+   * @tparam T1 @inferred Type of first argument.
+   * @tparam T2 @inferred Type of second argument.
+   * @tparam T3 @inferred Type of third argument.
+   * @tparam T4 @inferred Type of fourth argument.
+   * @tparam T5 @inferred Type of fifth argument.
+   * @param [in] mem_ptr Member method pointer to invoke
+   * @param [in] obj The object on which to invoke the member method
+   * @param [in] a1 The first argument to pass to the invoked method
+   * @param [in] a2 The second argument to pass to the invoked method
+   * @param [in] a3 The third argument to pass to the invoked method
+   * @param [in] a4 The fourth argument to pass to the invoked method
+   * @param [in] a5 The fifth argument to pass to the invoked method
    * @return The EventId of the scheduled event.
    */
   template <typename MEM, typename OBJ, 
@@ -664,14 +936,20 @@
   static EventId ScheduleDestroy (MEM mem_ptr, OBJ obj, 
                                   T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
   /**
-   * @param f the function to invoke
+   * @copybrief ScheduleDestroy(MEM,OBJ)
+   * When Simulator::Destroy() is called, the
+   * function will be invoked with any supplied arguments.
+   * @param [in] f The function to invoke
    * @return The EventId of the scheduled event.
    */
   static EventId ScheduleDestroy (void (*f)(void));
 
   /**
-   * @param f the function to invoke
-   * @param a1 the first argument to pass to the function to invoke
+   * @see ScheduleDestory((*)())
+   * @tparam U1 @inferred Formal type of the first argument to the function.
+   * @tparam T1 @inferred Actual type of the first argument.
+   * @param [in] f The function to invoke
+   * @param [in] a1 The first argument to pass to the function to invoke
    * @return The EventId of the scheduled event.
    */
   template <typename U1,
@@ -679,9 +957,14 @@
   static EventId ScheduleDestroy (void (*f)(U1), T1 a1);
 
   /**
-   * @param f the function to invoke
-   * @param a1 the first argument to pass to the function to invoke
-   * @param a2 the second argument to pass to the function to invoke
+   * @see ScheduleDestory((*)())
+   * @tparam U1 @inferred Formal type of the first argument to the function.
+   * @tparam U2 @inferred Formal type of the second argument to the function.
+   * @tparam T1 @inferred Actual type of the first argument.
+   * @tparam T2 @inferred Actual type of the second argument.
+   * @param [in] f The function to invoke
+   * @param [in] a1 The first argument to pass to the function to invoke
+   * @param [in] a2 The second argument to pass to the function to invoke
    * @return The EventId of the scheduled event.
    */
   template <typename U1, typename U2,
@@ -689,10 +972,17 @@
   static EventId ScheduleDestroy (void (*f)(U1,U2), T1 a1, T2 a2);
 
   /**
-   * @param f the function to invoke
-   * @param a1 the first argument to pass to the function to invoke
-   * @param a2 the second argument to pass to the function to invoke
-   * @param a3 the third argument to pass to the function to invoke
+   * @see ScheduleDestory((*)())
+   * @tparam U1 @inferred Formal type of the first argument to the function.
+   * @tparam U2 @inferred Formal type of the second argument to the function.
+   * @tparam U3 @inferred Formal type of the third argument to the function.
+   * @tparam T1 @inferred Actual type of the first argument.
+   * @tparam T2 @inferred Actual type of the second argument.
+   * @tparam T3 @inferred Actual type of the third argument.
+   * @param [in] f The function to invoke
+   * @param [in] a1 The first argument to pass to the function to invoke
+   * @param [in] a2 The second argument to pass to the function to invoke
+   * @param [in] a3 The third argument to pass to the function to invoke
    * @return The EventId of the scheduled event.
    */
   template <typename U1, typename U2, typename U3,
@@ -700,11 +990,20 @@
   static EventId ScheduleDestroy (void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3);
 
   /**
-   * @param f the function to invoke
-   * @param a1 the first argument to pass to the function to invoke
-   * @param a2 the second argument to pass to the function to invoke
-   * @param a3 the third argument to pass to the function to invoke
-   * @param a4 the fourth argument to pass to the function to invoke
+   * @see ScheduleDestory((*)())
+   * @tparam U1 @inferred Formal type of the first argument to the function.
+   * @tparam U2 @inferred Formal type of the second argument to the function.
+   * @tparam U3 @inferred Formal type of the third argument to the function.
+   * @tparam U4 @inferred Formal type of the fourth argument to the function.
+   * @tparam T1 @inferred Actual type of the first argument.
+   * @tparam T2 @inferred Actual type of the second argument.
+   * @tparam T3 @inferred Actual type of the third argument.
+   * @tparam T4 @inferred Actual type of the fourth argument.
+   * @param [in] f The function to invoke
+   * @param [in] a1 The first argument to pass to the function to invoke
+   * @param [in] a2 The second argument to pass to the function to invoke
+   * @param [in] a3 The third argument to pass to the function to invoke
+   * @param [in] a4 The fourth argument to pass to the function to invoke
    * @return The EventId of the scheduled event.
    */
   template <typename U1, typename U2, typename U3, typename U4,
@@ -712,12 +1011,23 @@
   static EventId ScheduleDestroy (void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4);
 
   /**
-   * @param f the function to invoke
-   * @param a1 the first argument to pass to the function to invoke
-   * @param a2 the second argument to pass to the function to invoke
-   * @param a3 the third argument to pass to the function to invoke
-   * @param a4 the fourth argument to pass to the function to invoke
-   * @param a5 the fifth argument to pass to the function to invoke
+   * @see ScheduleDestory((*)())
+   * @tparam U1 @inferred Formal type of the first argument to the function.
+   * @tparam U2 @inferred Formal type of the second argument to the function.
+   * @tparam U3 @inferred Formal type of the third argument to the function.
+   * @tparam U4 @inferred Formal type of the fourth argument to the function.
+   * @tparam U5 @inferred Formal type of the fifth argument to the function.
+   * @tparam T1 @inferred Actual type of the first argument.
+   * @tparam T2 @inferred Actual type of the second argument.
+   * @tparam T3 @inferred Actual type of the third argument.
+   * @tparam T4 @inferred Actual type of the fourth argument.
+   * @tparam T5 @inferred Actual type of the fifth argument.
+   * @param [in] f The function to invoke
+   * @param [in] a1 The first argument to pass to the function to invoke
+   * @param [in] a2 The second argument to pass to the function to invoke
+   * @param [in] a3 The third argument to pass to the function to invoke
+   * @param [in] a4 The fourth argument to pass to the function to invoke
+   * @param [in] a5 The fifth argument to pass to the function to invoke
    * @return The EventId of the scheduled event.
    */
   template <typename U1, typename U2, typename U3, typename U4, typename U5,
@@ -726,42 +1036,129 @@
 
   /** @} */
 
-  /** \copydoc SimulatorImpl::Remove */
+  /**
+   * Remove an event from the event list. 
+   * 
+   * This method has the same visible effect as the 
+   * ns3::EventId::Cancel method
+   * but its algorithmic complexity is much higher: it has often 
+   * O(log(n)) complexity, sometimes O(n), sometimes worse.
+   * Note that it is not possible to remove events which were scheduled
+   * for the "destroy" time. Doing so will result in a program error (crash).
+   *
+   * @param [in] id The event to remove from the list of scheduled events.
+   */
   static void Remove (const EventId &id);
 
-  /** \copydoc SimulatorImpl::Cancel */
+  /**
+   * Set the cancel bit on this event: the event's associated function
+   * will not be invoked when it expires.
+   *
+   * This method has the same visible effect as the 
+   * ns3::Simulator::Remove method but its algorithmic complexity is 
+   * much lower: it has O(1) complexity.
+   * This method has the exact same semantics as ns3::EventId::Cancel.
+   * Note that it is not possible to cancel events which were scheduled
+   * for the "destroy" time. Doing so will result in a program error (crash).
+   * 
+   * @param [in] id the event to cancel
+   */
   static void Cancel (const EventId &id);
 
-  /** \copydoc SimulatorImpl::IsExpired */
+  /**
+   * Check if an event has already run or been cancelled.
+   *
+   * This method has O(1) complexity.
+   * Note that it is not possible to test for the expiration of
+   * events which were scheduled for the "destroy" time. Doing so
+   * will result in a program error (crash).
+   * An event is said to "expire" when it starts being scheduled
+   * which means that if the code executed by the event calls
+   * this function, it will get true.
+   *
+   * @param [in] id The event to test for expiration.
+   * @returns @c true if the event has expired, false otherwise.
+   */
   static bool IsExpired (const EventId &id);
 
-  /** \copydoc SimulatorImpl::Now */
+  /**
+   * Return the current simulation virtual time.
+   *
+   * @returns The current virtual time.
+   */
   static Time Now (void);
 
-  /** \copydoc SimulatorImpl::GetDelayLeft */
+  /**
+   * Get the remaining time until this event will execute.
+   *
+   * @param [in] id The event id to analyse.
+   * @return The delay left until the input event id expires.
+   *          if the event is not running, this method returns
+   *          zero.
+   */
   static Time GetDelayLeft (const EventId &id);
 
-  /** \copydoc SimulatorImpl::GetMaximumSimulationTime */
+  /**
+   * Get the maximum representable simulation time.
+   *
+   * @return The maximum simulation time at which an event 
+   *          can be scheduled.
+   *
+   * The returned value will always be bigger than or equal to Simulator::Now.
+   */
   static Time GetMaximumSimulationTime (void);
 
-  /** \copydoc SimulatorImpl::GetContext */
+  /**
+   * Get the current simulation context.
+   *
+   * @return The current simulation context
+   */
   static uint32_t GetContext (void);
 
-  /** \copydoc SimulatorImpl::Schedule */
-  static EventId Schedule (Time const &time, const Ptr<EventImpl> &event);
+  /**
+   * Schedule a future event execution (in the same context).
+   *
+   * @param [in] delay Delay until the event expires.
+   * @param [in] event The event to schedule.
+   * @returns A unique identifier for the newly-scheduled event.
+   */
+  static EventId Schedule (Time const &delay, const Ptr<EventImpl> &event);
 
-  /** \copydoc SimulatorImpl::ScheduleWithContext
+  /**
+   * Schedule a future event execution (in a different context).
    * This method is thread-safe: it can be called from any thread.
+   *
+   * @param [in] delay Delay until the event expires.
+   * @param [in] context Event context.
+   * @param [in] event The event to schedule.
+   * @returns A unique identifier for the newly-scheduled event.
    */
-  static void ScheduleWithContext (uint32_t context, const Time &time, EventImpl *event);
+  static void ScheduleWithContext (uint32_t context, const Time &delay, EventImpl *event);
 
-  /** \copydoc SimulatorImpl::ScheduleDestroy */
+  /**
+   * Schedule an event to run at the end of the simulation, after
+   * the Stop() time or condition has been reached.
+   *
+   * @param [in] event The event to schedule.
+   * @returns A unique identifier for the newly-scheduled event.
+   */
   static EventId ScheduleDestroy (const Ptr<EventImpl> &event);
 
-  /** \copydoc SimulatorImpl::ScheduleNow */
+  /**
+   * Schedule an event to run at the current virtual time.
+   *
+   * @param [in] event The event to schedule.
+   * @returns A unique identifier for the newly-scheduled event.
+   */
   static EventId ScheduleNow (const Ptr<EventImpl> &event);
 
-  /** \copydoc SimulatorImpl::GetSystemId */
+  /**
+   * Get the system id of this simulator.
+   *
+   * The system id is the identifier for this simulator instance
+   * in a distributed simulation.  For MPI this is the MPI rank.
+   * @return The system id for this simulator.
+   */
   static uint32_t GetSystemId (void);
   
 private:
@@ -772,37 +1169,37 @@
 
   /**
    * Implementation of the various Schedule methods.
-   * \param [in] time Delay until the event should execute.
-   * \param [in] event The event to execute.
-   * \return The EventId.
+   * @param [in] delay Delay until the event should execute.
+   * @param [in] event The event to execute.
+   * @return The EventId.
    */
-  static EventId DoSchedule (Time const &time, EventImpl *event);
+  static EventId DoSchedule (Time const &delay, EventImpl *event);
   /**
    * Implementation of the various ScheduleNow methods.
-   * \param [in] event The event to execute.
-   * \return The EventId.
+   * @param [in] event The event to execute.
+   * @return The EventId.
    */
   static EventId DoScheduleNow (EventImpl *event);
   /**
    * Implementation of the various ScheduleDestroy methods.
-   * \param [in] event The event to execute.
-   * \return The EventId.
+   * @param [in] event The event to execute.
+   * @return The EventId.
    */
   static EventId DoScheduleDestroy (EventImpl *event);
 };
 
 /**
- * \ingroup simulator
- * \brief create an ns3::Time instance which contains the
+ * @ingroup simulator
+ * @brief create an ns3::Time instance which contains the
  *        current simulation time.
  *
  * This is really a shortcut for the ns3::Simulator::Now method.
  * It is typically used as shown below to schedule an event
  * which expires at the absolute time "2 seconds":
- * \code
+ * @code
  *   Simulator::Schedule (Seconds (2.0) - Now (), &my_function);
- * \endcode
- * \return The current simulation time.
+ * @endcode
+ * @return The current simulation time.
  */
 Time Now (void);
 
@@ -816,160 +1213,162 @@
 namespace ns3 {
 
 template <typename MEM, typename OBJ>
-EventId Simulator::Schedule (Time const &time, MEM mem_ptr, OBJ obj) 
+EventId Simulator::Schedule (Time const &delay, MEM mem_ptr, OBJ obj) 
 {
-  return DoSchedule (time, MakeEvent (mem_ptr, obj));
+  return DoSchedule (delay, MakeEvent (mem_ptr, obj));
 }
 
 
 template <typename MEM, typename OBJ,
           typename T1>
-EventId Simulator::Schedule (Time const &time, MEM mem_ptr, OBJ obj, T1 a1) 
+EventId Simulator::Schedule (Time const &delay, MEM mem_ptr, OBJ obj, T1 a1) 
 {
-  return DoSchedule (time, MakeEvent (mem_ptr, obj, a1));
+  return DoSchedule (delay, MakeEvent (mem_ptr, obj, a1));
 }
 
 template <typename MEM, typename OBJ, 
           typename T1, typename T2>
-EventId Simulator::Schedule (Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2)
+EventId Simulator::Schedule (Time const &delay, MEM mem_ptr, OBJ obj, T1 a1, T2 a2)
 {
-  return DoSchedule (time, MakeEvent (mem_ptr, obj, a1, a2));
+  return DoSchedule (delay, MakeEvent (mem_ptr, obj, a1, a2));
 }
 
 template <typename MEM, typename OBJ,
           typename T1, typename T2, typename T3>
-EventId Simulator::Schedule (Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3) 
+EventId Simulator::Schedule (Time const &delay, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3) 
 {
-  return DoSchedule (time, MakeEvent (mem_ptr, obj, a1, a2, a3));
+  return DoSchedule (delay, MakeEvent (mem_ptr, obj, a1, a2, a3));
 }
 
 template <typename MEM, typename OBJ, 
           typename T1, typename T2, typename T3, typename T4>
-EventId Simulator::Schedule (Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3, T4 a4) 
+EventId Simulator::Schedule (Time const &delay, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3, T4 a4) 
 {
-  return DoSchedule (time, MakeEvent (mem_ptr, obj, a1, a2, a3, a4));
+  return DoSchedule (delay, MakeEvent (mem_ptr, obj, a1, a2, a3, a4));
 }
 
 template <typename MEM, typename OBJ, 
           typename T1, typename T2, typename T3, typename T4, typename T5>
-EventId Simulator::Schedule (Time const &time, MEM mem_ptr, OBJ obj, 
+EventId Simulator::Schedule (Time const &delay, MEM mem_ptr, OBJ obj, 
                              T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) 
 {
-  return DoSchedule (time, MakeEvent (mem_ptr, obj, a1, a2, a3, a4, a5));
+  return DoSchedule (delay, MakeEvent (mem_ptr, obj, a1, a2, a3, a4, a5));
 }
 
-template <typename U1, typename T1>
-EventId Simulator::Schedule (Time const &time, void (*f)(U1), T1 a1)
+template <typename U1,
+          typename T1>
+EventId Simulator::Schedule (Time const &delay, void (*f)(U1), T1 a1)
 {
-  return DoSchedule (time, MakeEvent (f, a1));
+  return DoSchedule (delay, MakeEvent (f, a1));
 }
 
 template <typename U1, typename U2, 
           typename T1, typename T2>
-EventId Simulator::Schedule (Time const &time, void (*f)(U1,U2), T1 a1, T2 a2)
+EventId Simulator::Schedule (Time const &delay, void (*f)(U1,U2), T1 a1, T2 a2)
 {
-  return DoSchedule (time, MakeEvent (f, a1, a2));
+  return DoSchedule (delay, MakeEvent (f, a1, a2));
 }
 
 template <typename U1, typename U2, typename U3,
           typename T1, typename T2, typename T3>
-EventId Simulator::Schedule (Time const &time, void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3)
+EventId Simulator::Schedule (Time const &delay, void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3)
 {
-  return DoSchedule (time, MakeEvent (f, a1, a2, a3));
+  return DoSchedule (delay, MakeEvent (f, a1, a2, a3));
 }
 
 template <typename U1, typename U2, typename U3, typename U4,
           typename T1, typename T2, typename T3, typename T4>
-EventId Simulator::Schedule (Time const &time, void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4)
+EventId Simulator::Schedule (Time const &delay, void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4)
 {
-  return DoSchedule (time, MakeEvent (f, a1, a2, a3, a4));
+  return DoSchedule (delay, MakeEvent (f, a1, a2, a3, a4));
 }
 
 template <typename U1, typename U2, typename U3, typename U4, typename U5,
           typename T1, typename T2, typename T3, typename T4, typename T5>
-EventId Simulator::Schedule (Time const &time, void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
+EventId Simulator::Schedule (Time const &delay, void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
 {
-  return DoSchedule (time, MakeEvent (f, a1, a2, a3, a4, a5));
+  return DoSchedule (delay, MakeEvent (f, a1, a2, a3, a4, a5));
 }
 
 
 
 
 template <typename MEM, typename OBJ>
-void Simulator::ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj)
+void Simulator::ScheduleWithContext (uint32_t context, Time const &delay, MEM mem_ptr, OBJ obj)
 {
-  ScheduleWithContext (context, time, MakeEvent (mem_ptr, obj));
+  ScheduleWithContext (context, delay, MakeEvent (mem_ptr, obj));
 }
 
 
 template <typename MEM, typename OBJ,
           typename T1>
-void Simulator::ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj, T1 a1)
+void Simulator::ScheduleWithContext (uint32_t context, Time const &delay, MEM mem_ptr, OBJ obj, T1 a1)
 {
-  return ScheduleWithContext (context, time, MakeEvent (mem_ptr, obj, a1));
+  return ScheduleWithContext (context, delay, MakeEvent (mem_ptr, obj, a1));
 }
 
 template <typename MEM, typename OBJ,
           typename T1, typename T2>
-void Simulator::ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2)
+void Simulator::ScheduleWithContext (uint32_t context, Time const &delay, MEM mem_ptr, OBJ obj, T1 a1, T2 a2)
 {
-  return ScheduleWithContext (context, time, MakeEvent (mem_ptr, obj, a1, a2));
+  return ScheduleWithContext (context, delay, MakeEvent (mem_ptr, obj, a1, a2));
 }
 
 template <typename MEM, typename OBJ,
           typename T1, typename T2, typename T3>
-void Simulator::ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3)
+void Simulator::ScheduleWithContext (uint32_t context, Time const &delay, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3)
 {
-  return ScheduleWithContext (context, time, MakeEvent (mem_ptr, obj, a1, a2, a3));
+  return ScheduleWithContext (context, delay, MakeEvent (mem_ptr, obj, a1, a2, a3));
 }
 
 template <typename MEM, typename OBJ,
           typename T1, typename T2, typename T3, typename T4>
-void Simulator::ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3, T4 a4)
+void Simulator::ScheduleWithContext (uint32_t context, Time const &delay, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3, T4 a4)
 {
-  return ScheduleWithContext (context, time, MakeEvent (mem_ptr, obj, a1, a2, a3, a4));
+  return ScheduleWithContext (context, delay, MakeEvent (mem_ptr, obj, a1, a2, a3, a4));
 }
 
 template <typename MEM, typename OBJ,
           typename T1, typename T2, typename T3, typename T4, typename T5>
-void Simulator::ScheduleWithContext (uint32_t context, Time const &time, MEM mem_ptr, OBJ obj,
+void Simulator::ScheduleWithContext (uint32_t context, Time const &delay, MEM mem_ptr, OBJ obj,
                                      T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
 {
-  return ScheduleWithContext (context, time, MakeEvent (mem_ptr, obj, a1, a2, a3, a4, a5));
+  return ScheduleWithContext (context, delay, MakeEvent (mem_ptr, obj, a1, a2, a3, a4, a5));
 }
 
-template <typename U1, typename T1>
-void Simulator::ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1), T1 a1)
+template <typename U1,
+          typename T1>
+void Simulator::ScheduleWithContext (uint32_t context, Time const &delay, void (*f)(U1), T1 a1)
 {
-  return ScheduleWithContext (context, time, MakeEvent (f, a1));
+  return ScheduleWithContext (context, delay, MakeEvent (f, a1));
 }
 
 template <typename U1, typename U2,
           typename T1, typename T2>
-void Simulator::ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1,U2), T1 a1, T2 a2)
+void Simulator::ScheduleWithContext (uint32_t context, Time const &delay, void (*f)(U1,U2), T1 a1, T2 a2)
 {
-  return ScheduleWithContext (context, time, MakeEvent (f, a1, a2));
+  return ScheduleWithContext (context, delay, MakeEvent (f, a1, a2));
 }
 
 template <typename U1, typename U2, typename U3,
           typename T1, typename T2, typename T3>
-void Simulator::ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3)
+void Simulator::ScheduleWithContext (uint32_t context, Time const &delay, void (*f)(U1,U2,U3), T1 a1, T2 a2, T3 a3)
 {
-  return ScheduleWithContext (context, time, MakeEvent (f, a1, a2, a3));
+  return ScheduleWithContext (context, delay, MakeEvent (f, a1, a2, a3));
 }
 
 template <typename U1, typename U2, typename U3, typename U4,
           typename T1, typename T2, typename T3, typename T4>
-void Simulator::ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4)
+void Simulator::ScheduleWithContext (uint32_t context, Time const &delay, void (*f)(U1,U2,U3,U4), T1 a1, T2 a2, T3 a3, T4 a4)
 {
-  return ScheduleWithContext (context, time, MakeEvent (f, a1, a2, a3, a4));
+  return ScheduleWithContext (context, delay, MakeEvent (f, a1, a2, a3, a4));
 }
 
 template <typename U1, typename U2, typename U3, typename U4, typename U5,
           typename T1, typename T2, typename T3, typename T4, typename T5>
-void Simulator::ScheduleWithContext (uint32_t context, Time const &time, void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
+void Simulator::ScheduleWithContext (uint32_t context, Time const &delay, void (*f)(U1,U2,U3,U4,U5), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
 {
-  return ScheduleWithContext (context, time, MakeEvent (f, a1, a2, a3, a4, a5));
+  return ScheduleWithContext (context, delay, MakeEvent (f, a1, a2, a3, a4, a5));
 }
 
 
diff -Naur ns-3.23/src/core/model/simulator-impl.h ns-3.24/src/core/model/simulator-impl.h
--- ns-3.23/src/core/model/simulator-impl.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/simulator-impl.h	2015-09-15 11:18:44.000000000 -0700
@@ -55,177 +55,49 @@
    */
   static TypeId GetTypeId (void);
 
-  /**
-   * Execute the events scheduled with ScheduleDestroy().
-   *
-   * This method is typically invoked at the end of a simulation
-   * to avoid false-positive reports by a leak checker.
-   * After this method has been invoked, it is actually possible
-   * to restart a new simulation with a set of calls to Simulator::Run,
-   * Simulator::Schedule and Simulator::ScheduleWithContext.
-   */
+  /**  \copydoc Simulator::Destroy   */
   virtual void Destroy () = 0;
-  /**
-   * Check if the simulation should finish.
-   *
-   * Reasons to finish are because there are
-   * no more events lefts to be scheduled, or if simulation
-   * time has already reached the "stop time" (see Simulator::Stop()).
-   *
-   * \return \c true if no more events or stop time reached.
-   */
+  /** \copydoc Simulator::IsFinished */
   virtual bool IsFinished (void) const = 0;
-  /**
-   * Tell the Simulator the calling event should be the last one
-   * executed.
-   *
-   * If a running event invokes this method, it will be the last
-   * event executed by the Simulator::Run method before
-   * returning to the caller.
-   */
+  /** \copydoc Simulator::Stop(void) */
   virtual void Stop (void) = 0;
-  /**
-   * Schedule the time delay until the Simulator should stop.
-   *
-   * Force the Simulator::Run method to return to the caller when the
-   * expiration time of the next event to be processed is greater than
-   * or equal to the stop time.  The stop time is relative to the
-   * current simulation time.
-   * \param time The stop time, relative to the current time.
-   */
-  virtual void Stop (Time const &time) = 0;
-  /**
-   * Schedule a future event execution (in the same context).
-   *
-   * \param time Delay until the event expires.
-   * \param event The event to schedule.
-   * \returns A unique identifier for the newly-scheduled event.
-   */
-  virtual EventId Schedule (Time const &time, EventImpl *event) = 0;
-  /**
-   * Schedule a future event execution (in a different context).
-   *
-   * \param time Delay until the event expires.
-   * \param context Event context.
-   * \param event The event to schedule.
-   * \returns A unique identifier for the newly-scheduled event.
-   */
-  virtual void ScheduleWithContext (uint32_t context, Time const &time, EventImpl *event) = 0;
-  /**
-   * Schedule an event to run at the current virtual time.
-   *
-   * \param event The event to schedule.
-   * \returns A unique identifier for the newly-scheduled event.
-   */
+  /** \copydoc Simulator::Stop(const Time&) */
+  virtual void Stop (Time const &delay) = 0;
+  /** \copydoc Simulator::Schedule(const Time&,const Ptr<EventImpl>&) */
+  virtual EventId Schedule (Time const &delay, EventImpl *event) = 0;
+  /** \copydoc Simulator::ScheduleWithContext(uint32_t,const Time&,EventImpl*) */
+  virtual void ScheduleWithContext (uint32_t context, Time const &delay, EventImpl *event) = 0;
+  /** \copydoc Simulator::ScheduleNow(const Ptr<EventImpl>&) */
   virtual EventId ScheduleNow (EventImpl *event) = 0;
-  /**
-   * Schedule an event to run at the end of the simulation, after
-   * the Stop() time or condition has been reached.
-   *
-   * \param event The event to schedule.
-   * \returns A unique identifier for the newly-scheduled event.
-   */
+  /** \copydoc Simulator::ScheduleDestroy(const Ptr<EventImpl>&) */
   virtual EventId ScheduleDestroy (EventImpl *event) = 0;
-  /**
-   * Remove an event from the event list. 
-   * 
-   * This method has the same visible effect as the 
-   * ns3::EventId::Cancel method
-   * but its algorithmic complexity is much higher: it has often 
-   * O(log(n)) complexity, sometimes O(n), sometimes worse.
-   * Note that it is not possible to remove events which were scheduled
-   * for the "destroy" time. Doing so will result in a program error (crash).
-   *
-   * \param id The event to remove from the list of scheduled events.
-   */
+  /** \copydoc Simulator::Remove */
   virtual void Remove (const EventId &id) = 0;
-  /**
-   * Set the cancel bit on this event: the event's associated function
-   * will not be invoked when it expires.
-   *
-   * This method has the same visible effect as the 
-   * ns3::Simulator::Remove method but its algorithmic complexity is 
-   * much lower: it has O(1) complexity.
-   * This method has the exact same semantics as ns3::EventId::Cancel.
-   * Note that it is not possible to cancel events which were scheduled
-   * for the "destroy" time. Doing so will result in a program error (crash).
-   * 
-   * \param id the event to cancel
-   */
+  /** \copydoc Simulator::Cancel */
   virtual void Cancel (const EventId &id) = 0;
-  /**
-   * Check if an event has already run or been cancelled.
-   *
-   * This method has O(1) complexity.
-   * Note that it is not possible to test for the expiration of
-   * events which were scheduled for the "destroy" time. Doing so
-   * will result in a program error (crash).
-   * An event is said to "expire" when it starts being scheduled
-   * which means that if the code executed by the event calls
-   * this function, it will get true.
-   *
-   * \param id The event to test for expiration.
-   * \returns \c true if the event has expired, false otherwise.
-   */
+  /** \copydoc Simulator::IsExpired */
   virtual bool IsExpired (const EventId &id) const = 0;
-  /**
-   * Run the simulation.
-   *
-   * The simulation will run until one of:
-   *   - No events are present anymore
-   *   - The user called Simulator::Stop
-   *   - The user called Simulator::Stop with a stop time and the
-   *     expiration time of the next event to be processed
-   *     is greater than or equal to the stop time.
-   */
+  /** \copydoc Simulator::Run */
   virtual void Run (void) = 0;
-  /**
-   * Return the current simulation virtual time.
-   *
-   * \returns The current virtual time.
-   */
+  /** \copydoc Simulator::Now */
   virtual Time Now (void) const = 0;
-  /**
-   * Get the remaining time until this event will execute.
-   *
-   * \param id The event id to analyse.
-   * \return The delay left until the input event id expires.
-   *          if the event is not running, this method returns
-   *          zero.
-   */
+  /** \copydoc Simulator::GetDelayLeft */
   virtual Time GetDelayLeft (const EventId &id) const = 0;
-  /**
-   * Get the maximum representable simulation time.
-   *
-   * \return The maximum simulation time at which an event 
-   *          can be scheduled.
-   *
-   * The returned value will always be bigger than or equal to Simulator::Now.
-   */
+  /** \copydoc Simulator::GetMaximumSimulationTime */
   virtual Time GetMaximumSimulationTime (void) const = 0;
   /**
    * Set the Scheduler to be used to manage the event list.
    *
-   * \param schedulerFactory A new event scheduler factory.
+   * \param [in] schedulerFactory A new event scheduler factory.
    *
    * The event scheduler can be set at any time: the events scheduled
    * in the previous scheduler will be transfered to the new scheduler
    * before we start to use it.
    */
   virtual void SetScheduler (ObjectFactory schedulerFactory) = 0;
-  /**
-   * Get the system id of this simulator.
-   *
-   * The system id is the identifier for this simulator instance
-   * in a distributed simulation.  For MPI this is the MPI rank.
-   * \return The system id for this simulator.
-   */
+  /** \copydoc Simulator::GetSystemId */
   virtual uint32_t GetSystemId () const = 0; 
-  /**
-   * Get the current simulation context.
-   *
-   * \return The current simulation context
-   */
+  /** \copydoc Simulator::GetContext */
   virtual uint32_t GetContext (void) const = 0;
 };
 
diff -Naur ns-3.23/src/core/model/singleton.h ns-3.24/src/core/model/singleton.h
--- ns-3.23/src/core/model/singleton.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/singleton.h	2015-09-15 11:18:44.000000000 -0700
@@ -20,16 +20,19 @@
 #ifndef SINGLETON_H
 #define SINGLETON_H
 
+#include "non-copyable.h"
+
+
 /**
  * \file
- * \ingroup core
+ * \ingroup access
  * ns3::Singleton declaration and template implementation.
  */
 
 namespace ns3 {
 
 /**
- * \ingroup core
+ * \ingroup access
  * \brief A template singleton
  *
  * This template class can be used to implement the singleton pattern.
@@ -39,14 +42,25 @@
  * For a singleton whose lifetime is bounded by the simulation run,
  * not the process, see SimulationSingleton.
  *
- * \note If you call Get() again after the object has
+ * To force your `class ExampleS` to be a singleton, inherit from Singleton:
+ * \code
+ *   class ExampleS : public Singleton<ExampleS> { ... };
+ * \endcode
+ *
+ * Then, to reach the singleton instance, just do
+ * \code
+ *   ExampleS::Get ()->...;
+ * \endcode
+ *
+ * \note
+ * If you call Get() again after the object has
  * been destroyed, the object will be re-created which will result in a
  * memory leak as reported by most memory leak checkers. It is up to the
  * user to ensure that Get() is never called from a static variable
  * finalizer.
  */
 template <typename T>
-class Singleton
+class Singleton : private NonCopyable
 {
 public:
   /**
@@ -59,28 +73,6 @@
    */
   static T *Get (void);
 
-private:
-
-  /**
-   * \name %Singleton pattern
-   * Private constructor, copy and assignment operator.
-   *
-   *  Note these do not have to be implemented, since they are
-   *  never called.
-   */
-  /**@{*/
-  /** Default constructor */
-  Singleton<T> (void);
-  
-  /** Copy constructor. */
-  Singleton<T> (const Singleton<T> &);
-  /**
-   * Assignment.
-   * \returns The Singleton.
-   */
-  Singleton<T> operator = (const Singleton<T> &);
-  /**@}*/
-
 };
 
 } // namespace ns3
diff -Naur ns-3.23/src/core/model/synchronizer.h ns-3.24/src/core/model/synchronizer.h
--- ns-3.23/src/core/model/synchronizer.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/synchronizer.h	2015-09-15 11:18:44.000000000 -0700
@@ -24,8 +24,8 @@
 #include "object.h"
 
 /**
- * \file
- * \ingroup realtime
+ * @file
+ * @ingroup realtime
  * ns3::Synchronizer declaration.
  */
 
@@ -53,7 +53,7 @@
 public:
   /**
    * Get the registered TypeId for this class.
-   * \returns The TypeId.
+   * @returns The TypeId.
    */
   static TypeId GetTypeId (void);
 
@@ -68,7 +68,7 @@
    *
    * The simulator sometimes needs to know this.
    *
-   * @returns \c true if locked with realtime, \c false if not.
+   * @returns @c true if locked with realtime, @c false if not.
    */
   bool Realtime (void);
 
@@ -95,7 +95,7 @@
    * virtual method to do the actual real-time-clock-specific work
    * of making the correspondence mentioned above.
    *
-   * @param ts The simulation time we should use as the origin (in
+   * @param [in] ts The simulation time we should use as the origin (in
    *     Time resolution units).
    * @see DoSetOrigin
    */
@@ -115,7 +115,7 @@
    * synchronize the simulation and the simulation time (in
    * Time resolution units).
    *
-   * @param ts Simulation time in Time resolution units.
+   * @param [in] ts Simulation time in Time resolution units.
    * @returns Simulation Time (in Time resolution units)
    *     minus the origin time (stored internally in nanosecond units).
    * @see SetOrigin
@@ -127,7 +127,7 @@
    * @brief Wait until the real time is in sync with the specified simulation
    * time or until the synchronizer is Sigalled.
    *
-   * This is where the real work of synchronization is done.  The \c tsCurrent
+   * This is where the real work of synchronization is done.  The @c tsCurrent
    * argument is the simulation time.  The job of Synchronize is to
    * translate from simulation time to synchronizer time (in a perfect world
    * this is the same time) and then figure out how long in real-time it needs
@@ -138,11 +138,11 @@
    * (either busy-waiting or sleeping, or some combination thereof) until the
    * requested simulation time.
    *
-   * @param tsCurrent The current simulation time (in Time resolution units).
-   * @param tsDelay The simulation time we need to wait for (in Time
+   * @param [in] tsCurrent The current simulation time (in Time resolution units).
+   * @param [in] tsDelay The simulation time we need to wait for (in Time
    *     resolution units).
-   * @returns \c true if the function ran to completion,
-   *          \c false if it was interrupted by a Signal.
+   * @returns @c true if the function ran to completion,
+   *          @c false if it was interrupted by a Signal.
    * @see DoSynchronize
    * @see Signal
    */
@@ -212,14 +212,14 @@
    * for example, this is where the differences between Time parameters and
    * parameters to clock_nanosleep would be dealt with. 
    *
-   * @param ns The simulation time we need to use as the origin (normalized to
+   * @param [in] ns The simulation time we need to use as the origin (normalized to
    *    nanosecond units).
    * @see SetOrigin
    */
   virtual void DoSetOrigin (uint64_t ns) = 0;
 
   /**
-   * @brief Return \c true if this synchronizer is actually synchronizing to a
+   * @brief Return @c true if this synchronizer is actually synchronizing to a
    * realtime clock.
    *
    * The simulator sometimes needs to know this.
@@ -227,7 +227,7 @@
    * Subclasses are expected to implement this method to tell the outside world
    * whether or not they are synchronizing to a realtime clock.
    *
-   * @returns \c true if locked with realtime, \c false if not.
+   * @returns @c true if locked with realtime, @c false if not.
    */
   virtual bool DoRealtime (void) = 0;
 
@@ -248,7 +248,7 @@
    * time.
    *
    * This is where the real work of synchronization is done.  The
-   * \c nsCurrent argument is the simulation time (in ns).  The job of
+   * @c nsCurrent argument is the simulation time (in ns).  The job of
    * DoSynchronize is to translate from simulation time to synchronizer time
    * (in a perfect world these are the same time) and then figure out
    * how long in real-time it needs to wait until that
@@ -258,11 +258,11 @@
    * real-time-clock-specific work of waiting (either busy-waiting or sleeping,
    * or some combination) until the requested simulation time.
    *
-   * @param nsCurrent The current simulation time (in nanosecond units).
-   * @param nsDelay The simulation time we need to wait for (normalized to 
+   * @param [in] nsCurrent The current simulation time (in nanosecond units).
+   * @param [in] nsDelay The simulation time we need to wait for (normalized to 
    * nanosecond units).
-   * @returns \c true if the function ran to completion,
-   *          \c false if it was interrupted by a Signal.
+   * @returns @c true if the function ran to completion,
+   *          @c false if it was interrupted by a Signal.
    * @see Synchronize
    * @see Signal
    */
@@ -290,7 +290,7 @@
    * @brief Get the drift between the real time clock used to synchronize
    * the simulation and the current simulation time.
    *
-   * @param ns Simulation time in ns.
+   * @param [in] ns Simulation time in ns.
    * @returns Drift in ns units.
    * @see SetOrigin
    * @see GetDrift
@@ -320,7 +320,7 @@
    * @brief Convert a simulator time step (in Time resolution units)
    * to a normalized time step in nanosecond units.
    *
-   * @param ts The simulation time step to be normalized.
+   * @param [in] ts The simulation time step to be normalized.
    * @returns The simulation time step normalized to nanosecond units.
    */
   uint64_t TimeStepToNanosecond (uint64_t ts);
@@ -329,7 +329,7 @@
    * @brief Convert a normalized nanosecond time step into a
    * simulator time step (in Time resolution units).
    *
-   * @param ns The nanosecond count step to be converted
+   * @param [in] ns The nanosecond count step to be converted
    * @returns The simulation time step to be interpreted in appropriate units.
    */
   uint64_t NanosecondToTimeStep (uint64_t ns);
diff -Naur ns-3.23/src/core/model/system-condition.h ns-3.24/src/core/model/system-condition.h
--- ns-3.23/src/core/model/system-condition.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/system-condition.h	2015-09-15 11:18:44.000000000 -0700
@@ -75,7 +75,7 @@
 
   /**
    * Set the value of the underlying condition.
-   * @param condition value
+   * @param [in] condition value
    */
   void SetCondition (bool condition);
 
@@ -106,8 +106,8 @@
   /**
    * Wait a maximum of ns nanoseconds for the condition to be true.  If the
    * wait times out, return true else return false.
-   * @param ns maximum of nanoseconds to wait
-   * @returns true if the timer expired, otherwise return false.
+   * @param [in] ns maximum of nanoseconds to wait
+   * @returns \c true if the timer expired, otherwise return \c false.
    */
   bool TimedWait (uint64_t ns);
 	
diff -Naur ns-3.23/src/core/model/system-path.cc ns-3.24/src/core/model/system-path.cc
--- ns-3.23/src/core/model/system-path.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/system-path.cc	2015-09-15 11:18:44.000000000 -0700
@@ -82,7 +82,7 @@
  * This is an internal function (by virtue of not being
  * declared in a \c .h file); the public API is FindSelfDirectory().
  * 
- * \param path The full path to a file.
+ * \param [in] path The full path to a file.
  * \returns The full path to the containing directory.
  */
 std::string Dirname (std::string path)
diff -Naur ns-3.23/src/core/model/system-path.h ns-3.24/src/core/model/system-path.h
--- ns-3.23/src/core/model/system-path.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/system-path.h	2015-09-15 11:18:44.000000000 -0700
@@ -51,7 +51,7 @@
    * \ingroup systempath
    * Get the file system path to the current executable.
    *
-   * \return the directory in which the currently-executing binary is located
+   * \return The directory in which the currently-executing binary is located
    */
   std::string FindSelfDirectory (void);
   
@@ -59,9 +59,9 @@
    * \ingroup systempath
    * Join two file system path elements.
    *
-   * \param left a path element
-   * \param right a path element
-   * \return a concatenation of the two input paths
+   * \param [in] left A path element
+   * \param [in] right A path element
+   * \return A concatenation of the two input paths
    */
   std::string Append (std::string left, std::string right);
 
@@ -72,8 +72,8 @@
    *
    * This is the inverse of Join.
    *
-   * \param path a path
-   * \return a list of path elements that can be joined together again with
+   * \param [in] path A path
+   * \return A list of path elements that can be joined together again with
    *         the Join function.
    * \sa ns3::SystemPath::Join
    */
@@ -86,9 +86,9 @@
    * This is the inverse of Split.
    *
    * \ingroup systempath
-   * \param begin iterator to first element to join
-   * \param end iterator to last element to join
-   * \return a path that is a concatenation of all the input elements.
+   * \param [in] begin Iterator to first element to join
+   * \param [in] end Iterator to last element to join
+   * \return A path that is a concatenation of all the input elements.
    */
   std::string Join (std::list<std::string>::const_iterator begin,
 		    std::list<std::string>::const_iterator end);
@@ -97,8 +97,8 @@
    * \ingroup systempath
    * Get the list of files located in a file system directory.
    *
-   * \param path a path which identifies a directory
-   * \return a list of the filenames which are located in the input directory
+   * \param [in] path A path which identifies a directory
+   * \return A list of the filenames which are located in the input directory
    */
   std::list<std::string> ReadFiles (std::string path);
 
@@ -110,7 +110,7 @@
    * Call ns3::SystemPath::MakeDirectories to create it. Yes, there is a
    * well-known security race in this API but we don't care in ns-3.
    *
-   * \return a path which identifies a temporary directory.
+   * \return A path which identifies a temporary directory.
    */
   std::string MakeTemporaryDirectoryName (void);
 
@@ -118,7 +118,7 @@
    * \ingroup systempath
    * Create all the directories leading to path.
    *
-   * \param path a path to a directory
+   * \param [in] path A path to a directory
    */
   void MakeDirectories (std::string path);
 
diff -Naur ns-3.23/src/core/model/system-thread.h ns-3.24/src/core/model/system-thread.h
--- ns-3.23/src/core/model/system-thread.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/system-thread.h	2015-09-15 11:18:44.000000000 -0700
@@ -112,7 +112,7 @@
    * method provided to do this is Join(). If you call Join() you will block
    * until the SystemThread run method returns.
    *
-   * @param callback entry point of the thread
+   * @param [in] callback entry point of the thread
    * 
    * @warning I've made the system thread class look like a normal ns3 object
    * with smart pointers, and living in the heap.  This makes it very easy to
@@ -144,7 +144,7 @@
   /**
    * @brief Returns the current thread Id.
    *
-   * @returns current thread Id. 
+   * @returns Current thread Id. 
    */
   static ThreadId Self(void);
 
@@ -152,7 +152,7 @@
    * @brief Compares an ThreadId with the current ThreadId .
    *
    * @param [in] id The ThreadId to compare to.
-   * @returns true if @c id matches the current ThreadId.
+   * @returns @c true if @c id matches the current ThreadId.
    */
   static bool Equals(ThreadId id);
 
diff -Naur ns-3.23/src/core/model/system-wall-clock-ms.h ns-3.24/src/core/model/system-wall-clock-ms.h
--- ns-3.23/src/core/model/system-wall-clock-ms.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/system-wall-clock-ms.h	2015-09-15 11:18:44.000000000 -0700
@@ -32,8 +32,8 @@
 namespace ns3 {
 
 /**
- * @ingroup core
- * @defgroup system System Services
+ * \ingroup core
+ * \defgroup system System Services
  *
  * System-independent interfaces to operating system services:
  * files system, threading, wall clock time.
diff -Naur ns-3.23/src/core/model/test.cc ns-3.24/src/core/model/test.cc
--- ns-3.23/src/core/model/test.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/test.cc	2015-09-15 11:18:44.000000000 -0700
@@ -19,6 +19,7 @@
 #include "test.h"
 #include "assert.h"
 #include "abort.h"
+#include "singleton.h"
 #include "system-path.h"
 #include "log.h"
 #include <cmath>
@@ -66,18 +67,39 @@
   return true;
 } 
 
+/**
+ * \ingroup testingimpl
+ * Container for details of a test failure.
+ */
 struct TestCaseFailure
 {
+  /**
+   * Constructor.
+   *
+   * \param [in] _cond    The name of the condition being tested.
+   * \param [in] _actual  The actual value returned by the test.
+   * \param [in] _limit   The expected value.
+   * \param [in] _message The associated message.
+   * \param [in] _file    The soure file.
+   * \param [in] _line    The source line.
+   */
   TestCaseFailure (std::string _cond, std::string _actual, 
                    std::string _limit, std::string _message, 
                    std::string _file, int32_t _line);
-  std::string cond;
-  std::string actual;
-  std::string limit;
-  std::string message; 
-  std::string file;
-  int32_t line;
+  std::string cond;    /**< The name of the condition being tested. */
+  std::string actual;  /**< The actual value returned by the test. */
+  std::string limit;   /**< The expected value. */
+  std::string message; /**< The associated message. */
+  std::string file;    /**< The soure file. */
+  int32_t line;        /**< The source line. */
 };
+/**
+ * Output streamer for TestCaseFailure.
+ *
+ * \param [in,out] os The output stream.
+ * \param [in] failure The TestCaseFailure to print.
+ * \returns The stream.
+ */
 std::ostream & operator << (std::ostream & os, const TestCaseFailure & failure)
 {
   os << "    test=\""  << failure.cond
@@ -90,58 +112,143 @@
   return os;
 }
 
+/**
+ * \ingroup testingimpl
+ * Container for results from a TestCase.
+ */
 struct TestCase::Result
 {
+  /** Constructor. */
   Result ();
+
+  /** Test running time. */
   SystemWallClockMs clock;
+  /** TestCaseFailure records for each child. */
   std::vector<TestCaseFailure> failure;
+  /** \c true if any child TestCases failed. */
   bool childrenFailed;
 };
 
-class TestRunnerImpl
+/**
+ * \ingroup testingimpl
+ * Container for all tests.
+ */
+class TestRunnerImpl : public Singleton<TestRunnerImpl>
 {
 public:
+  /** Constructor. */
+  TestRunnerImpl ();
+  
+  /**
+   * Add a new top-level TestSuite.
+   * \param [in] testSuite The new TestSuite.
+   */
   void AddTestSuite (TestSuite *testSuite);
-  void StartTestCase (std::string name);
-  void EndTestCase (void);
-  void ReportTestFailure (std::string cond, std::string actual, 
-                      std::string limit, std::string message, 
-                      std::string file, int32_t line);
+  /** \copydoc TestCase::MustAssertOnFailure() */
   bool MustAssertOnFailure (void) const;
+  /** \copydoc TestCase::MustContinueOnFailure() */
   bool MustContinueOnFailure (void) const;
+  /**
+   * Check if this run should update the reference data.
+   * \return \c true if we should update the reference data.
+   */
   bool MustUpdateData (void) const;
+  /**
+   * Get the path to the root of the source tree.
+   *
+   * The root directory is defined by the presence of two files:
+   * "VERSION" and "LICENSE".
+   *
+   * \returns The path to the root.
+   */
   std::string GetTopLevelSourceDir (void) const;
+  /**
+   * Get the path to temporary directory.
+   * \return The temporary directory path.
+   */
   std::string GetTempDir (void) const;
-
+  /** \copydoc TestRunner::Run() */
   int Run (int argc, char *argv[]);
 
-  static TestRunnerImpl *Instance (void);
-
 private:
-  TestRunnerImpl ();
-  ~TestRunnerImpl ();
 
+  /**
+   * Check if this is the root of the source tree.
+   * \param [in] path The path to test.
+   * \returns \c true if \p path is the root.
+   */
   bool IsTopLevelSourceDir (std::string path) const;
+  /**
+   * Clean up characters not allowed in XML.
+   *
+   * XML files have restrictions on certain characters that may be present in
+   * data.  We need to replace these characters with their alternate 
+   * representation on the way into the XML file.
+   *
+   * Specifically, we make these replacements:
+   *    Raw Source | Replacement
+   *    :--------: | :---------:
+   *    '<'        | "&lt;"
+   *    '>'        | "&gt;"
+   *    '&'        | "&amp;"
+   *    '"'        | "&39;"
+   *    '\'        | "&quot;"
+   *
+   * \param [in] xml The raw string.
+   * \returns The sanitized string.
+   */
   std::string ReplaceXmlSpecialCharacters (std::string xml) const;
+  /**
+   * Print the test report.
+   *
+   * \param [in] test The TestCase to print.
+   * \param [in,out] os The output stream.
+   * \param [in] xml Generate XML output if \c true.
+   * \param [in] level Indentation level.
+   */
   void PrintReport (TestCase *test, std::ostream *os, bool xml, int level);
+  /**
+   * Print the list of all requested test suites.
+   *
+   * \param [in] begin Iterator to the first TestCase to print.
+   * \param [in] end Iterator to the end of the list.
+   * \param [in] printTestType Preprend the test type label if \c true.
+   */
   void PrintTestNameList (std::list<TestCase *>::const_iterator begin, 
                           std::list<TestCase *>::const_iterator end,
                           bool printTestType) const;
+  /** Print the list of test types. */
   void PrintTestTypeList (void) const;
+  /**
+   * Print the help text.
+   * \param [in] programName The name of the invoking program.
+   */
   void PrintHelp (const char *programName) const;
+  /**
+   * Generate the list of tests matching the constraints.
+   *
+   * Test name and type contraints are or'ed.  The duration constraint
+   * is and'ed.
+   *
+   * \param [in] testName Include a specific test by name.
+   * \param [in] testType Include all tests of give type.
+   * \param [in] maximumTestDuration Restrict to tests shorter than this.
+   * \returns The list of tests matching the filter constraints.
+   */
   std::list<TestCase *> FilterTests (std::string testName,
                                      enum TestSuite::Type testType,
                                      enum TestCase::TestDuration maximumTestDuration);
 
 
+  /** Container type for the test. */
   typedef std::vector<TestSuite *> TestSuiteVector;
 
-  TestSuiteVector m_suites;
-  std::string m_tempDir;
-  bool m_verbose;
-  bool m_assertOnFailure;
-  bool m_continueOnFailure;
-  bool m_updateData;
+  TestSuiteVector m_suites;  //!< The list of tests.
+  std::string m_tempDir;     //!< The temporary directory.
+  bool m_verbose;            //!< Produce verbose output.
+  bool m_assertOnFailure;    //!< \c true if we should assert on failure.
+  bool m_continueOnFailure;  //!< \c true if we should continue on failure.
+  bool m_updateData;         //!< \c true if we should update reference data.
 };
 
 
@@ -189,34 +296,42 @@
 void
 TestCase::AddTestCase (TestCase *testCase, enum TestCase::TestDuration duration)
 {
-  // Record this for use later when all test cases are run.
-  testCase->m_duration = duration;
+  NS_LOG_FUNCTION (&testCase << duration);
 
-  NS_LOG_FUNCTION (&testCase);
-  m_children.push_back (testCase);
-  testCase->m_parent = this;
-
-  std::string::size_type slash, antislash;
-  slash = testCase->m_name.find ("/");
-  antislash = testCase->m_name.find ("\\");
-  if (slash != std::string::npos || antislash != std::string::npos)
-    {
-      std::string fullname = testCase->m_name;
-      TestCase *current = testCase->m_parent;
-      while (current != 0)
-        {
-          fullname = current->m_name + "/" + fullname;
-          current = current->m_parent;
-        }
-      if (slash != std::string::npos)
-        {
-          NS_FATAL_ERROR ("Invalid test name: cannot contain slashes: \"" << fullname << "\"");
-        }
-      if (antislash != std::string::npos)
-        {
-          NS_FATAL_ERROR ("Invalid test name: cannot contain antislashes: \"" << fullname << "\"");
-        }
+  // Test names are used to create temporary directories,
+  // so we test for illegal characters.
+  //
+  // Windows: <>:"/\|?*
+  //   http://msdn.microsoft.com/en-us/library/aa365247(v=vs.85).aspx
+  // Mac:     : (deprecated, was path separator in Mac OS Classic, pre X)
+  // Unix:    / (and .. may give trouble?)
+  //
+  // The Windows list is too restrictive:  we like to label
+  // tests with "val = v1 * v2" or "v1 < 3" or "case: foo --> bar"
+  // So we allow ':<>*" 
+
+  std::string badchars = "\"/\\|?";
+  // Badchar Class  Regex          Count of failing test names
+  // All            ":<>\"/\\|?*"  611
+  // Allow ':'      "<>\"/\\|?*"   128
+  // Allow ':<>'    "\"/\\|?*"      12
+  // Allow ':<>*'    "\"/\\|?"       0
+
+  std::string::size_type badch = testCase->m_name.find_first_of (badchars);
+  if (badch != std::string::npos)
+    {
+      /*
+        To count the bad test names, use NS_LOG_UNCOND instead
+        of NS_FATAL_ERROR, and the command
+        $ ./waf --run "test-runner --list" 2>&1 | grep "^Invalid" | wc
+      */
+      NS_LOG_UNCOND ("Invalid test name: cannot contain any of '"
+                      << badchars << "': " << testCase->m_name);
     }
+
+  testCase->m_duration = duration;
+  testCase->m_parent = this;
+  m_children.push_back (testCase);
 }
 
 bool
@@ -368,7 +483,7 @@
     m_type (type)
 {
   NS_LOG_FUNCTION (this << name << type);
-  TestRunnerImpl::Instance ()->AddTestSuite (this);
+  TestRunnerImpl::Get ()->AddTestSuite (this);
 }
 
 TestSuite::Type 
@@ -393,21 +508,6 @@
   NS_LOG_FUNCTION (this);
 }
 
-TestRunnerImpl::~TestRunnerImpl ()
-{
-  NS_LOG_FUNCTION (this);
-}
-
-
-
-TestRunnerImpl *
-TestRunnerImpl::Instance (void)
-{
-  NS_LOG_FUNCTION_NOARGS ();
-  static TestRunnerImpl runner;
-  return &runner;
-}
-
 void
 TestRunnerImpl::AddTestSuite (TestSuite *testSuite)
 {
@@ -525,9 +625,15 @@
   return result;
 }
 
+/** Helper to indent output a specified number of steps. */
 struct Indent
 {
+  /**
+   * Constructor.
+   * \param [in] level The number of steps.  A step is "  ".
+   */
   Indent (int level);
+  /** The number of steps. */
   int level;
 };
 Indent::Indent (int _level)
@@ -535,6 +641,12 @@
 {
   NS_LOG_FUNCTION (this << _level);
 }
+/**
+ * Output streamer for Indent.
+ * \param [in,out] os The output stream.
+ * \param [in] val The Indent object.
+ * \returns The stream.
+ */
 std::ostream &operator << (std::ostream &os, const Indent &val)
 {
   for (int i = 0; i < val.level; i++)
@@ -976,7 +1088,7 @@
 TestRunner::Run (int argc, char *argv[])
 {
   NS_LOG_FUNCTION (argc << argv);
-  return TestRunnerImpl::Instance ()->Run (argc, argv);
+  return TestRunnerImpl::Get ()->Run (argc, argv);
 }
 
 } // namespace ns3
diff -Naur ns-3.23/src/core/model/test.h ns-3.24/src/core/model/test.h
--- ns-3.23/src/core/model/test.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/test.h	2015-09-15 11:18:44.000000000 -0700
@@ -28,12 +28,14 @@
 #include <limits>
 #include <stdint.h>
 
+#include "non-copyable.h"
 #include "system-wall-clock-ms.h"
 
 /**
  * \file
  * \ingroup testing
- * Definition of the testing macros and declaration of the testing classes.
+ * \brief Definition of the testing macros and declaration of
+ * the testing classes.
  */
 
 /**
@@ -54,11 +56,11 @@
 // 
 // Note on below macros:
 //
-// When multiple statements are used in a macro, they should be bound together 
-// in a loop syntactically, so the macro can appear safely inside if clauses 
-// or other places that expect a single statement or a statement block.  The
-// "strange" do while construct is a generally expected best practice for
-// defining a robust macro.
+// When multiple statements are used in a macro, they should be bound
+// together in a loop syntactically, so the macro can appear safely
+// inside if clauses or other places that expect a single statement or
+// a statement block.  The "strange" do while construct is a generally
+// expected best practice for defining a robust macro.
 //
 
 /**
@@ -130,13 +132,14 @@
 /**
  * \ingroup testing
  *
- * \brief Test that an actual and expected (limit) value are equal and report
- * and abort if not.
+ * \brief Test that an actual and expected (limit) value are equal and
+ * report and abort if not.
  *
- * Check to see if the expected (limit) value is equal to the actual value found
- * in a test case.  If the two values are equal nothing happens, but if the 
- * comparison fails, an error is reported in a consistent way and the execution
- * of the current test case is aborted.
+ * Check to see if the expected (limit) value is equal to the actual
+ * value found in a test case.  If the two values are equal nothing
+ * happens, but if the comparison fails, an error is reported in a
+ * consistent way and the execution of the current test case is
+ * aborted.
  *
  * The message is interpreted as a stream, for example:
  *
@@ -147,13 +150,13 @@
  *
  * is legal.
  * 
- * \param actual Expression for the actual value found during the test.
- * \param limit Expression for the expected value of the test.
- * \param msg Message that is output if the test does not pass.
- *
- * \warning Do not use this macro if you are comparing floating point numbers
- * (float or double) as it is unlikely to do what you expect.  Use 
- * NS_TEST_ASSERT_MSG_EQ_TOL instead.
+ * \param [in] actual Expression for the actual value found during the test.
+ * \param [in] limit Expression for the expected value of the test.
+ * \param [in] msg Message that is output if the test does not pass.
+ *
+ * \warning Do not use this macro if you are comparing floating point
+ * numbers (float or double) as it is unlikely to do what you expect.
+ * Use NS_TEST_ASSERT_MSG_EQ_TOL instead.
  */
 #define NS_TEST_ASSERT_MSG_EQ(actual, limit, msg) \
   NS_TEST_ASSERT_MSG_EQ_INTERNAL (actual, limit, msg, __FILE__, __LINE__)
@@ -174,7 +177,7 @@
         actualStream << actual;                                         \
         std::ostringstream limitStream;                                 \
         limitStream << limit;                                           \
-        ReportTestFailure (std::string (#actual) + " (actual) == " +        \
+        ReportTestFailure (std::string (#actual) + " (actual) == " +    \
                        std::string (#limit) + " (limit)",               \
                        actualStream.str (), limitStream.str (),         \
                        msgStream.str (), file, line);                   \
@@ -185,13 +188,14 @@
 /**
  * \ingroup testing
  *
- * \brief Test that an actual and expected (limit) value are equal and report
- * and abort if not.
+ * \brief Test that an actual and expected (limit) value are equal and
+ * report and abort if not.
  *
- * Check to see if the expected (limit) value is equal to the actual value found
- * in a test case.  If the two values are equal nothing happens, but if the 
- * comparison fails, an error is reported in a consistent way and the execution
- * of the current test case is aborted.
+ * Check to see if the expected (limit) value is equal to the actual
+ * value found in a test case.  If the two values are equal nothing
+ * happens, but if the comparison fails, an error is reported in a
+ * consistent way and the execution of the current test case is
+ * aborted.
  *
  * The message is interpreted as a stream, for example:
  *
@@ -202,13 +206,13 @@
  *
  * is legal.
  * 
- * \param actual Expression for the actual value found during the test.
- * \param limit Expression for the expected value of the test.
- * \param msg Message that is output if the test does not pass.
- *
- * \warning Do not use this macro if you are comparing floating point numbers
- * (float or double) as it is unlikely to do what you expect.  Use 
- * NS_TEST_ASSERT_MSG_EQ_RETURNS_BOOL_TOL instead.
+ * \param [in] actual Expression for the actual value found during the test.
+ * \param [in] limit Expression for the expected value of the test.
+ * \param [in] msg Message that is output if the test does not pass.
+ *
+ * \warning Do not use this macro if you are comparing floating point
+ * numbers (float or double) as it is unlikely to do what you expect.
+ * Use NS_TEST_ASSERT_MSG_EQ_RETURNS_BOOL_TOL instead.
  *
  * This function returns a boolean value.
  *
@@ -218,11 +222,11 @@
 
 /**
  * \ingroup testingimpl
- * \brief Test that an actual and expected (limit) value are equal and report
- * if not.
+ * \brief Test that an actual and expected (limit) value are equal and
+ * report if not.
  * 
- * Required to avoid use of return statement which allows use in methods 
- * (esp. callbacks) returning void.
+ * Required to avoid use of return statement which allows use in
+ * methods (esp. callbacks) returning void.
  */
 #define NS_TEST_EXPECT_MSG_EQ_INTERNAL(actual, limit, msg, file, line)  \
   do {                                                                  \
@@ -235,7 +239,7 @@
         actualStream << actual;                                         \
         std::ostringstream limitStream;                                 \
         limitStream << limit;                                           \
-        ReportTestFailure (std::string (#actual) + " (actual) == " +        \
+        ReportTestFailure (std::string (#actual) + " (actual) == " +    \
                        std::string (#limit) + " (limit)",               \
                        actualStream.str (), limitStream.str (),         \
                        msgStream.str (), file, line);                   \
@@ -245,13 +249,14 @@
 /**
  * \ingroup testing
  *
- * \brief Test that an actual and expected (limit) value are equal and report
- * if not.
+ * \brief Test that an actual and expected (limit) value are equal and
+ * report if not.
  *
- * Check to see if the expected (lmit) value is equal to the actual value found
- * in a test case.  If the two values are equal nothing happens, but if the 
- * comparison fails, an error is reported in a consistent way.  EXPECT* macros
- * do not return if an error is detected.
+ * Check to see if the expected (lmit) value is equal to the actual
+ * value found in a test case.  If the two values are equal nothing
+ * happens, but if the comparison fails, an error is reported in a
+ * consistent way.  EXPECT* macros do not return if an error is
+ * detected.
  *
  * The message is interpreted as a stream, for example:
  *
@@ -262,13 +267,13 @@
  *
  * is legal.
  * 
- * \param actual Expression for the actual value found during the test.
- * \param limit Expression for the expected value of the test.
- * \param msg Message that is output if the test does not pass.
- *
- * \warning Do not use this macro if you are comparing floating point numbers
- * (float or double) as it is unlikely to do what you expect.  Use 
- * NS_TEST_EXPECT_MSG_EQ_TOL instead.
+ * \param [in] actual Expression for the actual value found during the test.
+ * \param [in] limit Expression for the expected value of the test.
+ * \param [in] msg Message that is output if the test does not pass.
+ *
+ * \warning Do not use this macro if you are comparing floating point
+ * numbers (float or double) as it is unlikely to do what you expect.
+ * Use NS_TEST_EXPECT_MSG_EQ_TOL instead.
  */
 #define NS_TEST_EXPECT_MSG_EQ(actual, limit, msg) \
   NS_TEST_EXPECT_MSG_EQ_INTERNAL (actual, limit, msg, __FILE__, __LINE__)
@@ -280,8 +285,8 @@
 
 /**
  * \ingroup testingimpl
- * \brief Test that actual and expected (limit) values are equal to plus
- * or minus some tolerance and report and abort if not.
+ * \brief Test that actual and expected (limit) values are equal to
+ * plus or minus some tolerance and report and abort if not.
  */
 #define NS_TEST_ASSERT_MSG_EQ_TOL_INTERNAL(actual, limit, tol, msg, file, line) \
   do {                                                                  \
@@ -299,7 +304,7 @@
                    << " (limit) + " << #tol << " (tol) && "             \
                    << #actual << " (actual) > " << #limit               \
                    << " (limit) - " << #tol << " (tol)";                \
-        ReportTestFailure (condStream.str (), actualStream.str (),          \
+        ReportTestFailure (condStream.str (), actualStream.str (),      \
                        limitStream.str (), msgStream.str (),            \
                        file, line);                                     \
         CONTINUE_ON_FAILURE;                                            \
@@ -309,63 +314,69 @@
 /**
  * \ingroup testing
  *
- * \brief Test that actual and expected (limit) values are equal to plus
- * or minus some tolerance and report and abort if not.
+ * \brief Test that actual and expected (limit) values are equal to
+ * plus or minus some tolerance and report and abort if not.
  *
- * Check to see if the expected (limit) value is equal to the actual value found
- * in a test case to some tolerance.  This is not the same thing as asking if
- * two floating point are equal to within some epsilon, but is useful for that
- * case.  This assertion is geared toward more of a measurement problem.
- * Consider measuring a physical rod of some kind that you have ordered.
- * You need to determine if it is "good."  You want to measure the rod
- * to an arbitrary precision of sixteen significant figures, you will
+ * Check to see if the expected (limit) value is equal to the actual
+ * value found in a test case to some tolerance.  This is not the same
+ * thing as asking if two floating point are equal to within some
+ * epsilon, but is useful for that case.  This assertion is geared
+ * toward more of a measurement problem.  Consider measuring a
+ * physical rod of some kind that you have ordered.  You need to
+ * determine if it is "good."  You want to measure the rod to an
+ * arbitrary precision of sixteen significant figures, you will
  * measure the rod to determine if its length is within the tolerances
  * you provided.  For example, 12.00 inches plus or minus .005 inch
  * may be just fine.
  * 
- * In ns-3, you might want to measure a signal to noise ratio and check to see
- * if the answer is what you expect.  If you naively measure (double)1128.93 and
- * compare this number with a constant 1128.93 you are almost certainly going to
- * have your test fail because of floating point rounding errors.  We provide a
- * floating point comparison function ns3::TestDoubleIsEqual() but you will 
- * probably quickly find that is not what you want either.  It may turn out to
- * be the case that when you measured an snr that printed as 1128.93, what was 
- * actually measured was something more like 1128.9287653857625442 for example.
- * Given that the double epsilon is on the order of 0.0000000000000009,
- * you would need to provide sixteen significant figures of expected value
- * for this kind of test to pass even with a typical test for floating point
- * "approximate equality."  That is clearly not required or desired.
- * You really want to be able to provide 1128.93 along with a tolerance
- * just like you provided 12 inches +- 0.005 inch above.
- *
- * This assertion is designed for real measurements by taking into account
- * measurement tolerances.  By doing so it also automatically compensates for 
- * floating point rounding errors.    If you really want to check floating point
- * equality down to the numeric_limits<double>::epsilon () range, consider
- * using ns3::TestDoubleIsEqual().
+ * In ns-3, you might want to measure a signal to noise ratio and
+ * check to see if the answer is what you expect.  If you naively
+ * measure (double)1128.93 and compare this number with a constant
+ * 1128.93 you are almost certainly going to have your test fail
+ * because of floating point rounding errors.  We provide a floating
+ * point comparison function ns3::TestDoubleIsEqual() but you will
+ * probably quickly find that is not what you want either.  It may
+ * turn out to be the case that when you measured an snr that printed
+ * as 1128.93, what was actually measured was something more like
+ * 1128.9287653857625442 for example.  Given that the double epsilon
+ * is on the order of 0.0000000000000009, you would need to provide
+ * sixteen significant figures of expected value for this kind of test
+ * to pass even with a typical test for floating point "approximate
+ * equality."  That is clearly not required or desired.  You really
+ * want to be able to provide 1128.93 along with a tolerance just like
+ * you provided 12 inches +- 0.005 inch above.
+ *
+ * This assertion is designed for real measurements by taking into
+ * account measurement tolerances.  By doing so it also automatically
+ * compensates for floating point rounding errors.  If you really want
+ * to check floating point equality down to the
+ * numeric_limits<double>::epsilon () range, consider using
+ * ns3::TestDoubleIsEqual().
  *
- * \note Mixing signed and unsigned types can lead to misleading results.
+ * \note Mixing signed and unsigned types can lead to misleading
+ * results.
  *
  * The message is interpreted as a stream, for example:
  *
  * \code
- * NS_TEST_ASSERT_MSG_EQ_TOL (snr, 1128.93, 0.005, "wrong snr (" << snr << ") in test");
+ *   NS_TEST_ASSERT_MSG_EQ_TOL (snr, 1128.93, 0.005,
+ *                              "wrong snr (" << snr << ") in test");
  * \endcode
  *
  * is legal.
  * 
- * \param actual Expression for the actual value found during the test.
- * \param limit Expression for the expected value of the test.
- * \param tol Tolerance of the test.
- * \param msg Message that is output if the test does not pass.
+ * \param [in] actual Expression for the actual value found during the test.
+ * \param [in] limit Expression for the expected value of the test.
+ * \param [in] tol Tolerance of the test.
+ * \param [in] msg Message that is output if the test does not pass.
  */
 #define NS_TEST_ASSERT_MSG_EQ_TOL(actual, limit, tol, msg)                 \
   NS_TEST_ASSERT_MSG_EQ_TOL_INTERNAL (actual, limit, tol, msg, __FILE__, __LINE__)
 
 /**
  * \ingroup testingimpl
- * \brief Test that actual and expected (limit) values are equal to plus
- * or minus some tolerance and report and abort if not.
+ * \brief Test that actual and expected (limit) values are equal to
+ * plus or minus some tolerance and report and abort if not.
  */
 #define NS_TEST_ASSERT_MSG_EQ_TOL_RETURNS_BOOL_INTERNAL(actual, limit, tol, msg, file, line) \
   do {                                                                  \
@@ -383,7 +394,7 @@
                    << " (limit) + " << #tol << " (tol) && "             \
                    << #actual << " (actual) > " << #limit               \
                    << " (limit) - " << #tol << " (tol)";                \
-        ReportTestFailure (condStream.str (), actualStream.str (),          \
+        ReportTestFailure (condStream.str (), actualStream.str (),      \
                        limitStream.str (), msgStream.str (),            \
                        file, line);                                     \
         CONTINUE_ON_FAILURE_RETURNS_BOOL;                               \
@@ -393,69 +404,75 @@
 /**
  * \ingroup testing
  *
- * \brief Test that actual and expected (limit) values are equal to plus
- * or minus some tolerance and report and abort if not.
+ * \brief Test that actual and expected (limit) values are equal to
+ * plus or minus some tolerance and report and abort if not.
  *
- * Check to see if the expected (limit) value is equal to the actual value found
- * in a test case to some tolerance.  This is not the same thing as asking if
- * two floating point are equal to within some epsilon, but is useful for that
- * case.  This assertion is geared toward more of a measurement problem.
- * Consider measuring a physical rod of some kind that you have ordered.
- * You need to determine if it is "good."  You want to measure the rod
- * to an arbitrary precision of sixteen significant figures, you will
+ * Check to see if the expected (limit) value is equal to the actual
+ * value found in a test case to some tolerance.  This is not the same
+ * thing as asking if two floating point are equal to within some
+ * epsilon, but is useful for that case.  This assertion is geared
+ * toward more of a measurement problem.  Consider measuring a
+ * physical rod of some kind that you have ordered.  You need to
+ * determine if it is "good."  You want to measure the rod to an
+ * arbitrary precision of sixteen significant figures, you will
  * measure the rod to determine if its length is within the tolerances
  * you provided.  For example, 12.00 inches plus or minus .005 inch
  * may be just fine.
  * 
- * In ns-3, you might want to measure a signal to noise ratio and check to see
- * if the answer is what you expect.  If you naively measure (double)1128.93 and
- * compare this number with a constant 1128.93 you are almost certainly going to
- * have your test fail because of floating point rounding errors.  We provide a
- * floating point comparison function ns3::TestDoubleIsEqual() but you will 
- * probably quickly find that is not what you want either.  It may turn out to
- * be the case that when you measured an snr that printed as 1128.93, what was 
- * actually measured was something more like 1128.9287653857625442 for example.
- * Given that the double epsilon is on the order of 0.0000000000000009,
- * you would need to provide sixteen significant figures of expected value
- * for this kind of test to pass even with a typical test for floating point
- * "approximate equality."  That is clearly not required or desired.
- * You really want to be able to provide  1128.93 along with a tolerance
- * just like you provided 12 inches +- 0.005 inch above.
- *
- * This assertion is designed for real measurements by taking into account
- * measurement tolerances.  By doing so it also automatically compensates for 
- * floating point rounding errors.    If you really want to check floating point
- * equality down to the numeric_limits<double>::epsilon () range,
- * consider using ns3::TestDoubleIsEqual().
+ * In ns-3, you might want to measure a signal to noise ratio and
+ * check to see if the answer is what you expect.  If you naively
+ * measure (double)1128.93 and compare this number with a constant
+ * 1128.93 you are almost certainly going to have your test fail
+ * because of floating point rounding errors.  We provide a floating
+ * point comparison function ns3::TestDoubleIsEqual() but you will
+ * probably quickly find that is not what you want either.  It may
+ * turn out to be the case that when you measured an snr that printed
+ * as 1128.93, what was actually measured was something more like
+ * 1128.9287653857625442 for example.  Given that the double epsilon
+ * is on the order of 0.0000000000000009, you would need to provide
+ * sixteen significant figures of expected value for this kind of test
+ * to pass even with a typical test for floating point "approximate
+ * equality."  That is clearly not required or desired.  You really
+ * want to be able to provide 1128.93 along with a tolerance just like
+ * you provided 12 inches +- 0.005 inch above.
+ *
+ * This assertion is designed for real measurements by taking into
+ * account measurement tolerances.  By doing so it also automatically
+ * compensates for floating point rounding errors.  If you really want
+ * to check floating point equality down to the
+ * numeric_limits<double>::epsilon () range, consider using
+ * ns3::TestDoubleIsEqual().
  *
- * \note Mixing signed and unsigned types can lead to misleading results.
+ * \note Mixing signed and unsigned types can lead to misleading
+ * results.
  *
  * The message is interpreted as a stream, for example:
  *
  * \code
- * NS_TEST_ASSERT_MSG_EQ_TOL_RETURNS_BOOL (snr, 1128.93, 0.005, "wrong snr (" << snr << ") in test");
+ *   NS_TEST_ASSERT_MSG_EQ_TOL_RETURNS_BOOL (snr, 1128.93, 0.005,
+ *                                           "wrong snr (" << snr << ") in test");
  * \endcode
  *
  * is legal.
  * 
- * \param actual Expression for the actual value found during the test.
- * \param limit Expression for the expected value of the test.
- * \param tol Tolerance of the test.
- * \param msg Message that is output if the test does not pass.
+ * \param [in] actual Expression for the actual value found during the test.
+ * \param [in] limit Expression for the expected value of the test.
+ * \param [in] tol Tolerance of the test.
+ * \param [in] msg Message that is output if the test does not pass.
  *
  * This function returns a boolean value.
  *
  */
-#define NS_TEST_ASSERT_MSG_EQ_TOL_RETURNS_BOOL(actual, limit, tol, msg)                 \
+#define NS_TEST_ASSERT_MSG_EQ_TOL_RETURNS_BOOL(actual, limit, tol, msg)  \
   NS_TEST_ASSERT_MSG_EQ_TOL_RETURNS_BOOL_INTERNAL (actual, limit, tol, msg, __FILE__, __LINE__)
 
 /**
  * \ingroup testingimpl
- * \brief Test that actual and expected (limit) values are equal to plus or minus
- * some tolerance and report if not.
+ * \brief Test that actual and expected (limit) values are equal to
+ * plus or minus some tolerance and report if not.
  * 
- * Required to avoid use of return statement which allows use in methods 
- * (esp. callbacks) returning void.
+ * Required to avoid use of return statement which allows use in
+ * methods (esp. callbacks) returning void.
  */
 #define NS_TEST_EXPECT_MSG_EQ_TOL_INTERNAL(actual, limit, tol, msg, file, line) \
   do {                                                                  \
@@ -473,7 +490,7 @@
                    << " (limit) + " << #tol << " (tol) && "             \
                    << #actual << " (actual) > " << #limit               \
                    << " (limit) - " << #tol << " (tol)";                \
-        ReportTestFailure (condStream.str (), actualStream.str (),          \
+        ReportTestFailure (condStream.str (), actualStream.str (),      \
                        limitStream.str (), msgStream.str (),            \
                        file, line);                                     \
       }                                                                 \
@@ -482,55 +499,61 @@
 /**
  * \ingroup testing
  *
- * \brief Test that actual and expected (limit) values are equal to plus
- * or minus some tolerance and report if not.
+ * \brief Test that actual and expected (limit) values are equal to
+ * plus or minus some tolerance and report if not.
  *
- * Check to see if the expected (limit) value is equal to the actual value found
- * in a test case to some tolerance.  This is not the same thing as asking if
- * two floating point are equal to within some epsilon, but is useful for that
- * case.  This assertion is geared toward more of a measurement problem.
- * Consider measuring a physical rod of some kind that you have ordered.
- * You need to  determine if it is "good."  You want to measure the rod
- * to an arbitrary precision  of sixteen significant figures,
- * you will measure the rod to determine if its length is within
- * the tolerances you provided.  For example, 12.00 inches plus 
- * or minus .005 inch may be just fine.
+ * Check to see if the expected (limit) value is equal to the actual
+ * value found in a test case to some tolerance.  This is not the same
+ * thing as asking if two floating point are equal to within some
+ * epsilon, but is useful for that case.  This assertion is geared
+ * toward more of a measurement problem.  Consider measuring a
+ * physical rod of some kind that you have ordered.  You need to
+ * determine if it is "good."  You want to measure the rod to an
+ * arbitrary precision of sixteen significant figures, you will
+ * measure the rod to determine if its length is within the tolerances
+ * you provided.  For example, 12.00 inches plus or minus .005 inch
+ * may be just fine.
  * 
- * In ns-3, you might want to measure a signal to noise ratio and check to see
- * if the answer is what you expect.  If you naively measure (double)1128.93 and
- * compare this number with a constant 1128.93 you are almost certainly going to
- * have your test fail because of floating point rounding errors.  We provide a
- * floating point comparison function ns3::TestDoubleIsEqual() but you will 
- * probably quickly find that is not what you want either.  It may turn out to
- * be the case that when you measured an snr that printed as 1128.93, what was 
- * actually measured was something more like 1128.9287653857625442 for example.
- * Given that the double epsilon is on the order of 0.0000000000000009,
- * you would  need to provide sixteen significant figures of expected value
- * for this kind of test to pass even with a typical test for floating point
- * "approximate equality."  That is clearly not required or desired.
- * You really want to be able to provide 1128.93 along with a tolerance
- * just like you provided 12 inches +- 0.005 inch above.
- *
- * This assertion is designed for real measurements by taking into account
- * measurement tolerances.  By doing so it also automatically compensates for 
- * floating point rounding errors.    If you really want to check floating point
- * equality down to the numeric_limits<double>::epsilon () range,
- * consider using ns3::TestDoubleIsEqual().
+ * In ns-3, you might want to measure a signal to noise ratio and
+ * check to see if the answer is what you expect.  If you naively
+ * measure (double)1128.93 and compare this number with a constant
+ * 1128.93 you are almost certainly going to have your test fail
+ * because of floating point rounding errors.  We provide a floating
+ * point comparison function ns3::TestDoubleIsEqual() but you will
+ * probably quickly find that is not what you want either.  It may
+ * turn out to be the case that when you measured an snr that printed
+ * as 1128.93, what was actually measured was something more like
+ * 1128.9287653857625442 for example.  Given that the double epsilon
+ * is on the order of 0.0000000000000009, you would need to provide
+ * sixteen significant figures of expected value for this kind of test
+ * to pass even with a typical test for floating point "approximate
+ * equality."  That is clearly not required or desired.  You really
+ * want to be able to provide 1128.93 along with a tolerance just like
+ * you provided 12 inches +- 0.005 inch above.
+ *
+ * This assertion is designed for real measurements by taking into
+ * account measurement tolerances.  By doing so it also automatically
+ * compensates for floating point rounding errors.  If you really want
+ * to check floating point equality down to the
+ * numeric_limits<double>::epsilon () range, consider using
+ * ns3::TestDoubleIsEqual().
  *
- * \note Mixing signed and unsigned types can lead to misleading results.
+ * \note Mixing signed and unsigned types can lead to misleading
+ * results.
  *
  * The message is interpreted as a stream, for example:
  *
  * \code
- * NS_TEST_EXPECT_MSG_EQ_TOL (snr, 1128.93, 0.005, "wrong snr (" << snr << ") in test");
+ *   NS_TEST_EXPECT_MSG_EQ_TOL (snr, 1128.93, 0.005,
+ *                              "wrong snr (" << snr << ") in test");
  * \endcode
  *
  * is legal.
  * 
- * \param actual Expression for the actual value found during the test.
- * \param limit Expression for the expected value of the test.
- * \param tol Tolerance of the test.
- * \param msg Message that is output if the test does not pass.
+ * \param [in] actual Expression for the actual value found during the test.
+ * \param [in] limit Expression for the expected value of the test.
+ * \param [in] tol Tolerance of the test.
+ * \param [in] msg Message that is output if the test does not pass.
  */
 #define NS_TEST_EXPECT_MSG_EQ_TOL(actual, limit, tol, msg) \
   NS_TEST_EXPECT_MSG_EQ_TOL_INTERNAL (actual, limit, tol, msg, __FILE__, __LINE__)
@@ -555,7 +578,7 @@
         actualStream << actual;                                         \
         std::ostringstream limitStream;                                 \
         limitStream << limit;                                           \
-        ReportTestFailure (std::string (#actual) + " (actual) != " +        \
+        ReportTestFailure (std::string (#actual) + " (actual) != " +    \
                        std::string (#limit) + " (limit)",               \
                        actualStream.str (), limitStream.str (),         \
                        msgStream.str (), file, line);                   \
@@ -566,13 +589,14 @@
 /**
  * \ingroup testing
  *
- * \brief Test that an actual and expected (limit) value are not equal and 
- * report and abort if not.
+ * \brief Test that an actual and expected (limit) value are not equal
+ * and report and abort if not.
  *
- * Check to see if the expected (limit) value is not equal to the actual value
- * found in a test case.  If the two values are not equal nothing happens, but 
- * if the comparison fails, an error is reported in a consistent way and the 
- * execution of the current test case is aborted.
+ * Check to see if the expected (limit) value is not equal to the
+ * actual value found in a test case.  If the two values are not equal
+ * nothing happens, but if the comparison fails, an error is reported
+ * in a consistent way and the execution of the current test case is
+ * aborted.
  *
  * The message is interpreted as a stream, for example:
  *
@@ -583,12 +607,12 @@
  *
  * is legal.
  * 
- * \param actual Expression for the actual value found during the test.
- * \param limit Expression for the value that actual is tested against.
- * \param msg Message that is output if the test does not pass.
+ * \param [in] actual Expression for the actual value found during the test.
+ * \param [in] limit Expression for the value that actual is tested against.
+ * \param [in] msg Message that is output if the test does not pass.
  *
- * \warning Do not use this macro if you are comparing floating point numbers
- * (float or double).  Use NS_TEST_ASSERT_MSG_FLNE instead.
+ * \warning Do not use this macro if you are comparing floating point
+ * numbers (float or double).  Use NS_TEST_ASSERT_MSG_FLNE instead.
  */
 #define NS_TEST_ASSERT_MSG_NE(actual, limit, msg) \
   NS_TEST_ASSERT_MSG_NE_INTERNAL (actual, limit, msg, __FILE__, __LINE__)
@@ -609,7 +633,7 @@
         actualStream << actual;                                         \
         std::ostringstream limitStream;                                 \
         limitStream << limit;                                           \
-        ReportTestFailure (std::string (#actual) + " (actual) != " +        \
+        ReportTestFailure (std::string (#actual) + " (actual) != " +    \
                        std::string (#limit) + " (limit)",               \
                        actualStream.str (), limitStream.str (),         \
                        msgStream.str (), file, line);                   \
@@ -620,13 +644,14 @@
 /**
  * \ingroup testing
  *
- * \brief Test that an actual and expected (limit) value are not equal and 
- * report and abort if not.
+ * \brief Test that an actual and expected (limit) value are not equal
+ * and report and abort if not.
  *
- * Check to see if the expected (limit) value is not equal to the actual value
- * found in a test case.  If the two values are equal nothing happens, but if 
- * the comparison fails, an error is reported in a consistent way and the 
- * execution of the current test case is aborted.
+ * Check to see if the expected (limit) value is not equal to the
+ * actual value found in a test case.  If the two values are equal
+ * nothing happens, but if the comparison fails, an error is reported
+ * in a consistent way and the execution of the current test case is
+ * aborted.
  *
  * The message is interpreted as a stream, for example:
  *
@@ -637,12 +662,12 @@
  *
  * is legal.
  * 
- * \param actual Expression for the actual value found during the test.
- * \param limit Expression for the expected value of the test.
- * \param msg Message that is output if the test does not pass.
+ * \param [in] actual Expression for the actual value found during the test.
+ * \param [in] limit Expression for the expected value of the test.
+ * \param [in] msg Message that is output if the test does not pass.
  *
- * \warning Do not use this macro if you are comparing floating point numbers
- * (float or double).  Use NS_TEST_ASSERT_MSG_FLNE instead.
+ * \warning Do not use this macro if you are comparing floating point
+ * numbers (float or double).  Use NS_TEST_ASSERT_MSG_FLNE instead.
  *
  * This function returns a boolean value.
  *
@@ -669,7 +694,7 @@
         actualStream << actual;                                         \
         std::ostringstream limitStream;                                 \
         limitStream << limit;                                           \
-        ReportTestFailure (std::string (#actual) + " (actual) != " +        \
+        ReportTestFailure (std::string (#actual) + " (actual) != " +    \
                        std::string (#limit) + " (limit)",               \
                        actualStream.str (), limitStream.str (),         \
                        msgStream.str (), file, line);                   \
@@ -679,13 +704,14 @@
 /**
  * \ingroup testing
  *
- * \brief Test that an actual and expected (limit) value are not equal and 
- * report if not.
+ * \brief Test that an actual and expected (limit) value are not equal
+ * and report if not.
  *
- * Check to see if the expected (limit) value is not equal to the actual value 
- * found in a test case.  If the two values are not equal nothing happens, but 
- * if the comparison fails, an error is reported in a consistent way.  EXPECT* 
- * macros do not return if an error is detected.
+ * Check to see if the expected (limit) value is not equal to the
+ * actual value found in a test case.  If the two values are not equal
+ * nothing happens, but if the comparison fails, an error is reported
+ * in a consistent way.  EXPECT* macros do not return if an error is
+ * detected.
  *
  * The message is interpreted as a stream, for example:
  *
@@ -696,12 +722,12 @@
  *
  * is legal.
  * 
- * \param actual Expression for the actual value found during the test.
- * \param limit Expression for the value that actual is tested against.
- * \param msg Message that is output if the test does not pass.
+ * \param [in] actual Expression for the actual value found during the test.
+ * \param [in] limit Expression for the value that actual is tested against.
+ * \param [in] msg Message that is output if the test does not pass.
  *
- * \warning Do not use this macro if you are comparing floating point numbers
- * (float or double).  Use NS_TEST_EXPECT_MSG_FLNE instead.
+ * \warning Do not use this macro if you are comparing floating point
+ * numbers (float or double).  Use NS_TEST_EXPECT_MSG_FLNE instead.
  */
 #define NS_TEST_EXPECT_MSG_NE(actual, limit, msg) \
   NS_TEST_EXPECT_MSG_NE_INTERNAL (actual, limit, msg, __FILE__, __LINE__)
@@ -726,7 +752,7 @@
         actualStream << actual;                                         \
         std::ostringstream limitStream;                                 \
         limitStream << limit;                                           \
-        ReportTestFailure (std::string (#actual) + " (actual) < " +         \
+        ReportTestFailure (std::string (#actual) + " (actual) < " +     \
                        std::string (#limit) + " (limit)",               \
                        actualStream.str (), limitStream.str (),         \
                        msgStream.str (), file, line);                   \
@@ -741,7 +767,7 @@
  */
 #define NS_TEST_ASSERT_MSG_LT_OR_EQ_INTERNAL(actual, limit, msg, file, line)  \
   do {                                                                  \
-    if (!((actual) <= (limit)))                                          \
+    if (!((actual) <= (limit)))                                         \
       {                                                                 \
         ASSERT_ON_FAILURE;                                              \
         std::ostringstream msgStream;                                   \
@@ -750,7 +776,7 @@
         actualStream << actual;                                         \
         std::ostringstream limitStream;                                 \
         limitStream << limit;                                           \
-        ReportTestFailure (std::string (#actual) + " (actual) < " +         \
+        ReportTestFailure (std::string (#actual) + " (actual) < " +     \
                        std::string (#limit) + " (limit)",               \
                        actualStream.str (), limitStream.str (),         \
                        msgStream.str (), file, line);                   \
@@ -761,19 +787,19 @@
 /**
  * \ingroup testing
  *
- * \brief Test that an actual value is less than a limit and report and abort
- * if not.
+ * \brief Test that an actual value is less than a limit and report
+ * and abort if not.
  *
- * Check to see if the actual value found in a test case is less than the 
- * limit value.  If the actual value is lesser nothing happens, but if the 
- * check fails, an error is reported in a consistent way and the execution
- * of the current test case is aborted.
+ * Check to see if the actual value found in a test case is less than
+ * the limit value.  If the actual value is lesser nothing happens,
+ * but if the check fails, an error is reported in a consistent way
+ * and the execution of the current test case is aborted.
  *
  * The message is interpreted as a stream.
  *
- * \param actual Expression for the actual value found during the test.
- * \param limit Expression for the limit value of the test.
- * \param msg Message that is output if the test does not pass.
+ * \param [in] actual Expression for the actual value found during the test.
+ * \param [in] limit Expression for the limit value of the test.
+ * \param [in] msg Message that is output if the test does not pass.
  */
 #define NS_TEST_ASSERT_MSG_LT(actual, limit, msg) \
   NS_TEST_ASSERT_MSG_LT_INTERNAL (actual, limit, msg, __FILE__, __LINE__)
@@ -781,19 +807,20 @@
 /**
  * \ingroup testing
  *
- * \brief Test that an actual value is less than or equal to a limit and
- * report and abort if not.
+ * \brief Test that an actual value is less than or equal to a limit
+ * and report and abort if not.
  *
- * Check to see if the actual value found in a test case is less than or equal
- * to the limit value.  If the actual value is lesser or equal nothing happens,
- * but if the check fails, an error is reported in a consistent way and the
- * execution of the current test case is aborted.
+ * Check to see if the actual value found in a test case is less than
+ * or equal to the limit value.  If the actual value is lesser or
+ * equal nothing happens, but if the check fails, an error is reported
+ * in a consistent way and the execution of the current test case is
+ * aborted.
  *
  * The message is interpreted as a stream.
  *
- * \param actual Expression for the actual value found during the test.
- * \param limit Expression for the limit value of the test.
- * \param msg Message that is output if the test does not pass.
+ * \param [in] actual Expression for the actual value found during the test.
+ * \param [in] limit Expression for the limit value of the test.
+ * \param [in] msg Message that is output if the test does not pass.
  */
 #define NS_TEST_ASSERT_MSG_LT_OR_EQ(actual, limit, msg) \
   NS_TEST_ASSERT_MSG_LT_OR_EQ_INTERNAL (actual, limit, msg, __FILE__, __LINE__)
@@ -816,7 +843,7 @@
         actualStream << actual;                                         \
         std::ostringstream limitStream;                                 \
         limitStream << limit;                                           \
-        ReportTestFailure (std::string (#actual) + " (actual) < " +         \
+        ReportTestFailure (std::string (#actual) + " (actual) < " +     \
                        std::string (#limit) + " (limit)",               \
                        actualStream.str (), limitStream.str (),         \
                        msgStream.str (), file, line);                   \
@@ -825,15 +852,15 @@
 
 /**
  * \ingroup testingimpl
- * \brief Test that an actual value is less than or equal to a limit and report
- * if not.
+ * \brief Test that an actual value is less than or equal to a limit
+ * and report if not.
  *
- * Required to avoid use of return statement which allows use in methods
- * (callbacks) returning void.
+ * Required to avoid use of return statement which allows use in
+ * methods (callbacks) returning void.
  */
 #define NS_TEST_EXPECT_MSG_LT_OR_EQ_INTERNAL(actual, limit, msg, file, line)  \
   do {                                                                  \
-    if (!((actual) <= (limit)))                                          \
+    if (!((actual) <= (limit)))                                         \
       {                                                                 \
         ASSERT_ON_FAILURE;                                              \
         std::ostringstream msgStream;                                   \
@@ -842,7 +869,7 @@
         actualStream << actual;                                         \
         std::ostringstream limitStream;                                 \
         limitStream << limit;                                           \
-        ReportTestFailure (std::string (#actual) + " (actual) < " +         \
+        ReportTestFailure (std::string (#actual) + " (actual) < " +     \
                        std::string (#limit) + " (limit)",               \
                        actualStream.str (), limitStream.str (),         \
                        msgStream.str (), file, line);                   \
@@ -852,18 +879,19 @@
 /**
  * \ingroup testing
  *
- * \brief Test that an actual value is less than a limit and report if not.
+ * \brief Test that an actual value is less than a limit and report if
+ * not.
  *
- * Check to see if the actual value found in a test case is less than the 
- * limit value.  If the actual value is lesser nothing happens, but if the 
- * check fails, an error is reported in a consistent way.  EXPECT* macros do 
- * not return if an error is detected.
+ * Check to see if the actual value found in a test case is less than
+ * the limit value.  If the actual value is lesser nothing happens,
+ * but if the check fails, an error is reported in a consistent way.
+ * EXPECT* macros do not return if an error is detected.
  *
  * The message is interpreted as a stream.
  *
- * \param actual Expression for the actual value found during the test.
- * \param limit Expression for the limit value of the test.
- * \param msg Message that is output if the test does not pass.
+ * \param [in] actual Expression for the actual value found during the test.
+ * \param [in] limit Expression for the limit value of the test.
+ * \param [in] msg Message that is output if the test does not pass.
  */
 #define NS_TEST_EXPECT_MSG_LT(actual, limit, msg) \
   NS_TEST_EXPECT_MSG_LT_INTERNAL (actual, limit, msg, __FILE__, __LINE__)
@@ -871,19 +899,20 @@
 /**
  * \ingroup testing
  *
- * \brief Test that an actual value is less than or equal to a limit and report
- *        if not.
+ * \brief Test that an actual value is less than or equal to a limit
+ * and report if not.
  *
- * Check to see if the actual value found in a test case is less than or equal to
- * the limit value.  If the actual value is lesser or equal nothing happens, but
- * if the check fails, an error is reported in a consistent way.  EXPECT* macros
- * do not return if an error is detected.
+ * Check to see if the actual value found in a test case is less than
+ * or equal to the limit value.  If the actual value is lesser or
+ * equal nothing happens, but if the check fails, an error is reported
+ * in a consistent way.  EXPECT* macros do not return if an error is
+ * detected.
  *
  * The message is interpreted as a stream.
  *
- * \param actual Expression for the actual value found during the test.
- * \param limit Expression for the limit value of the test.
- * \param msg Message that is output if the test does not pass.
+ * \param [in] actual Expression for the actual value found during the test.
+ * \param [in] limit Expression for the limit value of the test.
+ * \param [in] msg Message that is output if the test does not pass.
  */
 #define NS_TEST_EXPECT_MSG_LT_OR_EQ(actual, limit, msg) \
   NS_TEST_EXPECT_MSG_LT_OR_EQ_INTERNAL (actual, limit, msg, __FILE__, __LINE__)
@@ -908,7 +937,7 @@
         actualStream << actual;                                         \
         std::ostringstream limitStream;                                 \
         limitStream << limit;                                           \
-        ReportTestFailure (std::string (#actual) + " (actual) > " +         \
+        ReportTestFailure (std::string (#actual) + " (actual) > " +     \
                        std::string (#limit) + " (limit)",               \
                        actualStream.str (), limitStream.str (),         \
                        msgStream.str (), file, line);                   \
@@ -918,12 +947,12 @@
 
 /**
  * \ingroup testingimpl
- * \brief Test that an actual value is greater than or equal to a limit and
- * report and abort if not.
+ * \brief Test that an actual value is greater than or equal to a
+ * limit and report and abort if not.
  */
 #define NS_TEST_ASSERT_MSG_GT_OR_EQ_INTERNAL(actual, limit, msg, file, line)  \
   do {                                                                  \
-    if (!((actual) >= (limit)))                                          \
+    if (!((actual) >= (limit)))                                         \
       {                                                                 \
         ASSERT_ON_FAILURE;                                              \
         std::ostringstream msgStream;                                   \
@@ -932,7 +961,7 @@
         actualStream << actual;                                         \
         std::ostringstream limitStream;                                 \
         limitStream << limit;                                           \
-        ReportTestFailure (std::string (#actual) + " (actual) > " +         \
+        ReportTestFailure (std::string (#actual) + " (actual) > " +     \
                        std::string (#limit) + " (limit)",               \
                        actualStream.str (), limitStream.str (),         \
                        msgStream.str (), file, line);                   \
@@ -943,19 +972,20 @@
 /**
  * \ingroup testing
  *
- * \brief Test that an actual value is greater than a limit and report and abort
- * if not.
+ * \brief Test that an actual value is greater than a limit and report
+ * and abort if not.
  *
- * Check to see if the actual value found in a test case is greater than the 
- * limit value.  If the actual value is greater nothing happens, but if the 
- * check fails, an error is reported in a consistent way and the execution
- * of the current test case is aborted.
+ * Check to see if the actual value found in a test case is greater
+ * than the limit value.  If the actual value is greater nothing
+ * happens, but if the check fails, an error is reported in a
+ * consistent way and the execution of the current test case is
+ * aborted.
  *
  * The message is interpreted as a stream.
  *
- * \param actual Expression for the actual value found during the test.
- * \param limit Expression for the limit value of the test.
- * \param msg Message that is output if the test does not pass.
+ * \param [in] actual Expression for the actual value found during the test.
+ * \param [in] limit Expression for the limit value of the test.
+ * \param [in] msg Message that is output if the test does not pass.
  */
 #define NS_TEST_ASSERT_MSG_GT(actual, limit, msg) \
   NS_TEST_ASSERT_MSG_GT_INTERNAL (actual, limit, msg, __FILE__, __LINE__)
@@ -963,19 +993,20 @@
 /**
  * \ingroup testing
  *
- * \brief Test that an actual value is greater than or equal to a limit and
- * report and abort if not.
+ * \brief Test that an actual value is greater than or equal to a
+ * limit and report and abort if not.
  *
- * Check to see if the actual value found in a test case is greater than or
- * equal to the limit value.  If the actual value is greater nothing happens, but
- * if the check fails, an error is reported in a consistent way and the execution
- * of the current test case is aborted.
+ * Check to see if the actual value found in a test case is greater
+ * than or equal to the limit value.  If the actual value is greater
+ * nothing happens, but if the check fails, an error is reported in a
+ * consistent way and the execution of the current test case is
+ * aborted.
  *
  * The message is interpreted as a stream.
  *
- * \param actual Expression for the actual value found during the test.
- * \param limit Expression for the limit value of the test.
- * \param msg Message that is output if the test does not pass.
+ * \param [in] actual Expression for the actual value found during the test.
+ * \param [in] limit Expression for the limit value of the test.
+ * \param [in] msg Message that is output if the test does not pass.
  */
 #define NS_TEST_ASSERT_MSG_GT_OR_EQ(actual, limit, msg) \
   NS_TEST_ASSERT_MSG_GT_OR_EQ_INTERNAL (actual, limit, msg, __FILE__, __LINE__)
@@ -991,14 +1022,14 @@
   do {                                                                  \
     if (!((actual) > (limit)))                                          \
       {                                                                 \
-        ASSERT_ON_FAILURE;                                               \
+        ASSERT_ON_FAILURE;                                              \
         std::ostringstream msgStream;                                   \
         msgStream << msg;                                               \
         std::ostringstream actualStream;                                \
         actualStream << actual;                                         \
         std::ostringstream limitStream;                                 \
         limitStream << limit;                                           \
-        ReportTestFailure (std::string (#actual) + " (actual) > " +      \
+        ReportTestFailure (std::string (#actual) + " (actual) > " +     \
                        std::string (#limit) + " (limit)",               \
                        actualStream.str (), limitStream.str (),         \
                        msgStream.str (), file, line);                   \
@@ -1007,24 +1038,24 @@
 
 /**
  * \ingroup testingimpl
- * \brief Test that an actual value is greater than or equal to limit and
- * report if not.
+ * \brief Test that an actual value is greater than or equal to limit
+ * and report if not.
  *
- * Required to avoid use of return statement which allows use in methods
- * (callbacks) returning void.
+ * Required to avoid use of return statement which allows use in
+ * methods (callbacks) returning void.
  */
 #define NS_TEST_EXPECT_MSG_GT_OR_EQ_INTERNAL(actual, limit, msg, file, line)  \
   do {                                                                  \
-    if (!((actual) >= (limit)))                                          \
+    if (!((actual) >= (limit)))                                         \
       {                                                                 \
-        ASSERT_ON_FAILURE;                                               \
+        ASSERT_ON_FAILURE;                                              \
         std::ostringstream msgStream;                                   \
         msgStream << msg;                                               \
         std::ostringstream actualStream;                                \
         actualStream << actual;                                         \
         std::ostringstream limitStream;                                 \
         limitStream << limit;                                           \
-        ReportTestFailure (std::string (#actual) + " (actual) > " +      \
+        ReportTestFailure (std::string (#actual) + " (actual) > " +     \
                        std::string (#limit) + " (limit)",               \
                        actualStream.str (), limitStream.str (),         \
                        msgStream.str (), file, line);                   \
@@ -1034,18 +1065,20 @@
 /**
  * \ingroup testing
  *
- * \brief Test that an actual value is greater than a limit and report if not.
+ * \brief Test that an actual value is greater than a limit and report
+ * if not.
  *
- * Check to see if the actual value found in a test case is greater than the 
- * limit value.  If the actual value is greater nothing happens, but if the 
- * check fails, an error is reported in a consistent way.  EXPECT* macros do 
- * not return if an error is detected.
+ * Check to see if the actual value found in a test case is greater
+ * than the limit value.  If the actual value is greater nothing
+ * happens, but if the check fails, an error is reported in a
+ * consistent way.  EXPECT* macros do not return if an error is
+ * detected.
  *
  * The message is interpreted as a stream.
  *
- * \param actual Expression for the actual value found during the test.
- * \param limit Expression for the limit value of the test.
- * \param msg Message that is output if the test does not pass.
+ * \param [in] actual Expression for the actual value found during the test.
+ * \param [in] limit Expression for the limit value of the test.
+ * \param [in] msg Message that is output if the test does not pass.
  */
 #define NS_TEST_EXPECT_MSG_GT(actual, limit, msg) \
   NS_TEST_EXPECT_MSG_GT_INTERNAL (actual, limit, msg, __FILE__, __LINE__)
@@ -1053,19 +1086,20 @@
 /**
  * \ingroup testing
  *
- * \brief Test that an actual value is greater than or equal to limit and report
- * if not.
+ * \brief Test that an actual value is greater than or equal to limit
+ * and report if not.
  *
- * Check to see if the actual value found in a test case is greater than or
- * equal to the limit value.  If the actual value is greater nothing happens,
- * but if the check fails, an error is reported in a consistent way.  EXPECT* macros do
- * not return if an error is detected.
+ * Check to see if the actual value found in a test case is greater
+ * than or equal to the limit value.  If the actual value is greater
+ * nothing happens, but if the check fails, an error is reported in a
+ * consistent way.  EXPECT* macros do not return if an error is
+ * detected.
  *
  * The message is interpreted as a stream.
  *
- * \param actual Expression for the actual value found during the test.
- * \param limit Expression for the limit value of the test.
- * \param msg Message that is output if the test does not pass.
+ * \param [in] actual Expression for the actual value found during the test.
+ * \param [in] limit Expression for the limit value of the test.
+ * \param [in] msg Message that is output if the test does not pass.
  */
 #define NS_TEST_EXPECT_MSG_GT_OR_EQ(actual, limit, msg) \
   NS_TEST_EXPECT_MSG_GT_OR_EQ_INTERNAL (actual, limit, msg, __FILE__, __LINE__)
@@ -1074,22 +1108,27 @@
 
 /**
  * \ingroup testing
- * \brief Compare two double precision floating point numbers and declare them
- * equal if they are within some epsilon of each other.
+ * \brief Compare two double precision floating point numbers and
+ * declare them equal if they are within some epsilon of each other.
  *
- * Approximate comparison of floating point numbers near equality is trickier
- * than one may expect and is well-discussed in the literature.  Basic 
- * strategies revolve around a suggestion by Knuth to compare the floating 
- * point numbers as binary integers, supplying a maximum difference between
- * them .  This max difference is specified in Units in the Last Place (ulps)
- * or a floating point epsilon.
+ * Approximate comparison of floating point numbers near equality is
+ * trickier than one may expect and is well-discussed in the
+ * literature.  Basic strategies revolve around a suggestion by Knuth
+ * to compare the floating point numbers as binary integers, supplying
+ * a maximum difference between them .  This max difference is
+ * specified in Units in the Last Place (ulps) or a floating point
+ * epsilon.
  *
- * This routine is based on the GNU Scientific Library function gsl_fcmp.
+ * This routine is based on the GNU Scientific Library function
+ * gsl_fcmp.
  * 
- * \param a The first of double precision floating point numbers to compare
- * \param b The second of double precision floating point numbers to compare
- * \param epsilon The second of double precision floating point numberss to compare
- * \returns Returns true if the doubles are equal to a precision defined by epsilon
+ * \param [in] a The first of double precision floating point
+ *               numbers to compare
+ * \param [in] b The second of double precision floating point
+ *               numbers to compare
+ * \param [in] epsilon The tolerance to use in the comparison.
+ * \returns Returns \c true if the doubles are equal to a precision
+ *          defined by epsilon
  */
 bool TestDoubleIsEqual (const double a, const double b, 
                         const double epsilon = std::numeric_limits<double>::epsilon ());
@@ -1102,16 +1141,13 @@
  * \brief encapsulates test code
  *
  * To allow a new test to be run within the ns-3 test framework, users
- * need to create subclasses of this base class, override the DoRun method,
- * and use the NS_TEST_* macros within DoRun.
+ * need to create subclasses of this base class, override the DoRun
+ * method, and use the NS_TEST_* macros within DoRun.
  */
-class TestCase
+class TestCase : private NonCopyable
 {
 public:
-  /**
-   * \enum TestDuration
-   * \brief How long the test takes to execute.
-   */
+  /** \brief How long the test takes to execute. */
   enum TestDuration {
     QUICK         = 1,  //!< Fast test.
     EXTENSIVE     = 2,  //!< Medium length test.
@@ -1124,100 +1160,125 @@
   virtual ~TestCase ();
 
   /**
-   * \return name of this test
+   * \return The name of this test
    */
   std::string GetName (void) const;  
 
 protected:
   /**
-   * \param name the name of the new TestCase created
+   * \brief Constructor.
+   *
+   * \param [in] name The name of the new TestCase created
    */
   TestCase (std::string name);
 
   /**
    * \brief Add an individual child TestCase to this test suite.
    *
-   * \param testCase Pointer to the TestCase object to be added.
-   * \param duration Amount of time this test takes to execute.
+   * \param [in] testCase Pointer to the TestCase object to be added.
+   * \param [in] duration Amount of time this test takes to execute.
    */
   void AddTestCase (TestCase *testCase, enum TestDuration duration);
 
   /**
-   * \param directory the directory where the test data is located
+   * \brief Set the data directory where reference trace files can be
+   * found.
+   *
+   * \param [in] directory The directory where the test data is
+   * located
    *
-   * In general, this method is invoked as SetDataDir (NS_TEST_SOURCEDIR);
-   * However, if a module contains a test directory with subdirectories
-   * (e.g. src/mesh/test), and the test data (e.g. pcap traces) is located
-   * in one of these subdirectories, then the variable NS_TEST_SOURCEDIR 
-   * may not work and the user may want to explicitly pass in a 
-   * directory string.
+   * In general, this method is invoked as SetDataDir
+   * (NS_TEST_SOURCEDIR); However, if a module contains a test
+   * directory with subdirectories (e.g. src/mesh/test), and the test
+   * data (e.g. pcap traces) is located in one of these
+   * subdirectories, then the variable NS_TEST_SOURCEDIR may not work
+   * and the user may want to explicitly pass in a directory string.
    *
    * Note that NS_TEST_SOURCEDIR is set in src/wscript for each module
    */
   void SetDataDir (std::string directory);
 
   /**
-   * \return true if the tests have failed, false otherwise.
+   * \brief Check if any tests failed.
+   *
+   * \return \c true if any of the tests have failed, \c false otherwise.
    */
   bool IsStatusFailure (void) const;
   /**
-   * \return true if the tests have succeeded, false otherwise.
+   * \brief Check if all tests passed.
+   *
+   * \return \c true if the tests have succeeded, \c false otherwise.
    */
   bool IsStatusSuccess (void) const;
 
   /**
-   * \return a pointer to the parent of this test
+   * \brief Get the parent of this TestCsse.
+   *
+   * \return A pointer to the parent of this test.
    */
   TestCase * GetParent () const;
 
   /**
+   * \name Internal Interface
+   * These methods are the interface used by test macros and should not
+   * be used directly by normal test code.
    * @{
-   * \internal
-   * The methods below are used only by test macros and should not
-   * be used by normal users.
    */
   /**
-   * Log the failure of this TestCase.
-   *
-   * \param cond The test condition.
-   * \param actual Actual value of the test.
-   * \param limit Expected value of the test.
-   * \param message Message indicating the type of failure.
-   * \param file The file where the test failed.
-   * \param line The line number in \p file where the test failed.
+   * \brief Log the failure of this TestCase.
+   *
+   * \param [in] cond The test condition.
+   * \param [in] actual Actual value of the test.
+   * \param [in] limit Expected value of the test.
+   * \param [in] message Message indicating the type of failure.
+   * \param [in] file The file where the test failed.
+   * \param [in] line The line number in \p file where the test failed.
    */
   void ReportTestFailure (std::string cond, std::string actual, 
                       std::string limit, std::string message, 
                       std::string file, int32_t line);
   /**
-   * \return should we assert on failure, per the TestSuite configuration
+   * \brief Check if this run should assert on failure.
+   *
+   * \return \c true if we should assert on failure.
    */
   bool MustAssertOnFailure (void) const;
   /**
-   * \return should we continue on failure, per the TestSuite configuration
+   * \brief Check if this run should continue on failure.
+   *
+   * \return \c true if we should continue on failure.
    */
   bool MustContinueOnFailure (void) const;
   /**
-   * \param filename the bare (no path) file name
-   * \return the full path to filename in the data directory
+   * \brief Construct the full path to a file in the data directory.
+   *
+   * The data directory is configured by SetDataDirectory().
+   *
+   * \param [in] filename The bare (no path) file name
+   * \return The full path to \p filename in the data directory
    */
   std::string CreateDataDirFilename (std::string filename);
   /**
-   * \param filename the bare (no path) file name
-   * \return the full path to filename in the temporary directory.
+   * \brief Construct the full path to a file in a temporary directory.
+   *
    *  If the TestRunner is invoked with "--update-data", this will be
    *  the data directory instead.
+   *
+   * \param [in] filename The bare (no path) file name
+   * \return The full path to \p filename in the temporary directory.
    */
   std::string CreateTempDirFilename (std::string filename);
   /**@}*/
+  
 private:
   friend class TestRunnerImpl;
 
   /**
-   * \brief Implementation to do any local setup required for this TestCase.
+   * \brief Implementation to do any local setup required for this
+   * TestCase.
    *
-   * Subclasses should override this method to perform any costly per-test setup
-   * before DoRun is invoked.
+   * Subclasses should override this method to perform any costly
+   * per-test setup before DoRun is invoked.
    */
   virtual void DoSetup (void);
 
@@ -1229,34 +1290,30 @@
   virtual void DoRun (void) = 0;
 
   /**
-   * \brief Implementation to do any local setup required for this TestCase.
+   * \brief Implementation to do any local setup required for this
+   * TestCase.
    *
-   * Subclasses should override this method to perform any costly per-test teardown
+   * Subclasses should override this method to perform any costly
+   * per-test teardown
    */
   virtual void DoTeardown (void);
 
-  /**
-   * Private, to block copying
-   */
-  TestCase (TestCase& tc);
-  /**
-   * Private, to block copying
-   */
-  TestCase& operator= (TestCase& tc);
-
   // methods called by TestRunnerImpl
   /**
-   * Actually run this TestCase
+   * \brief Actually run this TestCase
    *
-   * \param runner The test runner implementation.
+   * \param [in] runner The test runner implementation.
    */
   void Run (TestRunnerImpl *runner);
   /**
-   * \return the failure status of this TestCase and all it's children
+   * \copydoc IsStatusFailure()
    */
   bool IsFailed (void) const;
 
-  // Forward declaration is enough, since we only include a pointer here
+  /**
+   * \ingroup testingimpl
+   * \brief Container for results from a TestCase.
+   */
   struct Result;
 
   TestCase *m_parent;                   //!< Pointer to my parent TestCase
@@ -1292,22 +1349,22 @@
   /**
    * \brief Constuct a new test suite.
    *
-   * \param name The name of the test suite.
-   * \param type The TestType of the test suite (defaults to UNIT test).
+   * \param [in] name The name of the test suite.
+   * \param [in] type The TestType of the test suite (defaults to UNIT test).
    */
   TestSuite (std::string name, Type type = UNIT);
 
   /**
    * \brief get the kind of test this test suite implements
    *
-   * \returns the Type of the suite.
+   * \returns The Type of the suite.
    */
   TestSuite::Type GetTestType (void);
 
 private:
+  // Inherited
   virtual void DoRun (void);
 
-
   TestSuite::Type m_type;               //!< Type of this TestSuite
 };
 
@@ -1320,11 +1377,12 @@
 {
 public:
   /**
-   * Run the requested suite of tests.
+   * Run the requested suite of tests,
+   * according to the given command line arguments.
    *
-   * \param argc number of elements in \pname{argv}
-   * \param argv vector of command line arguments
-   * \returns success status
+   * \param [in] argc The number of elements in \pname{argv}
+   * \param [in] argv The vector of command line arguments
+   * \returns Success status
    */
   static int Run (int argc, char *argv[]);
 };
@@ -1335,7 +1393,7 @@
  * \brief A simple way to store test vectors (for stimulus or from responses)
  */
 template <typename T>
-class TestVectors
+class TestVectors : private NonCopyable
 {
 public:
   /**
@@ -1348,41 +1406,32 @@
   virtual ~TestVectors ();
 
   /**
-   * \param reserve the number of entries to reserve
+   * \brief Set the expected length of this vector.
+   *
+   * \param [in] reserve The number of entries to reserve
    */
   void Reserve (uint32_t reserve);
 
   /**
-   * \param vector the test vector to add
-   * \returns the new test vector index
+   * \param [in] vector The test vector to add
+   * 
+   * \returns The new test vector index
    */
   uint32_t Add (T vector);
 
   /**
-   * \return the number of test vectors
+   * \brief Get the total number of test vectors.
+   * \return The number of test vectors
    */
   uint32_t GetN (void) const;
   /**
-   * Get the i'th test vector
-   * \param i the requested vector index
-   * \return the requested vector
+   * \brief Get the i'th test vector
+   * \param [in] i The requested vector index
+   * \return The requested vector
    */
   T Get (uint32_t i) const;
 
 private:
-  /**
-   * Copy constructor, private to block copying
-   */
-  TestVectors (const TestVectors& tv);
-  /**
-   * Assignment, private to prevent copying
-   */
-  TestVectors& operator= (const TestVectors& tv);
-  /**
-   * Comparison (unimplemented?)
-   */
-  bool operator== (const TestVectors& tv) const;
-
   typedef std::vector<T> TestVector;    //!< Container type
   TestVector m_vectors;                 //!< The list of test vectors
 };
diff -Naur ns-3.23/src/core/model/timer.h ns-3.24/src/core/model/timer.h
--- ns-3.23/src/core/model/timer.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/timer.h	2015-09-15 11:18:44.000000000 -0700
@@ -108,13 +108,14 @@
    */
   Timer ();
   /**
-   * \param destroyPolicy the event lifetime management policies to use for destroy events
+   * \param [in] destroyPolicy the event lifetime management policies
+   * to use for destroy events
    */
   Timer (enum DestroyPolicy destroyPolicy);
   ~Timer ();
 
   /**
-   * \param fn the function
+   * \param [in] fn the function
    *
    * Store this function in this Timer for later use by Timer::Schedule.
    */
@@ -122,67 +123,68 @@
   void SetFunction (FN fn);
 
   /**
-   * \param memPtr the member function pointer
-   * \param objPtr the pointer to object
+   * \param [in] memPtr the member function pointer
+   * \param [in] objPtr the pointer to object
    *
-   * Store this function and object in this Timer for later use by Timer::Schedule.
+   * Store this function and object in this Timer for later use by
+   * Timer::Schedule.
    */
   template <typename MEM_PTR, typename OBJ_PTR>
   void SetFunction (MEM_PTR memPtr, OBJ_PTR objPtr);
 
 
   /**
-   * \param a1 the first argument
+   * \param [in] a1 the first argument
    *
    * Store this argument in this Timer for later use by Timer::Schedule.
    */
   template <typename T1>
   void SetArguments (T1 a1);
   /**
-   * \param a1 the first argument
-   * \param a2 the second argument
+   * \param [in] a1 the first argument
+   * \param [in] a2 the second argument
    *
    * Store these arguments in this Timer for later use by Timer::Schedule.
    */
   template <typename T1, typename T2>
   void SetArguments (T1 a1, T2 a2);
   /**
-   * \param a1 the first argument
-   * \param a2 the second argument
-   * \param a3 the third argument
+   * \param [in] a1 the first argument
+   * \param [in] a2 the second argument
+   * \param [in] a3 the third argument
    *
    * Store these arguments in this Timer for later use by Timer::Schedule.
    */
   template <typename T1, typename T2, typename T3>
   void SetArguments (T1 a1, T2 a2, T3 a3);
   /**
-   * \param a1 the first argument
-   * \param a2 the second argument
-   * \param a3 the third argument
-   * \param a4 the fourth argument
+   * \param [in] a1 the first argument
+   * \param [in] a2 the second argument
+   * \param [in] a3 the third argument
+   * \param [in] a4 the fourth argument
    *
    * Store these arguments in this Timer for later use by Timer::Schedule.
    */
   template <typename T1, typename T2, typename T3, typename T4>
   void SetArguments (T1 a1, T2 a2, T3 a3, T4 a4);
   /**
-   * \param a1 the first argument
-   * \param a2 the second argument
-   * \param a3 the third argument
-   * \param a4 the fourth argument
-   * \param a5 the fifth argument
+   * \param [in] a1 the first argument
+   * \param [in] a2 the second argument
+   * \param [in] a3 the third argument
+   * \param [in] a4 the fourth argument
+   * \param [in] a5 the fifth argument
    *
    * Store these arguments in this Timer for later use by Timer::Schedule.
    */
   template <typename T1, typename T2, typename T3, typename T4, typename T5>
   void SetArguments (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
   /**
-   * \param a1 the first argument
-   * \param a2 the second argument
-   * \param a3 the third argument
-   * \param a4 the fourth argument
-   * \param a5 the fifth argument
-   * \param a6 the sixth argument
+   * \param [in] a1 the first argument
+   * \param [in] a2 the second argument
+   * \param [in] a3 the third argument
+   * \param [in] a4 the fourth argument
+   * \param [in] a5 the fifth argument
+   * \param [in] a6 the sixth argument
    *
    * Store these arguments in this Timer for later use by Timer::Schedule.
    */
@@ -190,17 +192,17 @@
   void SetArguments (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6);
 
   /**
-   * \param delay the delay
+   * \param [in] delay The delay
    *
    * The next call to Schedule will schedule the timer with this delay.
    */
   void SetDelay (const Time &delay);
   /**
-   * \returns the currently-configured delay for the next Schedule.
+   * \returns The currently-configured delay for the next Schedule.
    */
   Time GetDelay (void) const;
   /**
-   * \returns the amount of time left until this timer expires.
+   * \returns The amount of time left until this timer expires.
    *
    * This method returns zero if the timer is in EXPIRED state.
    */
@@ -216,20 +218,22 @@
    */
   void Remove (void);
   /**
-   * \return true if there is no currently-running event, false otherwise.
+   * \return \c true if there is no currently-running event,
+   * \c false otherwise.
    */
   bool IsExpired (void) const;
   /**
-   * \return true if there is a currently-running event, false otherwise.
+   * \return \c true if there is a currently-running event,
+   * \c false otherwise.
    */
   bool IsRunning (void) const;
   /**
-   * \returns true if this timer was suspended and not yet resumed, false
-   *          otherwise.
+   * \returns \c true if this timer was suspended and not yet resumed,
+   * \c false otherwise.
    */
   bool IsSuspended (void) const;
   /**
-   * \returns the current state of the timer.
+   * \returns The current state of the timer.
    */
   enum Timer::State GetState (void) const;
   /**
@@ -238,7 +242,7 @@
    */
   void Schedule (void);
   /**
-   * \param delay the delay to use
+   * \param [in] delay the delay to use
    *
    * Schedule a new event using the specified delay (ignore the delay set by
    * Timer::SetDelay), function, and arguments.
diff -Naur ns-3.23/src/core/model/timer-impl.h ns-3.24/src/core/model/timer-impl.h
--- ns-3.23/src/core/model/timer-impl.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/timer-impl.h	2015-09-15 11:18:44.000000000 -0700
@@ -52,70 +52,70 @@
    */
   /**@{*/
   /**
-   * \tparam T1 Type of the first argument.
-   * \param a1 The first argument
+   * \tparam T1 \deduced Type of the first argument.
+   * \param [in] a1 The first argument
    */
   template <typename T1>
   void SetArgs (T1 a1);
   /**
-   * \tparam T1 Type of the first argument.
-   * \tparam T2 Type of the second argument.
-   * \param a1 the first argument
-   * \param a2 the second argument
+   * \tparam T1 \deduced Type of the first argument.
+   * \tparam T2 \deduced Type of the second argument.
+   * \param [in] a1 the first argument
+   * \param [in] a2 the second argument
    */
   template <typename T1, typename T2>
   void SetArgs (T1 a1, T2 a2);
   /**
-   * \tparam T1 Type of the first argument.
-   * \tparam T2 Type of the second argument.
-   * \tparam T3 Type of the third argument.
-   * \param a1 the first argument
-   * \param a2 the second argument
-   * \param a3 the third argument
+   * \tparam T1 \deduced Type of the first argument.
+   * \tparam T2 \deduced Type of the second argument.
+   * \tparam T3 \deduced Type of the third argument.
+   * \param [in] a1 the first argument
+   * \param [in] a2 the second argument
+   * \param [in] a3 the third argument
    */
   template <typename T1, typename T2, typename T3>
   void SetArgs (T1 a1, T2 a2, T3 a3);
   /**
-   * \tparam T1 Type of the first argument.
-   * \tparam T2 Type of the second argument.
-   * \tparam T3 Type of the third argument.
-   * \tparam T4 Type of the fourth argument.
-   * \param a1 the first argument
-   * \param a2 the second argument
-   * \param a3 the third argument
-   * \param a4 the fourth argument
+   * \tparam T1 \deduced Type of the first argument.
+   * \tparam T2 \deduced Type of the second argument.
+   * \tparam T3 \deduced Type of the third argument.
+   * \tparam T4 \deduced Type of the fourth argument.
+   * \param [in] a1 the first argument
+   * \param [in] a2 the second argument
+   * \param [in] a3 the third argument
+   * \param [in] a4 the fourth argument
    */
   template <typename T1, typename T2, typename T3,
             typename T4>
   void SetArgs (T1 a1, T2 a2, T3 a3, T4 a4);
   /**
-   * \tparam T1 Type of the first argument.
-   * \tparam T2 Type of the second argument.
-   * \tparam T3 Type of the third argument.
-   * \tparam T4 Type of the fourth argument.
-   * \tparam T5 Type of the fifth argument.
-   * \param a1 the first argument
-   * \param a2 the second argument
-   * \param a3 the third argument
-   * \param a4 the fourth argument
-   * \param a5 the fifth argument
+   * \tparam T1 \deduced Type of the first argument.
+   * \tparam T2 \deduced Type of the second argument.
+   * \tparam T3 \deduced Type of the third argument.
+   * \tparam T4 \deduced Type of the fourth argument.
+   * \tparam T5 \deduced Type of the fifth argument.
+   * \param [in] a1 the first argument
+   * \param [in] a2 the second argument
+   * \param [in] a3 the third argument
+   * \param [in] a4 the fourth argument
+   * \param [in] a5 the fifth argument
    */
   template <typename T1, typename T2, typename T3,
             typename T4, typename T5>
   void SetArgs (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
   /**
-   * \tparam T1 Type of the first argument.
-   * \tparam T2 Type of the second argument.
-   * \tparam T3 Type of the third argument.
-   * \tparam T4 Type of the fourth argument.
-   * \tparam T5 Type of the fifth argument.
-   * \tparam T6 Type of the sixth argument.
-   * \param a1 the first argument
-   * \param a2 the second argument
-   * \param a3 the third argument
-   * \param a4 the fourth argument
-   * \param a5 the fifth argument
-   * \param a6 the sixth argument
+   * \tparam T1 \deduced Type of the first argument.
+   * \tparam T2 \deduced Type of the second argument.
+   * \tparam T3 \deduced Type of the third argument.
+   * \tparam T4 \deduced Type of the fourth argument.
+   * \tparam T5 \deduced Type of the fifth argument.
+   * \tparam T6 \deduced Type of the sixth argument.
+   * \param [in] a1 the first argument
+   * \param [in] a2 the second argument
+   * \param [in] a3 the third argument
+   * \param [in] a4 the fourth argument
+   * \param [in] a5 the fifth argument
+   * \param [in] a6 the sixth argument
    */
   template <typename T1, typename T2, typename T3,
             typename T4, typename T5, typename T6>
@@ -125,7 +125,7 @@
   /**
    * Schedule the callback for a future time.
    *
-   * \param delay The amount of time until the timer expires.
+   * \param [in] delay The amount of time until the timer expires.
    * \returns The scheduled EventId.
    */
   virtual EventId Schedule (const Time &delay) = 0;
@@ -155,7 +155,7 @@
   /**
    * Bind the arguments to be used when the callback function is invoked.
    *
-   * \param a1 The first argument.
+   * \param [in] a1 The first argument.
    */
   virtual void SetArguments (T1 a1) = 0;
 };
@@ -166,8 +166,8 @@
   /**
    * Bind the arguments to be used when the callback function is invoked.
    *
-   * \param a1 The first argument.
-   * \param a2 The second argument.
+   * \param [in] a1 The first argument.
+   * \param [in] a2 The second argument.
    */
   virtual void SetArguments (T1 a1,T2 a2) = 0;
 };
@@ -178,9 +178,9 @@
   /**
    * Bind the arguments to be used when the callback function is invoked.
    *
-   * \param a1 The first argument.
-   * \param a2 The second argument.
-   * \param a3 The third argument.
+   * \param [in] a1 The first argument.
+   * \param [in] a2 The second argument.
+   * \param [in] a3 The third argument.
    */
   virtual void SetArguments (T1 a1,T2 a2,T3 a3) = 0;
 };
@@ -191,10 +191,10 @@
   /**
    * Bind the arguments to be used when the callback function is invoked.
    *
-   * \param a1 The first argument.
-   * \param a2 The second argument.
-   * \param a3 The third argument.
-   * \param a4 The fourth argument.
+   * \param [in] a1 The first argument.
+   * \param [in] a2 The second argument.
+   * \param [in] a3 The third argument.
+   * \param [in] a4 The fourth argument.
    */
   virtual void SetArguments (T1 a1,T2 a2,T3 a3, T4 a4) = 0;
 };
@@ -205,11 +205,11 @@
   /**
    * Bind the arguments to be used when the callback function is invoked.
    *
-   * \param a1 The first argument.
-   * \param a2 The second argument.
-   * \param a3 The third argument.
-   * \param a4 The fourth argument.
-   * \param a5 The fifth argument.
+   * \param [in] a1 The first argument.
+   * \param [in] a2 The second argument.
+   * \param [in] a3 The third argument.
+   * \param [in] a4 The fourth argument.
+   * \param [in] a5 The fifth argument.
    */
   virtual void SetArguments (T1 a1,T2 a2,T3 a3, T4 a4, T5 a5) = 0;
 };
@@ -220,12 +220,12 @@
   /**
    * Bind the arguments to be used when the callback function is invoked.
    *
-   * \param a1 The first argument.
-   * \param a2 The second argument.
-   * \param a3 The third argument.
-   * \param a4 The fourth argument.
-   * \param a5 The fifth argument.
-   * \param a6 The sixth argument.
+   * \param [in] a1 The first argument.
+   * \param [in] a2 The second argument.
+   * \param [in] a3 The third argument.
+   * \param [in] a4 The fourth argument.
+   * \param [in] a5 The fifth argument.
+   * \param [in] a6 The sixth argument.
    */
   virtual void SetArguments (T1 a1,T2 a2,T3 a3, T4 a4, T5 a5, T6 a6) = 0;
 };
@@ -244,8 +244,8 @@
 /**
  * Make a TimerImpl from a function pointer taking varying numbers of arguments.
  *
- * \tparam FN Function signature type of the callback function.
- * \param fn The function pointer to invoke when the timer expires.
+ * \tparam FN \deduced Function signature type of the callback function.
+ * \param [in] fn The function pointer to invoke when the timer expires.
  * \returns The TimerImpl.
  */
 template <typename FN>
@@ -582,7 +582,7 @@
  *
  * This is the generic template declaration (with empty body).
  *
- * \tparam T The object type.
+ * \tparam T \explicit The object type.
  */
 template <typename T>
 struct TimerImplMemberTraits;
@@ -595,7 +595,7 @@
  *
  * This is the specialization for pointer to \c T.
  *
- * \tparam T The object type.
+ * \tparam T \explicit The object type.
  */
 template <typename T>
 struct TimerImplMemberTraits<T *>
@@ -603,7 +603,7 @@
   /**
    * Convert a pointer type to a reference.
    *
-   * \param p The pointer.
+   * \param [in] p The pointer.
    * \returns A reference to the object pointed to by \c p.
    */
   static T &GetReference (T *p)
@@ -616,10 +616,10 @@
  * Make a TimerImpl from a class method pointer taking
  * a varying number of arguments.
  *
- * \tparam MEM_PTR Class method function signature type.
- * \tparam OBJ_PTR Class type.
- * \param memPtr Class method to invoke when the timer expires.
- * \param objPtr Object instance pointer.
+ * \tparam MEM_PTR \deduced Class method function signature type.
+ * \tparam OBJ_PTR \deduced Class type.
+ * \param [in] memPtr Class method to invoke when the timer expires.
+ * \param [in] objPtr Object instance pointer.
  * \returns The TimerImpl.
  */
 template <typename MEM_PTR, typename OBJ_PTR>
diff -Naur ns-3.23/src/core/model/traced-callback.h ns-3.24/src/core/model/traced-callback.h
--- ns-3.23/src/core/model/traced-callback.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/traced-callback.h	2015-09-15 11:18:44.000000000 -0700
@@ -46,14 +46,14 @@
  * calling one of the \c operator() forms with the appropriate
  * number of arguments.
  *
- * \tparam T1 Type of the first argument to the functor.
- * \tparam T2 Type of the second argument to the functor.
- * \tparam T3 Type of the third argument to the functor.
- * \tparam T4 Type of the fourth argument to the functor.
- * \tparam T5 Type of the fifth argument to the functor.
- * \tparam T6 Type of the sixth argument to the functor.
- * \tparam T7 Type of the seventh argument to the functor.
- * \tparam T8 Type of the eighth argument to the functor.
+ * \tparam T1 \explicit Type of the first argument to the functor.
+ * \tparam T2 \explicit Type of the second argument to the functor.
+ * \tparam T3 \explicit Type of the third argument to the functor.
+ * \tparam T4 \explicit Type of the fourth argument to the functor.
+ * \tparam T5 \explicit Type of the fifth argument to the functor.
+ * \tparam T6 \explicit Type of the sixth argument to the functor.
+ * \tparam T7 \explicit Type of the seventh argument to the functor.
+ * \tparam T8 \explicit Type of the eighth argument to the functor.
  */
 template<typename T1 = empty, typename T2 = empty, 
          typename T3 = empty, typename T4 = empty,
@@ -67,7 +67,7 @@
   /**
    * Append a Callback to the chain (without a context).
    *
-   * \param callback Callback to add to chain.
+   * \param [in] callback Callback to add to chain.
    */
   void ConnectWithoutContext (const CallbackBase & callback);
   /**
@@ -76,21 +76,21 @@
    * The context string will be provided as the first argument
    * to the Callback.
    *
-   * \param callback Callback to add to chain.
-   * \param path Context string to provide when invoking the Callback.
+   * \param [in] callback Callback to add to chain.
+   * \param [in] path Context string to provide when invoking the Callback.
    */
   void Connect (const CallbackBase & callback, std::string path);
   /**
    * Remove from the chain a Callback which was connected without a context.
    *
-   * \param callback Callback to remove from the chain.
+   * \param [in] callback Callback to remove from the chain.
    */
   void DisconnectWithoutContext (const CallbackBase & callback);
   /**
    * Remove from the chain a Callback which was connected with a context.
    *
-   * \param callback Callback to remove from the chain.
-   * \param path Context path which was used to connect the Callback.
+   * \param [in] callback Callback to remove from the chain.
+   * \param [in] path Context path which was used to connect the Callback.
    */
   void Disconnect (const CallbackBase & callback, std::string path);
   /**
@@ -105,106 +105,106 @@
   void operator() (void) const;
   /**
    * \copybrief operator()()
-   * \tparam T1 Type of the first argument to the functor.
-   * \param a1 The first argument to the functor.
+   * \tparam T1 \deduced Type of the first argument to the functor.
+   * \param [in] a1 The first argument to the functor.
    */
   void operator() (T1 a1) const;
   /**
    * \copybrief operator()()
-   * \tparam T1 Type of the first argument to the functor.
-   * \tparam T2 Type of the second argument to the functor.
-   * \param a1 The first argument to the functor.
-   * \param a2 The second argument to the functor.
+   * \tparam T1 \deduced Type of the first argument to the functor.
+   * \tparam T2 \deduced Type of the second argument to the functor.
+   * \param [in] a1 The first argument to the functor.
+   * \param [in] a2 The second argument to the functor.
    */
   void operator() (T1 a1, T2 a2) const;
   /**
    * \copybrief operator()()
-   * \tparam T1 Type of the first argument to the functor.
-   * \tparam T2 Type of the second argument to the functor.
-   * \tparam T3 Type of the third argument to the functor.
-   * \param a1 The first argument to the functor.
-   * \param a2 The second argument to the functor.
-   * \param a3 The third argument to the functor.
+   * \tparam T1 \deduced Type of the first argument to the functor.
+   * \tparam T2 \deduced Type of the second argument to the functor.
+   * \tparam T3 \deduced Type of the third argument to the functor.
+   * \param [in] a1 The first argument to the functor.
+   * \param [in] a2 The second argument to the functor.
+   * \param [in] a3 The third argument to the functor.
    */
   void operator() (T1 a1, T2 a2, T3 a3) const;
   /**
    * \copybrief operator()()
-   * \tparam T1 Type of the first argument to the functor.
-   * \tparam T2 Type of the second argument to the functor.
-   * \tparam T3 Type of the third argument to the functor.
-   * \tparam T4 Type of the fourth argument to the functor.
-   * \param a1 The first argument to the functor.
-   * \param a2 The second argument to the functor.
-   * \param a3 The third argument to the functor.
-   * \param a4 The fourth argument to the functor.
+   * \tparam T1 \deduced Type of the first argument to the functor.
+   * \tparam T2 \deduced Type of the second argument to the functor.
+   * \tparam T3 \deduced Type of the third argument to the functor.
+   * \tparam T4 \deduced Type of the fourth argument to the functor.
+   * \param [in] a1 The first argument to the functor.
+   * \param [in] a2 The second argument to the functor.
+   * \param [in] a3 The third argument to the functor.
+   * \param [in] a4 The fourth argument to the functor.
    */
   void operator() (T1 a1, T2 a2, T3 a3, T4 a4) const;
   /**
    * \copybrief operator()()
-   * \tparam T1 Type of the first argument to the functor.
-   * \tparam T2 Type of the second argument to the functor.
-   * \tparam T3 Type of the third argument to the functor.
-   * \tparam T4 Type of the fourth argument to the functor.
-   * \tparam T5 Type of the fifth argument to the functor.
-   * \param a1 The first argument to the functor.
-   * \param a2 The second argument to the functor.
-   * \param a3 The third argument to the functor.
-   * \param a4 The fourth argument to the functor.
-   * \param a5 The fifth argument to the functor.
+   * \tparam T1 \deduced Type of the first argument to the functor.
+   * \tparam T2 \deduced Type of the second argument to the functor.
+   * \tparam T3 \deduced Type of the third argument to the functor.
+   * \tparam T4 \deduced Type of the fourth argument to the functor.
+   * \tparam T5 \deduced Type of the fifth argument to the functor.
+   * \param [in] a1 The first argument to the functor.
+   * \param [in] a2 The second argument to the functor.
+   * \param [in] a3 The third argument to the functor.
+   * \param [in] a4 The fourth argument to the functor.
+   * \param [in] a5 The fifth argument to the functor.
    */
   void operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) const;
   /**
    * \copybrief operator()()
-   * \tparam T1 Type of the first argument to the functor.
-   * \tparam T2 Type of the second argument to the functor.
-   * \tparam T3 Type of the third argument to the functor.
-   * \tparam T4 Type of the fourth argument to the functor.
-   * \tparam T5 Type of the fifth argument to the functor.
-   * \tparam T6 Type of the sixth argument to the functor.
-   * \param a1 The first argument to the functor.
-   * \param a2 The second argument to the functor.
-   * \param a3 The third argument to the functor.
-   * \param a4 The fourth argument to the functor.
-   * \param a5 The fifth argument to the functor.
-   * \param a6 The sixth argument to the functor.
+   * \tparam T1 \deduced Type of the first argument to the functor.
+   * \tparam T2 \deduced Type of the second argument to the functor.
+   * \tparam T3 \deduced Type of the third argument to the functor.
+   * \tparam T4 \deduced Type of the fourth argument to the functor.
+   * \tparam T5 \deduced Type of the fifth argument to the functor.
+   * \tparam T6 \deduced Type of the sixth argument to the functor.
+   * \param [in] a1 The first argument to the functor.
+   * \param [in] a2 The second argument to the functor.
+   * \param [in] a3 The third argument to the functor.
+   * \param [in] a4 The fourth argument to the functor.
+   * \param [in] a5 The fifth argument to the functor.
+   * \param [in] a6 The sixth argument to the functor.
    */
   void operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) const;
   /**
    * \copybrief operator()()
-   * \tparam T1 Type of the first argument to the functor.
-   * \tparam T2 Type of the second argument to the functor.
-   * \tparam T3 Type of the third argument to the functor.
-   * \tparam T4 Type of the fourth argument to the functor.
-   * \tparam T5 Type of the fifth argument to the functor.
-   * \tparam T6 Type of the sixth argument to the functor.
-   * \tparam T7 Type of the seventh argument to the functor.
-   * \param a1 The first argument to the functor.
-   * \param a2 The second argument to the functor.
-   * \param a3 The third argument to the functor.
-   * \param a4 The fourth argument to the functor.
-   * \param a5 The fifth argument to the functor.
-   * \param a6 The sixth argument to the functor.
-   * \param a7 The seventh argument to the functor.
+   * \tparam T1 \deduced Type of the first argument to the functor.
+   * \tparam T2 \deduced Type of the second argument to the functor.
+   * \tparam T3 \deduced Type of the third argument to the functor.
+   * \tparam T4 \deduced Type of the fourth argument to the functor.
+   * \tparam T5 \deduced Type of the fifth argument to the functor.
+   * \tparam T6 \deduced Type of the sixth argument to the functor.
+   * \tparam T7 \deduced Type of the seventh argument to the functor.
+   * \param [in] a1 The first argument to the functor.
+   * \param [in] a2 The second argument to the functor.
+   * \param [in] a3 The third argument to the functor.
+   * \param [in] a4 The fourth argument to the functor.
+   * \param [in] a5 The fifth argument to the functor.
+   * \param [in] a6 The sixth argument to the functor.
+   * \param [in] a7 The seventh argument to the functor.
    */
   void operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) const;
   /**
    * \copybrief operator()()
-   * \tparam T1 Type of the first argument to the functor.
-   * \tparam T2 Type of the second argument to the functor.
-   * \tparam T3 Type of the third argument to the functor.
-   * \tparam T4 Type of the fourth argument to the functor.
-   * \tparam T5 Type of the fifth argument to the functor.
-   * \tparam T6 Type of the sixth argument to the functor.
-   * \tparam T7 Type of the seventh argument to the functor.
-   * \tparam T8 Type of the eighth argument to the functor.
-   * \param a1 The first argument to the functor.
-   * \param a2 The second argument to the functor.
-   * \param a3 The third argument to the functor.
-   * \param a4 The fourth argument to the functor.
-   * \param a5 The fifth argument to the functor.
-   * \param a6 The sixth argument to the functor.
-   * \param a7 The seventh argument to the functor.
-   * \param a8 The eighth argument to the functor.
+   * \tparam T1 \deduced Type of the first argument to the functor.
+   * \tparam T2 \deduced Type of the second argument to the functor.
+   * \tparam T3 \deduced Type of the third argument to the functor.
+   * \tparam T4 \deduced Type of the fourth argument to the functor.
+   * \tparam T5 \deduced Type of the fifth argument to the functor.
+   * \tparam T6 \deduced Type of the sixth argument to the functor.
+   * \tparam T7 \deduced Type of the seventh argument to the functor.
+   * \tparam T8 \deduced Type of the eighth argument to the functor.
+   * \param [in] a1 The first argument to the functor.
+   * \param [in] a2 The second argument to the functor.
+   * \param [in] a3 The third argument to the functor.
+   * \param [in] a4 The fourth argument to the functor.
+   * \param [in] a5 The fifth argument to the functor.
+   * \param [in] a6 The sixth argument to the functor.
+   * \param [in] a7 The seventh argument to the functor.
+   * \param [in] a8 The eighth argument to the functor.
    */
   void operator() (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8) const;
   /**@}*/
@@ -225,14 +225,14 @@
   /**
    * Container type for holding the chain of Callbacks.
    *
-   * \tparam T1 Type of the first argument to the functor.
-   * \tparam T2 Type of the second argument to the functor.
-   * \tparam T3 Type of the third argument to the functor.
-   * \tparam T4 Type of the fourth argument to the functor.
-   * \tparam T5 Type of the fifth argument to the functor.
-   * \tparam T6 Type of the sixth argument to the functor.
-   * \tparam T7 Type of the seventh argument to the functor.
-   * \tparam T8 Type of the eighth argument to the functor.
+   * \tparam T1 \deduced Type of the first argument to the functor.
+   * \tparam T2 \deduced Type of the second argument to the functor.
+   * \tparam T3 \deduced Type of the third argument to the functor.
+   * \tparam T4 \deduced Type of the fourth argument to the functor.
+   * \tparam T5 \deduced Type of the fifth argument to the functor.
+   * \tparam T6 \deduced Type of the sixth argument to the functor.
+   * \tparam T7 \deduced Type of the seventh argument to the functor.
+   * \tparam T8 \deduced Type of the eighth argument to the functor.
    */
   typedef std::list<Callback<void,T1,T2,T3,T4,T5,T6,T7,T8> > CallbackList;
   /** The chain of Callbacks. */
@@ -264,7 +264,8 @@
 TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::ConnectWithoutContext (const CallbackBase & callback)
 {
   Callback<void,T1,T2,T3,T4,T5,T6,T7,T8> cb;
-  cb.Assign (callback);
+  if (!cb.Assign (callback))
+    NS_FATAL_ERROR_NO_MSG();
   m_callbackList.push_back (cb);
 }
 template<typename T1, typename T2,
@@ -275,7 +276,8 @@
 TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::Connect (const CallbackBase & callback, std::string path)
 {
   Callback<void,std::string,T1,T2,T3,T4,T5,T6,T7,T8> cb;
-  cb.Assign (callback);
+  if (!cb.Assign (callback))
+    NS_FATAL_ERROR ("when connecting to " << path);
   Callback<void,T1,T2,T3,T4,T5,T6,T7,T8> realCb = cb.Bind (path);
   m_callbackList.push_back (realCb);
 }
@@ -307,7 +309,8 @@
 TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::Disconnect (const CallbackBase & callback, std::string path)
 {
   Callback<void,std::string,T1,T2,T3,T4,T5,T6,T7,T8> cb;
-  cb.Assign (callback);
+  if (!cb.Assign (callback))
+    NS_FATAL_ERROR ("when disconnecting from " << path);
   Callback<void,T1,T2,T3,T4,T5,T6,T7,T8> realCb = cb.Bind (path);
   DisconnectWithoutContext (realCb);
 }
diff -Naur ns-3.23/src/core/model/traced-value.h ns-3.24/src/core/model/traced-value.h
--- ns-3.23/src/core/model/traced-value.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/traced-value.h	2015-09-15 11:18:44.000000000 -0700
@@ -56,13 +56,44 @@
  *        values used by the various model components.
  *
  * Additional callback function signatures defined elsewhere:
- *   - Time::TracedValueCallback
- *   - ns3::SequenceNumber32TracedValueCallback
+ *   - TracedValueCallback::Time
+ *   - TracedValueCallback::SequenceNumber32
+ *   - TracedValueCallback::LrWpanMacState
+ *   - TracedValueCallback::LrWpanPhyEnumeration
  */
 
 /**
  * \ingroup tracing
  *
+ * \brief TracedValue Callback function types.
+ */
+namespace TracedValueCallback {
+
+  /**
+   * \name TracedValueCallback Signatures for POD.
+   * @{
+   */
+  /**
+   *  TracedValue Callback signature for POD.
+   *
+   * \param [in] oldValue original value of the traced variable
+   * \param [in] newValue new value of the traced variable
+   */
+  typedef void (* Bool)  (bool     oldValue, bool     newValue);
+  typedef void (* Int8)  (int8_t   oldValue, int8_t   newValue);
+  typedef void (* Uint8) (uint8_t  oldValue, uint8_t  newValue);
+  typedef void (* Int16) (int16_t  oldValue, int16_t  newValue);
+  typedef void (* Uint16)(uint16_t oldValue, uint16_t newValue);
+  typedef void (* Int32) (int32_t  oldValue, int32_t  newValue);
+  typedef void (* Uint32)(uint32_t oldValue, uint32_t newValue);
+  typedef void (* Double)(double   oldValue, double   newValue);
+  /**@}*/
+}  // namespace TracedValueCallback
+
+  
+/**
+ * \ingroup tracing
+ *
  * \brief Trace classes with value semantics
  *
  * If you want to trace the change of value of a class or
@@ -73,7 +104,7 @@
  * and will define Connect/DisconnectWithoutContext methods to work
  * with MakeTraceSourceAccessor.
  *
- * \tparam T The type of the underlying value being traced.
+ * \tparam T \explicit The type of the underlying value being traced.
  */
 template <typename T>
 class TracedValue
@@ -84,13 +115,13 @@
     : m_v () {}
   /**
    * Copy constructor.
-   * \param o The value to copy.
+   * \param [in] o The value to copy.
    */
   TracedValue (const TracedValue &o)
     : m_v (o.m_v) {}
   /**
    * Construct from an explicit variable.
-   * \param v The variable to trace.
+   * \param [in] v The variable to trace.
    */
   TracedValue (const T &v)
     : m_v (v) {}
@@ -103,7 +134,7 @@
   }
   /**
    * Assignment.
-   * \param o The value to assign to this instance.
+   * \param [in] o The value to assign to this instance.
    * \return This TracedValue.
    */
   TracedValue &operator = (const TracedValue &o) {
@@ -113,8 +144,8 @@
   }
   /**
    * Copy from a TracedValue of a compatable type.
-   * \tparam U The underlying type of the other TracedValue.
-   * \param other The other TracedValuet to copy.
+   * \tparam U \deduced The underlying type of the other TracedValue.
+   * \param [in] other The other TracedValuet to copy.
    */
   template <typename U>
   TracedValue (const TracedValue<U> &other)
@@ -122,8 +153,8 @@
   {}
   /**
    * Copy from a variable type compatible with this underlying type.
-   * \tparam U Type of the other variable.
-   * \param other The other variable to copy.
+   * \tparam U \deduced Type of the other variable.
+   * \param [in] other The other variable to copy.
    */
   template <typename U>
   TracedValue (const U &other)
@@ -132,7 +163,7 @@
   /**
    * Connect a Callback (without context.)
    *
-   * \param cb The callback to connect.
+   * \param [in] cb The callback to connect.
    */
   void ConnectWithoutContext (const CallbackBase &cb) {
     m_cb.ConnectWithoutContext (cb);
@@ -143,8 +174,8 @@
    * The context string will be provided as the first argument to the
    * Callback function.
    *
-   * \param cb The Callback to connect to the target trace source.
-   * \param path The context to bind to the user callback.
+   * \param [in] cb The Callback to connect to the target trace source.
+   * \param [in] path The context to bind to the user callback.
    */
   void Connect (const CallbackBase &cb, std::string path) {
     m_cb.Connect (cb, path);
@@ -152,7 +183,7 @@
   /**
    * Disconnect a Callback which was connected without context.
    *
-   * \param cb The Callback to disconnect.
+   * \param [in] cb The Callback to disconnect.
    */
   void DisconnectWithoutContext (const CallbackBase &cb) {
     m_cb.DisconnectWithoutContext (cb);
@@ -160,8 +191,8 @@
   /**
    * Disconnect a Callback which was connected with context.
    *
-   * \param cb The Callback to disconnect.
-   * \param path The context to bind to the user callback.
+   * \param [in] cb The Callback to disconnect.
+   * \param [in] path The context to bind to the user callback.
    */
   void Disconnect (const CallbackBase &cb, std::string path) {
     m_cb.Disconnect (cb, path);
@@ -170,7 +201,7 @@
    * Set the value of the underlying variable.
    *
    * If the new value differs from the old, the Callback will be invoked.
-   * \param v The new value.
+   * \param [in] v The new value.
    */
   void Set (const T &v) {
     if (m_v != v)
@@ -225,23 +256,6 @@
   }
   /**@}*/
 
-  /**
-   *  TracedValue Callback signature for POD.
-   *
-   * \param [in] oldValue original value of the traced variable
-   * \param [in] newValue new value of the traced variable
-   * @{
-   */
-  typedef void (* BoolCallback)  (const bool     oldValue, const bool     newValue);
-  typedef void (* Int8Callback)  (const int8_t   oldValue, const int8_t   newValue);
-  typedef void (* Uint8Callback) (const uint8_t  oldValue, const uint8_t  newValue);
-  typedef void (* Int16Callback) (const int16_t  oldValue, const int16_t  newValue);
-  typedef void (* Uint16Callback)(const uint16_t oldValue, const uint16_t newValue);
-  typedef void (* Int32Callback) (const int32_t  oldValue, const int32_t  newValue);
-  typedef void (* Uint32Callback)(const uint32_t oldValue, const uint32_t newValue);
-  typedef void (* DoubleCallback)(const double   oldValue, const double   newValue);
-  /**@}*/
-
 private:
   /** The underlying value. */
   T m_v;
@@ -263,9 +277,9 @@
  *
  * The underlying value will be written to the stream.
  *
- * \tparam T The underlying type of the TracedValue.
- * \param os The output stream.
- * \param rhs The TracedValue to stream.
+ * \tparam T \deduced The underlying type of the TracedValue.
+ * \param [in,out] os The output stream.
+ * \param [in] rhs The TracedValue to stream.
  * \returns The stream.
  */
 template <typename T>
@@ -276,10 +290,10 @@
 
 /**
  * Boolean operator for TracedValue.
- * \tparam T The underlying type held by the left-hand argument.
- * \tparam U The underlying type held by the right-hand argument.
- * \param lhs The left-hand argument.
- * \param rhs The right-hand argument.
+ * \tparam T \deduced The underlying type held by the left-hand argument.
+ * \tparam U \deduced The underlying type held by the right-hand argument.
+ * \param [in] lhs The left-hand argument.
+ * \param [in] rhs The right-hand argument.
  * \returns The boolean result of comparing the underlying values.
  */
 template <typename T, typename U>
@@ -418,10 +432,10 @@
  * This returns the arithmetic result in a new TracedValue,
  * which has no Callback connected.
  *
- * \tparam T The underlying type held by the left-hand argument.
- * \tparam U The underlying type held by the right-hand argument.
- * \param lhs The left-hand argument.
- * \param rhs The right-hand argument.
+ * \tparam T \deduced The underlying type held by the left-hand argument.
+ * \tparam U \deduced The underlying type held by the right-hand argument.
+ * \param [in] lhs The left-hand argument.
+ * \param [in] rhs The right-hand argument.
  * \returns The result of doing the operator on
  *     the underlying values.
  */
@@ -621,10 +635,10 @@
  * is assigned to the \c lhs TracedValue.  If the new value 
  * is different, the Callback will be invoked.
  *
- * \tparam T The underlying type held by the left-hand argument.
- * \tparam U The underlying type held by the right-hand argument.
- * \param lhs The left-hand argument.
- * \param rhs The right-hand argument.
+ * \tparam T \deduced The underlying type held by the left-hand argument.
+ * \tparam U \deduced The underlying type held by the right-hand argument.
+ * \param [in] lhs The left-hand argument.
+ * \param [in] rhs The right-hand argument.
  * \returns The result of doing the operator on
  *     the underlying values.
  */
@@ -722,8 +736,8 @@
 /**
  * Unary arithmetic operator for TracedValue.
  *
- * \tparam T The underlying type held by the TracedValue.
- * \param lhs The TracedValue.
+ * \tparam T \deduced The underlying type held by the TracedValue.
+ * \param [in] lhs The TracedValue.
  * \returns The result of doing the operator on
  *     the underlying values.
  */
diff -Naur ns-3.23/src/core/model/trace-source-accessor.h ns-3.24/src/core/model/trace-source-accessor.h
--- ns-3.23/src/core/model/trace-source-accessor.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/trace-source-accessor.h	2015-09-15 11:18:44.000000000 -0700
@@ -54,8 +54,8 @@
   /**
    * Connect a Callback to a TraceSource (without context.)
    *
-   * \param obj The object instance which contains the target trace source.
-   * \param cb The callback to connect to the target trace source.
+   * \param [in] obj The object instance which contains the target trace source.
+   * \param [in] cb The callback to connect to the target trace source.
    * \return \c true unless the connection could not be made, typically because
    *         the \c obj couldn't be cast to the correct type.
    */
@@ -66,9 +66,9 @@
    * The context string will be provided as the first argument to the
    * Callback function.
    *
-   * \param obj The object instance which contains the target trace source.
-   * \param context The context to bind to the user callback.
-   * \param cb The callback to connect to the target trace source.
+   * \param [in] obj The object instance which contains the target trace source.
+   * \param [in] context The context to bind to the user callback.
+   * \param [in] cb The callback to connect to the target trace source.
    * \return \c true unless the connection could not be made, typically because
    *         the \c obj couldn't be cast to the correct type.
    */
@@ -76,8 +76,8 @@
   /**
    * Disconnect a Callback from a TraceSource (without context).
    *
-   * \param obj The object instance which contains the target trace source.
-   * \param cb The callback to disconnect from the target trace source.
+   * \param [in] obj The object instance which contains the target trace source.
+   * \param [in] cb The callback to disconnect from the target trace source.
    * \return \c true unless the connection could not be made, typically because
    *         the \c obj couldn't be cast to the correct type.
    */
@@ -88,9 +88,9 @@
    * The context string will be provided as the first argument to the
    * Callback function.
    *
-   * \param obj the object instance which contains the target trace source.
-   * \param context the context which was bound to the user callback.
-   * \param cb the callback to disconnect from the target trace source.
+   * \param [in] obj the object instance which contains the target trace source.
+   * \param [in] context the context which was bound to the user callback.
+   * \param [in] cb the callback to disconnect from the target trace source.
    * \return \c true unless the connection could not be made, typically because
    *         the \c obj couldn't be cast to the correct type.
    */
@@ -109,7 +109,7 @@
  * static-polymorphic class.  This functionality is typically provided
  * by wrapping an object data member in a TracedCallback.
  *
- * \param a the trace source
+ * \param [in] a The trace source
  * \returns The TraceSourceAccessor
  */
 template <typename T>
@@ -128,9 +128,9 @@
  * \ingroup tracing
  * MakeTraceSourceAccessor() implementation.
  *
- * \tparam T Class type of the TracedCallback
- * \tparam SOURCE Type of the underlying value.
- * \param a The underlying data value.
+ * \tparam T \deduced Class type of the TracedCallback
+ * \tparam SOURCE \deduced Type of the underlying value.
+ * \param [in] a The underlying data value.
  * \returns The TraceSourceAccessor
  */
 template <typename T, typename SOURCE>
diff -Naur ns-3.23/src/core/model/type-id.cc ns-3.24/src/core/model/type-id.cc
--- ns-3.23/src/core/model/type-id.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/type-id.cc	2015-09-15 11:18:44.000000000 -0700
@@ -47,6 +47,7 @@
 // to find g_log
 
 /**
+ * \ingroup object
  * \brief TypeId information manager
  *
  * Information records are stored in a vector.  Name and hash lookup
@@ -74,89 +75,276 @@
  * collisions.  The three-fold collision probability should be an
  * acceptablly small error rate.
  */
-class IidManager
+class IidManager : public Singleton<IidManager>
 {
 public:
-  IidManager ();
+  /**
+   * Create a new unique type id.
+   * \param [in] name The name of this type id.
+   * \returns The id.
+   */
   uint16_t AllocateUid (std::string name);
+  /**
+   * Set the parent of a type id.
+   * \param [in] uid The id.
+   * \param [in] parent The id of the parent.
+   */
   void SetParent (uint16_t uid, uint16_t parent);
+  /**
+   * Set the group name of a type id.
+   * \param [in] uid The id.
+   * \param [in] groupName The group name.
+   */
   void SetGroupName (uint16_t uid, std::string groupName);
+  /**
+   * Set the size of the object class referred to by this id.
+   * \param [in] uid The id.
+   * \param [in] size The object size.
+   */
   void SetSize (uint16_t uid, std::size_t size);
+  /**
+   * Add a constructor Callback to this type id.
+   * \param [in] uid The id.
+   * \param [in] callback The Callback for the constructor.
+   */
   void AddConstructor (uint16_t uid, Callback<ObjectBase *> callback);
+  /**
+   * Mark this type id to be excluded from documentation.
+   * \param [in] uid The id.
+   */
   void HideFromDocumentation (uint16_t uid);
+  /**
+   * Get a type id by name.
+   * \param [in] name The type id to find.
+   * \returns The type id.  A type id of 0 means \p name wasn't found.
+   */
   uint16_t GetUid (std::string name) const;
+  /**
+   * Get a type id by hash value.
+   * \param [in] hash The type id to find.
+   * \returns The type id.  A type id of 0 means \p hash wasn't found.
+   */
   uint16_t GetUid (TypeId::hash_t hash) const;
+  /**
+   * Get the name of a type id.
+   * \param [in] uid The id.
+   * \returns The name of the type id.
+   */
   std::string GetName (uint16_t uid) const;
+  /**
+   * Get the hash of a type id.
+   * \param [in] uid The id.
+   * \returns The hash of the type id.
+   */
   TypeId::hash_t GetHash (uint16_t uid) const;
+  /**
+   * Get the parent of a type id.
+   * \param [in] uid The id.
+   * \returns The parent type id of the type id.
+   */
   uint16_t GetParent (uint16_t uid) const;
+  /**
+   * Get the group name of a type id.
+   * \param [in] uid The id.
+   * \returns The group name of the type id.
+   */
   std::string GetGroupName (uint16_t uid) const;
+  /**
+   * Get the size of a type id.
+   * \param [in] uid The id.
+   * \returns The size of the type id.
+   */
   std::size_t GetSize (uint16_t uid) const;
+  /**
+   * Get the constructor Callback of a type id.
+   * \param [in] uid The id.
+   * \returns The constructor Callback of the type id.
+   */
   Callback<ObjectBase *> GetConstructor (uint16_t uid) const;
+  /**
+   * Check if a type id has a constructor Callback.
+   * \param [in] uid The id.
+   * \returns \c true if the type id has a constructor Callback.
+   */
   bool HasConstructor (uint16_t uid) const;
+  /**
+   * Get the total number of type ids.
+   * \returns The total number.
+   */
   uint32_t GetRegisteredN (void) const;
+  /**
+   * Get a type id by index.
+   *
+   * The type id value 0 indicates not registerd, so there is an offset
+   * of 1 between the index and the type id value.  This function converts
+   * from an index to the type id value.
+   * \param [in] i The index.
+   * \returns The type id.
+   */
   uint16_t GetRegistered (uint32_t i) const;
-  void AddAttribute (uint16_t uid, 
+  /**
+   * Record a new attribute in a type id.
+   * \param [in] uid The id.
+   * \param [in] name The name of the new attribute
+   * \param [in] help Some help text which describes the purpose of this
+   *             attribute.
+   * \param [in] flags Flags which describe how this attribute can be
+   *             read and/or written.
+   * \param [in] initialValue The initial value for this attribute.
+   * \param [in] accessor An instance of the associated AttributeAccessor
+   *             subclass.
+   * \param [in] checker An instance of the associated AttributeChecker
+   *             subclass.
+   */
+  void AddAttribute (uint16_t uid,
                      std::string name,
                      std::string help, 
                      uint32_t flags,
                      Ptr<const AttributeValue> initialValue,
-                     Ptr<const AttributeAccessor> spec,
+                     Ptr<const AttributeAccessor> accessor,
                      Ptr<const AttributeChecker> checker);
+  /**
+   * Set the initial value of an Attribute.
+   * \param [in] uid The id.
+   * \param [in] i The attribute to manipulate
+   * \param [in] initialValue The new initial value to use for this attribute.
+   */
   void SetAttributeInitialValue(uint16_t uid,
                                 uint32_t i,
                                 Ptr<const AttributeValue> initialValue);
+  /**
+   * Get the number of attributes.
+   * \param [in] uid The id.
+   * \returns The number of attributes associated to this TypeId
+   */
   uint32_t GetAttributeN (uint16_t uid) const;
+  /**
+   * Get Attribute information by index.
+   * \param [in] uid The id.
+   * \param [in] i Index into attribute array
+   * \returns The information associated to attribute whose index is \p i.
+   */
   struct TypeId::AttributeInformation GetAttribute(uint16_t uid, uint32_t i) const;
+  /**
+   * Record a new TraceSource.
+   * \param [in] uid The id.
+   * \param [in] name The name of the new trace source
+   * \param [in] help Some help text which describes the purpose of this
+   *             trace source.
+   * \param [in] accessor A pointer to a TraceSourceAccessor which can be
+   *             used to connect/disconnect sinks to this trace source.
+   * \param [in] callback Fully qualified typedef name for the callback
+   *             signature.  Generally this should begin with the
+   *             "ns3::" namespace qualifier.  
+   * \returns This TypeId instance.
+   */
   void AddTraceSource (uint16_t uid,
                        std::string name, 
                        std::string help,
                        Ptr<const TraceSourceAccessor> accessor,
                        std::string callback);
+  /**
+   * Get the number of Trace sources.
+   * \param [in] uid The id.
+   * \returns The number of trace sources defined in this TypeId.
+   */
   uint32_t GetTraceSourceN (uint16_t uid) const;
+  /**
+   * Get the trace source by index.
+   * \param [in] uid The id.
+   * \param [in] i Index into trace source array.
+   * \returns Detailed information about the requested trace source.
+   */
   struct TypeId::TraceSourceInformation GetTraceSource(uint16_t uid, uint32_t i) const;
+  /**
+   * Check if this TypeId should not be listed in documentation.
+   * \param [in] uid The id.
+   * \returns \c true if this TypeId should be hidden from the user.
+   */
   bool MustHideFromDocumentation (uint16_t uid) const;
 
 private:
+  /**
+   * Check if a type id has a given TraceSource.
+   * \param [in] uid The id.
+   * \param [in] name The TraceSource name.
+   * \returns \c true if \p uid has the TraceSource \p name.
+   */
   bool HasTraceSource (uint16_t uid, std::string name);
+  /**
+   * Check if a type id has a given Attribute.
+   * \param [in] uid The id.
+   * \param [in] name The Attribute name.
+   * \returns \c true if \p uid has the Attribute \p name.
+   */
   bool HasAttribute (uint16_t uid, std::string name);
+  /**
+   * Hashing function.
+   * \param [in] name The type id name.
+   * \returns The hashed value of \p name.
+   */
   static TypeId::hash_t Hasher (const std::string name);
 
+  /** The information record about a single type id. */
   struct IidInformation {
+    /** The type id name. */
     std::string name;
+    /** The type id hash value. */
     TypeId::hash_t hash;
+    /** The parent type id. */
     uint16_t parent;
+    /** The group name. */
     std::string groupName;
+    /** The size of the object represented by this type id. */
     std::size_t size;
+    /** \c true if a constructor Callback has been registered. */
     bool hasConstructor;
+    /** The constructor Callback. */
     Callback<ObjectBase *> constructor;
+    /** \c true if this type should be omitted from documentation. */
     bool mustHideFromDocumentation;
+    /** The container of Attributes. */
     std::vector<struct TypeId::AttributeInformation> attributes;
+    /** The container of TraceSources. */
     std::vector<struct TypeId::TraceSourceInformation> traceSources;
   };
+  /** Iterator type. */
   typedef std::vector<struct IidInformation>::const_iterator Iterator;
 
+  /**
+   * Retrieve the information record for a type.
+   * \param [in] uid The id.
+   * \returns The information record.
+   */
   struct IidManager::IidInformation *LookupInformation (uint16_t uid) const;
 
+  /** The container of all type id records. */
   std::vector<struct IidInformation> m_information;
 
+  /** Type of the by-name index. */
   typedef std::map<std::string, uint16_t> namemap_t;
+  /** The by-name index. */
   namemap_t m_namemap;
 
+  /** Type of the by-hash index. */
   typedef std::map<TypeId::hash_t, uint16_t> hashmap_t;
+  /** The by-hash index. */
   hashmap_t m_hashmap;
 
-  
-  // To handle the first collision, we reserve the high bit as a
-  // chain flag:
-  enum { HashChainFlag = 0x80000000};
+
+  enum {
+    /**
+     * Hash chaining flag.
+     *
+     * To handle the first collision, we reserve the high bit as a
+     * chain flag.
+     */
+    HashChainFlag = 0x80000000
+  };
 };
 
-IidManager::IidManager ()
-{
-  NS_LOG_FUNCTION (this);
-}
 
-  //static
+//static
 TypeId::hash_t
 IidManager::Hasher (const std::string name)
 {
@@ -548,7 +736,7 @@
 TypeId::TypeId (const char *name)
 {
   NS_LOG_FUNCTION (this << name);
-  uint16_t uid = Singleton<IidManager>::Get ()->AllocateUid (name);
+  uint16_t uid = IidManager::Get ()->AllocateUid (name);
   NS_ASSERT (uid != 0);
   m_tid = uid;
 }
@@ -563,7 +751,7 @@
 TypeId::LookupByName (std::string name)
 {
   NS_LOG_FUNCTION (name);
-  uint16_t uid = Singleton<IidManager>::Get ()->GetUid (name);
+  uint16_t uid = IidManager::Get ()->GetUid (name);
   NS_ASSERT_MSG (uid != 0, "Assert in TypeId::LookupByName: " << name << " not found");
   return TypeId (uid);
 }
@@ -571,7 +759,7 @@
 TypeId::LookupByNameFailSafe (std::string name, TypeId *tid)
 {
   NS_LOG_FUNCTION (name << tid);
-  uint16_t uid = Singleton<IidManager>::Get ()->GetUid (name);
+  uint16_t uid = IidManager::Get ()->GetUid (name);
   if (uid == 0)
     {
       return false;
@@ -582,7 +770,7 @@
 TypeId
 TypeId::LookupByHash (hash_t hash)
 {
-  uint16_t uid = Singleton<IidManager>::Get ()->GetUid (hash);
+  uint16_t uid = IidManager::Get ()->GetUid (hash);
   NS_ASSERT_MSG (uid != 0, "Assert in TypeId::LookupByHash: 0x"
                  << std::hex << hash << std::dec << " not found");
   return TypeId (uid);
@@ -590,7 +778,7 @@
 bool
 TypeId::LookupByHashFailSafe (hash_t hash, TypeId *tid)
 {
-  uint16_t uid = Singleton<IidManager>::Get ()->GetUid (hash);
+  uint16_t uid = IidManager::Get ()->GetUid (hash);
   if (uid == 0)
     {
       return false;
@@ -603,13 +791,13 @@
 TypeId::GetRegisteredN (void)
 {
   NS_LOG_FUNCTION_NOARGS ();
-  return Singleton<IidManager>::Get ()->GetRegisteredN ();
+  return IidManager::Get ()->GetRegisteredN ();
 }
 TypeId 
 TypeId::GetRegistered (uint32_t i)
 {
   NS_LOG_FUNCTION (i);
-  return TypeId (Singleton<IidManager>::Get ()->GetRegistered (i));
+  return TypeId (IidManager::Get ()->GetRegistered (i));
 }
 
 bool
@@ -638,35 +826,35 @@
 TypeId::SetParent (TypeId tid)
 {
   NS_LOG_FUNCTION (this << tid);
-  Singleton<IidManager>::Get ()->SetParent (m_tid, tid.m_tid);
+  IidManager::Get ()->SetParent (m_tid, tid.m_tid);
   return *this;
 }
 TypeId 
 TypeId::SetGroupName (std::string groupName)
 {
   NS_LOG_FUNCTION (this << groupName);
-  Singleton<IidManager>::Get ()->SetGroupName (m_tid, groupName);
+  IidManager::Get ()->SetGroupName (m_tid, groupName);
   return *this;
 }
 TypeId 
 TypeId::SetSize (std::size_t size)
 {
   NS_LOG_FUNCTION (this << size);
-  Singleton<IidManager>::Get ()->SetSize (m_tid, size);
+  IidManager::Get ()->SetSize (m_tid, size);
   return *this;
 }
 TypeId 
 TypeId::GetParent (void) const
 {
   NS_LOG_FUNCTION (this);
-  uint16_t parent = Singleton<IidManager>::Get ()->GetParent (m_tid);
+  uint16_t parent = IidManager::Get ()->GetParent (m_tid);
   return TypeId (parent);
 }
 bool 
 TypeId::HasParent (void) const
 {
   NS_LOG_FUNCTION (this);
-  uint16_t parent = Singleton<IidManager>::Get ()->GetParent (m_tid);
+  uint16_t parent = IidManager::Get ()->GetParent (m_tid);
   return parent != m_tid;
 }
 bool 
@@ -684,7 +872,7 @@
 TypeId::GetGroupName (void) const
 {
   NS_LOG_FUNCTION (this);
-  std::string groupName = Singleton<IidManager>::Get ()->GetGroupName (m_tid);
+  std::string groupName = IidManager::Get ()->GetGroupName (m_tid);
   return groupName;
 }
 
@@ -692,21 +880,21 @@
 TypeId::GetName (void) const
 {
   NS_LOG_FUNCTION (this);
-  std::string name = Singleton<IidManager>::Get ()->GetName (m_tid);
+  std::string name = IidManager::Get ()->GetName (m_tid);
   return name;
 }
 
 TypeId::hash_t
 TypeId::GetHash (void) const
 {
-  hash_t hash = Singleton<IidManager>::Get ()->GetHash (m_tid);
+  hash_t hash = IidManager::Get ()->GetHash (m_tid);
   return hash;
 }
 std::size_t
 TypeId::GetSize (void) const
 {
   NS_LOG_FUNCTION (this);
-  std::size_t size = Singleton<IidManager>::Get ()->GetSize (m_tid);
+  std::size_t size = IidManager::Get ()->GetSize (m_tid);
   return size;
 }
 
@@ -714,7 +902,7 @@
 TypeId::HasConstructor (void) const
 {
   NS_LOG_FUNCTION (this);
-  bool hasConstructor = Singleton<IidManager>::Get ()->HasConstructor (m_tid);
+  bool hasConstructor = IidManager::Get ()->HasConstructor (m_tid);
   return hasConstructor;
 }
 
@@ -722,7 +910,7 @@
 TypeId::DoAddConstructor (Callback<ObjectBase *> cb)
 {
   NS_LOG_FUNCTION (this << &cb);
-  Singleton<IidManager>::Get ()->AddConstructor (m_tid, cb);
+  IidManager::Get ()->AddConstructor (m_tid, cb);
 }
 
 TypeId 
@@ -733,7 +921,7 @@
                       Ptr<const AttributeChecker> checker)
 {
   NS_LOG_FUNCTION (this << name << help << &initialValue << accessor << checker);
-  Singleton<IidManager>::Get ()->AddAttribute (m_tid, name, help, ATTR_SGC, initialValue.Copy (), accessor, checker);
+  IidManager::Get ()->AddAttribute (m_tid, name, help, ATTR_SGC, initialValue.Copy (), accessor, checker);
   return *this;
 }
 
@@ -746,7 +934,7 @@
                       Ptr<const AttributeChecker> checker)
 {
   NS_LOG_FUNCTION (this << name << help << flags << &initialValue << accessor << checker);
-  Singleton<IidManager>::Get ()->AddAttribute (m_tid, name, help, flags, initialValue.Copy (), accessor, checker);
+  IidManager::Get ()->AddAttribute (m_tid, name, help, flags, initialValue.Copy (), accessor, checker);
   return *this;
 }
 
@@ -755,7 +943,7 @@
                                  Ptr<const AttributeValue> initialValue)
 {
   NS_LOG_FUNCTION (this << i << initialValue);
-  Singleton<IidManager>::Get ()->SetAttributeInitialValue (m_tid, i, initialValue);
+  IidManager::Get ()->SetAttributeInitialValue (m_tid, i, initialValue);
   return true;
 }
 
@@ -764,7 +952,7 @@
 TypeId::GetConstructor (void) const
 {
   NS_LOG_FUNCTION (this);
-  Callback<ObjectBase *>  cb = Singleton<IidManager>::Get ()->GetConstructor (m_tid);
+  Callback<ObjectBase *>  cb = IidManager::Get ()->GetConstructor (m_tid);
   return cb;
 }
 
@@ -772,7 +960,7 @@
 TypeId::MustHideFromDocumentation (void) const
 {
   NS_LOG_FUNCTION (this);
-  bool mustHide = Singleton<IidManager>::Get ()->MustHideFromDocumentation (m_tid);
+  bool mustHide = IidManager::Get ()->MustHideFromDocumentation (m_tid);
   return mustHide;
 }
 
@@ -780,14 +968,14 @@
 TypeId::GetAttributeN (void) const
 {
   NS_LOG_FUNCTION (this);
-  uint32_t n = Singleton<IidManager>::Get ()->GetAttributeN (m_tid);
+  uint32_t n = IidManager::Get ()->GetAttributeN (m_tid);
   return n;
 }
 struct TypeId::AttributeInformation 
 TypeId::GetAttribute(uint32_t i) const
 {
   NS_LOG_FUNCTION (this << i);
-  return Singleton<IidManager>::Get ()->GetAttribute(m_tid, i);
+  return IidManager::Get ()->GetAttribute(m_tid, i);
 }
 std::string 
 TypeId::GetAttributeFullName (uint32_t i) const
@@ -801,13 +989,13 @@
 TypeId::GetTraceSourceN (void) const
 {
   NS_LOG_FUNCTION (this);
-  return Singleton<IidManager>::Get ()->GetTraceSourceN (m_tid);
+  return IidManager::Get ()->GetTraceSourceN (m_tid);
 }
 struct TypeId::TraceSourceInformation 
 TypeId::GetTraceSource(uint32_t i) const
 {
   NS_LOG_FUNCTION (this << i);
-  return Singleton<IidManager>::Get ()->GetTraceSource(m_tid, i);
+  return IidManager::Get ()->GetTraceSource(m_tid, i);
 }
 
 TypeId 
@@ -825,7 +1013,7 @@
                         std::string callback)
 {
   NS_LOG_FUNCTION (this << name << help << accessor);
-  Singleton<IidManager>::Get ()->AddTraceSource (m_tid, name, help, accessor, callback);
+  IidManager::Get ()->AddTraceSource (m_tid, name, help, accessor, callback);
   return *this;
 }
 
@@ -833,7 +1021,7 @@
 TypeId::HideFromDocumentation (void)
 {
   NS_LOG_FUNCTION (this);
-  Singleton<IidManager>::Get ()->HideFromDocumentation (m_tid);
+  IidManager::Get ()->HideFromDocumentation (m_tid);
   return *this;
 }
 
diff -Naur ns-3.23/src/core/model/type-id.h ns-3.24/src/core/model/type-id.h
--- ns-3.23/src/core/model/type-id.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/type-id.h	2015-09-15 11:18:44.000000000 -0700
@@ -41,6 +41,7 @@
 class ObjectBase;
 
 /**
+ * \ingroup object
  * \brief a unique identifier for an interface.
  *
  * This class records a lot of meta-information about a 
@@ -57,80 +58,102 @@
 class TypeId
 {
 public:
-  /**
-   * Flags describing when a given attribute can be read or written
-   */
+  /** Flags describing when a given attribute can be read or written. */
   enum AttributeFlag {
     ATTR_GET = 1<<0, /**< The attribute can be read */
     ATTR_SET = 1<<1, /**< The attribute can be written */
     ATTR_CONSTRUCT = 1<<2, /**< The attribute can be written at construction-time */
     ATTR_SGC = ATTR_GET | ATTR_SET | ATTR_CONSTRUCT, /**< The attribute can be read, and written at any time */
   };
+  /** Attribute implementation. */
   struct AttributeInformation {
+    /** Attribute name. */
     std::string name;
+    /** Attribute help string. */
     std::string help;
+    /** AttributeFlags value. */
     uint32_t flags;
+    /** Default initial value. */
     Ptr<const AttributeValue> originalInitialValue;
+    /** Configured initial value. */
     Ptr<const AttributeValue> initialValue;
+    /** Accessor object. */
     Ptr<const AttributeAccessor> accessor;
+    /** Checker object. */
     Ptr<const AttributeChecker> checker;
   };
+  /** TraceSource implementation. */
   struct TraceSourceInformation {
+    /** Trace name. */
     std::string name;
+    /** Trace help string. */
     std::string help;
+    /** Callback function signature type. */
     std::string callback;
+    /** Trace accessor. */
     Ptr<const TraceSourceAccessor> accessor;
   };
 
-  /**
-   * Type of hash values
-   */
+  /** Type of hash values. */
   typedef uint32_t hash_t;
 
   /**
-   * \param name the name of the requested TypeId
-   * \returns the unique id associated with the requested
-   *          name. 
+   * Get a TypeId by name.
+   *
+   * \param [in] name The name of the requested TypeId
+   * \returns The unique id associated with the requested name. 
    *
    * This method cannot fail: it will crash if the input 
    * name is not a valid TypeId name.
    */
   static TypeId LookupByName (std::string name);
   /**
-   * \param name the name of the requested TypeId
-   * \param tid a pointer to the TypeId instance where the 
-   *        result of this function should be stored.
-   * \returns true if the requested name was found, false otherwise.
+   * Get a TypeId by name.
+   * 
+   * \param [in]  name The name of the requested TypeId
+   * \param [out] tid A pointer to the TypeId instance where the 
+   *              result of this function should be stored.
+   * \returns \c true if the requested name was found.
    */
   static bool LookupByNameFailSafe (std::string name, TypeId *tid);
   /**
-   * \param hash the hash to lookup
-   * \returns the unique id associated with the requested hash.
+   * Get a TypeId by hash.
+   *
+   * \param [in] hash The hash to lookup
+   * \returns The unique id associated with the requested hash.
    *
    * This method cannot fail: it will crash if the input 
    * hash does not match an existing TypeId.
    */
   static TypeId LookupByHash (hash_t hash);
   /**
-   * \param hash the hash of the requested TypeId
-   * \param tid a pointer to the TypeId instance where the 
-   *        result of this function should be stored.
-   * \returns true if the requested hash was found, false otherwise.
+   * Get a TypeId by hash.
+   *
+   * \param [in]  hash The hash of the requested TypeId
+   * \param [out] tid A pointer to the TypeId instance where the 
+   *              result of this function should be stored.
+   * \returns \c true if the requested hash was found.
    */
   static bool LookupByHashFailSafe (hash_t hash, TypeId *tid);
 
   /**
-   * \returns the number of TypeId instances registered.
+   * Get the number of registered TypeIds.
+   *
+   * \returns The number of TypeId instances registered.
    */
   static uint32_t GetRegisteredN (void);
   /**
-   * \param i index
-   * \returns the TypeId instance whose index is i.
+   * Get a TypeId by index.
+   *
+   * \param [in] i Index of the TypeId.
+   * \returns The TypeId instance whose index is \c i.
    */
   static TypeId GetRegistered (uint32_t i);
 
   /**
-   * \param name the name of the interface to construct.
+   * Constructor.
+   *
+   * \param [in] name The name of the interface to construct.
    *
    * No two instances can share the same name. The name is expected to be
    * the full c++ typename of associated c++ object.
@@ -138,22 +161,30 @@
   explicit TypeId (const char * name);
 
   /**
-   * \returns the parent of this TypeId
+   * Get the parent of this TypeId.
+   *
+   * \returns The parent of this TypeId
    *
    * This method cannot fail. It will return itself
    * if this TypeId has no parent. i.e., it is at the top
    * of the TypeId hierarchy. Currently, this is the
-   * case for the TypeId associated to the Object class 
+   * case for the TypeId associated to the ns3::ObjectBase class 
    * only.
    */
   TypeId GetParent (void) const;
-
+  
+  /**
+   * Check if this TypeId has a parent.
+   *
+   * \return \c true if this TypeId has a parent.
+   */
   bool HasParent (void) const;
 
   /**
-   * \param other a parent TypeId
-   * \returns true if the input TypeId is really a parent
-   *          of this TypeId, false otherwise.
+   * Check if this TypeId is a child of another.
+   *
+   * \param [in] other A parent TypeId
+   * \returns \c true if the input TypeId is really a parent of this TypeId.
    *
    * Calling this method is roughly similar to calling dynamic_cast
    * except that you do not need object instances: you can do the check
@@ -162,80 +193,106 @@
   bool IsChildOf (TypeId other) const;
 
   /**
-   * \returns the name of the group associated to this TypeId.
+   * Get the group name.
+   *
+   * \returns The name of the group associated to this TypeId.
    */
   std::string GetGroupName (void) const;
 
   /**
-   * \returns the name of this interface.
+   * Get the name.
+   *
+   * \returns The name of this interface.
    */
   std::string GetName (void) const;
 
   /**
-   * \returns the hash of this interface.
+   * Get the hash.
+   *
+   * \returns The hash of this interface.
    */
   hash_t GetHash (void) const;
 
   /**
-   * \returns the size of this interface.
+   * Get the size of this object.
+   *
+   * \returns The size of this interface.
    */
   std::size_t GetSize (void) const;
 
   /**
-   * \returns true if this TypeId has a constructor
+   * Check if this TypeId has a constructor.
+   *
+   * \returns \c true if this TypeId has a constructor
    */
   bool HasConstructor (void) const;
 
   /**
-   * \returns the number of attributes associated to this TypeId
+   * Get the number of attributes.
+   *
+   * \returns The number of attributes associated to this TypeId
    */
   uint32_t GetAttributeN (void) const;
   /**
-   * \param i index into attribute array
-   * \returns the information associated to attribute whose 
-   *          index is i.
+   * Get Attribute information by index.
+   *
+   * \param [in] i Index into attribute array
+   * \returns The information associated to attribute whose index is \p i.
    */
   struct TypeId::AttributeInformation GetAttribute(uint32_t i) const;
   /**
-   * \param i index into attribute array
-   * \returns the full name associated to the attribute whose
-   *          index is i.
+   * Get the Attribute name by index.
+   *
+   * \param [in] i Index into attribute array
+   * \returns The full name associated to the attribute whose index is \p i.
    */
   std::string GetAttributeFullName (uint32_t i) const;
 
   /**
-   * \returns a callback which can be used to instanciate an object
+   * Get the constructor callback.
+   *
+   * \returns A callback which can be used to instanciate an object
    *          of this type.
    */
   Callback<ObjectBase *> GetConstructor (void) const;
 
   /**
-   * \returns true if this TypeId should be hidden from the user, 
-   *          false otherwise.
+   * Check if this TypeId should not be listed in documentation.
+   *
+   * \returns \c true if this TypeId should be hidden from the user.
    */
   bool MustHideFromDocumentation (void) const;
 
 
   /**
-   * \returns the number of trace sources defined in this TypeId.
+   * Get the number of Trace sources.
+   *
+   * \returns The number of trace sources defined in this TypeId.
    */
   uint32_t GetTraceSourceN (void) const;
   /**
-   * \param i index into trace source array.
-   * \returns detailed information about the requested trace source.
+   * Get the trace source by index.
+   *
+   * \param [in] i Index into trace source array.
+   * \returns Detailed information about the requested trace source.
    */
   struct TypeId::TraceSourceInformation GetTraceSource(uint32_t i) const;
 
   /**
-   * \param tid the TypeId of the base class.
-   * \return this TypeId instance.
+   * Set the parent TypeId.
+   *
+   * \param [in] tid The TypeId of the base class.
+   * \return This TypeId instance.
    *
    * Record in this TypeId which TypeId is the TypeId
    * of the base class of the subclass.
    */
   TypeId SetParent (TypeId tid);
   /**
-   * \return this TypeId instance.
+   * Set the parent TypeId.
+   *
+   * \tparam T \explicit The parent TypeID type.
+   * \return This TypeId instance.
    *
    * Record in this TypeId which TypeId is the TypeId
    * of the base class of the subclass.
@@ -244,8 +301,10 @@
   TypeId SetParent (void);
 
   /**
-   * \param groupName the name of the group this TypeId belongs to.
-   * \returns this TypeId instance.
+   * Set the group name.
+   *
+   * \param [in] groupName The name of the group this TypeId belongs to.
+   * \returns This TypeId instance.
    *
    * The group name is purely an advisory information used to 
    * group together types according to a user-specific grouping
@@ -254,7 +313,7 @@
   TypeId SetGroupName (std::string groupName);
 
   /**
-   * Set the size of this type, based on the \p sizeof operator.
+   * Set the size of this type.
    *
    * Call this way:
    * \code
@@ -264,30 +323,33 @@
    * A ridiculously large reported size is a symptom that the
    * type hasn't been registered.
    *
-   * \param size The size of the object, in bytes.
-   * \returns this TypeId instance.
+   * \param [in] size The size of the object, in bytes.
+   * \returns This TypeId instance.
    */
   TypeId SetSize (std::size_t size);
   
   /**
-   * \returns this TypeId instance
-   *
    * Record in this TypeId the fact that the default constructor
    * is accessible.
+   *
+   * \tparam T \explicit The class name represented by this TypeId.
+   * \returns This TypeId instance
    */
   template <typename T>
   TypeId AddConstructor (void);
 
   /**
-   * \param name the name of the new attribute
-   * \param help some help text which describes the purpose of this
-   *        attribute.
-   * \param initialValue the initial value for this attribute.
-   * \param accessor an instance of the associated AttributeAccessor subclass.
-   * \param checker an instance of the associated AttributeChecker subclass.
-   * \returns this TypeId instance
-   *
    * Record in this TypeId the fact that a new attribute exists.
+   *
+   * \param [in] name The name of the new attribute
+   * \param [in] help Some help text which describes the purpose of this
+   *             attribute.
+   * \param [in] initialValue The initial value for this attribute.
+   * \param [in] accessor An instance of the associated AttributeAccessor
+   *             subclass.
+   * \param [in] checker An instance of the associated AttributeChecker
+   *             subclass.
+   * \returns This TypeId instance
    */
   TypeId AddAttribute (std::string name,
                        std::string help, 
@@ -296,24 +358,28 @@
                        Ptr<const AttributeChecker> checker);
 
   /**
-   * \param i the attribute to manipulate
-   * \param initialValue the new initial value to use for this attribute.
-   * \returns true if the call was successfuly, false otherwise.
+   * Set the initial value of an Attribute.
+   *
+   * \param [in] i The attribute to manipulate
+   * \param [in] initialValue The new initial value to use for this attribute.
+   * \returns \c true if the call was successfuly.
    */
   bool SetAttributeInitialValue(uint32_t i, 
                                 Ptr<const AttributeValue> initialValue);
 
   /**
-   * \param name the name of the new attribute
-   * \param help some help text which describes the purpose of this
-   *        attribute
-   * \param flags flags which describe how this attribute can be read and/or written.
-   * \param initialValue the initial value for this attribute.
-   * \param accessor an instance of the associated AttributeAccessor subclass.
-   * \param checker an instance of the associated AttributeChecker subclass.
-   * \returns this TypeId instance
-   *
    * Record in this TypeId the fact that a new attribute exists.
+   *
+   * \param [in] name The name of the new attribute
+   * \param [in] help Some help text which describes the purpose of this
+   *        attribute
+   * \param [in] flags Flags which describe how this attribute can be read and/or written.
+   * \param [in] initialValue The initial value for this attribute.
+   * \param [in] accessor An instance of the associated AttributeAccessor
+   *             subclass.
+   * \param [in] checker An instance of the associated AttributeChecker
+   *             subclass.
+   * \returns This TypeId instance
    */
   TypeId AddAttribute (std::string name,
                        std::string help, 
@@ -323,13 +389,13 @@
                        Ptr<const AttributeChecker> checker);
 
   /**
-   * \param name the name of the new trace source
-   * \param help some help text which describes the purpose of this
-   *        trace source.
-   * \param accessor a pointer to a TraceSourceAccessor which can be
-   *        used to connect/disconnect sinks to this trace source.
-   * \param callback fully qualified typedef name for the callback signature.
-   *        Generally this should begin with the "ns3::" namespace qualifier.
+   * Record a new TraceSource.
+   *
+   * \param [in] name The name of the new trace source
+   * \param [in] help Some help text which describes the purpose of this
+   *             trace source.
+   * \param [in] accessor A pointer to a TraceSourceAccessor which can be
+   *             used to connect/disconnect sinks to this trace source.
    * \returns this TypeId instance.
    */
   TypeId AddTraceSource (std::string name,
@@ -338,80 +404,146 @@
     NS_DEPRECATED;
   
   /**
-   * \param name the name of the new trace source
-   * \param help some help text which describes the purpose of this
-   *        trace source.
-   * \param accessor a pointer to a TraceSourceAccessor which can be
-   *        used to connect/disconnect sinks to this trace source.
-   * \param callback fully qualified typedef name for the callback signature.
-   *        Generally this should begin with the "ns3::" namespace qualifier.
-   * \returns this TypeId instance.
+   * Record a new TraceSource.
+   *
+   * \param [in] name The name of the new trace source
+   * \param [in] help Some help text which describes the purpose of this
+   *             trace source.
+   * \param [in] accessor A pointer to a TraceSourceAccessor which can be
+   *             used to connect/disconnect sinks to this trace source.
+   * \param [in] callback Fully qualified typedef name for the callback
+   *             signature.  Generally this should begin with the
+   *             "ns3::" namespace qualifier.
+   * \returns This TypeId instance.
    */
   TypeId AddTraceSource (std::string name,
                          std::string help,
                          Ptr<const TraceSourceAccessor> accessor,
                          std::string callback);
 
+  /**
+   * Hide this TypeId from documentation.
+   * \returns This TypeId instance.
+   */
   TypeId HideFromDocumentation (void);
 
   /**
-   * \param name the name of the requested attribute
-   * \param info a pointer to the TypeId::AttributeInformation data structure
-   *        where the result value of this method will be stored.
-   * \returns true if the requested attribute could be found, false otherwise.
+   * Find an Attribute by name.
+   *
+   * \param [in]  name The name of the requested attribute
+   * \param [out] info A pointer to the TypeId::AttributeInformation
+   *              data structure where the result value of this method
+   *              will be stored.
+   * \returns \c true if the requested attribute could be found.
    */
   bool LookupAttributeByName (std::string name, struct AttributeInformation *info) const;
   /**
-   * \param name the name of the requested trace source
-   * \returns the trace source accessor which can be used to connect and disconnect
-   *          trace sinks with the requested trace source on an object instance.
+   * Find a TraceSource by name.
    *
    * If no matching trace source is found, this method returns zero.
+   *
+   * \param [in] name The name of the requested trace source
+   * \returns The trace source accessor which can be used to connect
+   *  and disconnect trace sinks with the requested trace source on
+   *  an object instance.
    */
   Ptr<const TraceSourceAccessor> LookupTraceSourceByName (std::string name) const;
 
   /**
-   * \returns the internal integer which uniquely identifies this
-   *          TypeId.
+   * Get the internal id of this TypeId.
+   *
+   * \returns The internal integer which uniquely identifies this TypeId.
    *
    * This is really an internal method which users are not expected
    * to use.
    */
   uint16_t GetUid (void) const;
   /**
-   * \param tid the internal integer which uniquely identifies 
-   *        this TypeId.
+   * Set the internal id of this TypeId.
+   *
+   * \param [in] tid The internal integer which uniquely identifies
+   *            this TypeId.  This TypeId should already have been registered.
    *
-   * This method is even more internal than TypeId::GetUid. Use
+   * Typically this is used in serialization/deserialization.
+   *
+   * This method is even more internal than GetUid(). Use
    * at your own risk and don't be surprised that it eats raw 
    * babies on full-moon nights.
    */
   void SetUid (uint16_t tid);
 
-  // construct an invalid TypeId.
+  /** Default constructor.  This produces an invalid TypeId. */
   inline TypeId ();
+  /**
+   * Copy constructor.
+   * \param [in] o The other TypeId.
+   */
   inline TypeId (const TypeId &o);
+  /**
+   * Assignment.
+   * \param [in] o The other TypeId.
+   * \returns The copied TypeId.
+   */
   inline TypeId &operator = (const TypeId &o);
+  /** Destructor. */
   inline ~TypeId ();
 
 private:
-  friend class AttributeList;
-  friend bool operator == (TypeId a, TypeId b);
-  friend bool operator != (TypeId a, TypeId b);
-  friend bool operator <  (TypeId a, TypeId b);
-
+  /**
+   * \name Comparison operators.
+   * Standard comparison operators.
+   * @{
+   */
+  friend inline bool operator == (TypeId a, TypeId b);
+  friend inline bool operator != (TypeId a, TypeId b);
+  friend  bool operator <  (TypeId a, TypeId b);
+  /**@}*/
 
+  /**
+   * Construct from an integer value.
+   * \param [in] tid The TypeId value as an integer.
+   */
   explicit TypeId (uint16_t tid);
+  /**
+   * Implementation for AddConstructor().
+   *
+   * \param [in] callback Callback which constructs an instance of this TypeId.
+   */
   void DoAddConstructor (Callback<ObjectBase *> callback);
-
+  
+  /** The TypeId value. */ 
   uint16_t m_tid;
 };
-  
+
+/**
+ * \relates TypeId
+ * Output streamer.
+ *
+ * \param [in,out] os The output stream.
+ * \param [in] tid The TypeId.
+ * \returns The output stream.
+ */
 std::ostream & operator << (std::ostream &os, TypeId tid);
+/**
+ * \relates TypeId
+ * Input Streamer.
+ * \param [in,out] is The input stream.
+ * \param [out] tid The TypeId to set from the stream.
+ * \returns The input stream.
+ */
 std::istream & operator >> (std::istream &is, TypeId &tid);
+  
+ /**
+  * Comparison operator.
+  * \param [in] a One value.
+  * \param [in] b The other value.
+  * \returns The result of the comparison.
+  * @{
+  */
 inline bool operator == (TypeId a, TypeId b);
 inline bool operator != (TypeId a, TypeId b);
 bool operator <  (TypeId a, TypeId b);
+/** @} */
 
 ATTRIBUTE_HELPER_HEADER (TypeId);
 
diff -Naur ns-3.23/src/core/model/type-name.h ns-3.24/src/core/model/type-name.h
--- ns-3.23/src/core/model/type-name.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/type-name.h	2015-09-15 11:18:44.000000000 -0700
@@ -35,7 +35,7 @@
  * \ingroup attributeimpl
  * Type name strings for numeric AttributeValue types.
  *
- * \tparam T The numeric type.
+ * \tparam T \explicit The numeric type.
  * \returns The numeric type name as a string.
  */
 template <typename T>
diff -Naur ns-3.23/src/core/model/type-traits.h ns-3.24/src/core/model/type-traits.h
--- ns-3.23/src/core/model/type-traits.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/type-traits.h	2015-09-15 11:18:44.000000000 -0700
@@ -20,302 +20,581 @@
 #ifndef TYPE_TRAITS_H
 #define TYPE_TRAITS_H
 
+#include "ptr.h"
+
 /**
- * \file
- * \ingroup object
- * TypeTraits introspection template.
+ *  \file
+ *  \ingroup object
+ *  TypeTraits introspection template.
  */
 
-/** Type trait reference values */
+/**
+ * \ingroup object
+ *  Inspect a type to deduce its features.
+ *  \tparam T \deduced The type to inspect.
+ */
 template <typename T>
 struct TypeTraits
 {
 private:
-  struct NullType {};                             //!< Null value type traits
-  template <typename U> struct UnConst            //!< Non-const type
+  /** Null value type traits. */
+  struct NullType {};
+  /**
+   *  Not a const type.
+   *  \tparam U \deduced The type being inspected.
+   */
+  template <typename U> struct UnConst
+  {
+    typedef U Result;                             /**< Non-const type.       */
+  };
+  /**
+   *  Const type.
+   *  \tparam U \deduced The type being inspected.
+   */
+  template <typename U> struct UnConst<const U>
   {
-    typedef U Result;                             //!< Non-const result type
+    typedef U Result;                             /**< Non-const type.       */
   };
-  template <typename U> struct UnConst<const U>   //!< Non-const template type traits
+  /**
+   *  Not a reference type.
+   *  \tparam U \deduced The type being inspected.
+   */
+  template <typename U> struct ReferenceTraits
   {
-    typedef U Result;                             //!< Non-const result type
+    /** Value. */  enum { IsReference = 0         /**< Not a reference type. */ };
+    typedef U ReferencedType;                     /**< Base type.            */
   };
-  template <typename U> struct ReferenceTraits    //!< Non-reference type traits
-  {
-    enum { IsReference = 0                        /**< Non-reference value */ };
-    typedef U ReferencedType;                     //!< Non-referenced result type
-  };
-  template <typename U> struct ReferenceTraits<U&>//!< Reference type traits
-  {
-    enum { IsReference = 1                        /**< Reference value */ };
-    typedef U ReferencedType;                     //!< Referenced result type
-  };
-  template <typename U> struct PointerTraits      //!< Non-pointer type traits
-  {
-    enum { IsPointer = 0};                        //!< Non-pointer value
-    typedef U PointeeType;                        //!< Non-pointer result type
-  };
-  template <typename U> struct PointerTraits<U *> //!< Pointer type traits
-  {
-    enum { IsPointer = 1};                        //!< Pointer value
-    typedef U PointeeType;                        //!< Pointer result type
-  };
-  template <typename U> struct FunctionPtrTraits  //!< Non-function pointer type traits
-  {
-    enum { IsFunctionPointer = 0};                //!< Non-function pointer value
-    typedef NullType ReturnType;                  //!< Non-function pointer result type
-  };
-  template <typename U> 
-  struct FunctionPtrTraits <U (*)(void)>          //!< Function pointer type traits
-  {
-    enum { IsFunctionPointer = 1};                //!< Function pointer value
-    enum { nArgs = 0};                            //!< Number of arguments
-    typedef U ReturnType;                         //!< Return type
-  };
-  template <typename U, typename V1> 
-  struct FunctionPtrTraits <U (*)(V1)>            //!< Function pointer type traits
-  {						                                   
-    enum { IsFunctionPointer = 1};                //!< Function pointer value	   
-    enum { nArgs = 1};				  //!< Number of arguments	   
-    typedef U ReturnType;			  //!< Return type
-    typedef V1 Arg1Type;                          //!< First argument type
-  };
-  template <typename U, typename V1, typename V2> 
-  struct FunctionPtrTraits <U (*)(V1,V2)>         //!< Function pointer type traits
-  {						                                   
-    enum { IsFunctionPointer = 1};		  //!< Function pointer value	   
-    enum { nArgs = 2};				  //!< Number of arguments	   
-    typedef U ReturnType;			  //!< Return type
-    typedef V1 Arg1Type;			  //!< First argument type	   
-    typedef V2 Arg2Type;                          //!< Second argument type
-  };
-  template <typename U, typename V1, typename V2,
-            typename V3> 
-  struct FunctionPtrTraits <U (*)(V1,V2,V3)>      //!< Function pointer type traits
-  {						                                   
-    enum { IsFunctionPointer = 1};		  //!< Function pointer value	   
-    enum { nArgs = 3};				  //!< Number of arguments	   
-    typedef U ReturnType;			  //!< Return type
-    typedef V1 Arg1Type;			  //!< First argument type	   
-    typedef V2 Arg2Type;			  //!< Second argument type	   
-    typedef V3 Arg3Type;                          //!< Third argument type
-  };
-  template <typename U, typename V1, typename V2,
-            typename V3, typename V4> 
-  struct FunctionPtrTraits <U (*)(V1,V2,V3,V4)>   //!< Function pointer type traits
-  {						                                   
-    enum { IsFunctionPointer = 1};		  //!< Function pointer value	   
-    enum { nArgs = 4};				  //!< Number of arguments	   
-    typedef U ReturnType;			  //!< Return type
-    typedef V1 Arg1Type;			  //!< First argument type	   
-    typedef V2 Arg2Type;			  //!< Second argument type	   
-    typedef V3 Arg3Type;			  //!< Third argument type	   
-    typedef V4 Arg4Type;                          //!< Fourth argument type
-  };
-  template <typename U, typename V1, typename V2,
-            typename V3, typename V4,
-            typename V5> 
-  struct FunctionPtrTraits <U (*)(V1,V2,V3,V4,V5)>//!< Function pointer type traits
-  {						                                   
-    enum { IsFunctionPointer = 1};		  //!< Function pointer value	   
-    enum { nArgs = 5};				  //!< Number of arguments	   
-    typedef U ReturnType;			  //!< Return type
-    typedef V1 Arg1Type;			  //!< First argument type	   
-    typedef V2 Arg2Type;			  //!< Second argument type	   
-    typedef V3 Arg3Type;			  //!< Third argument type	   
-    typedef V4 Arg4Type;			  //!< Fourth argument type	   
-    typedef V5 Arg5Type;                          //!< Fifth argument type
-  };
-  template <typename U, typename V1, typename V2,
-            typename V3, typename V4,
-            typename V5, typename V6> 
-  struct FunctionPtrTraits <U (*)(V1,V2,V3,V4,V5,V6)>  //!< Function pointer type traits
-  {						                                        
-    enum { IsFunctionPointer = 1};		       //!< Function pointer value	   
-    enum { nArgs = 6};				       //!< Number of arguments	   
-    typedef U ReturnType;			       //!< Return type
-    typedef V1 Arg1Type;			       //!< First argument type	   
-    typedef V2 Arg2Type;			       //!< Second argument type	   
-    typedef V3 Arg3Type;			       //!< Third argument type	   
-    typedef V4 Arg4Type;			       //!< Fourth argument type	   
-    typedef V5 Arg5Type;			       //!< Fifth argument type	   
-    typedef V6 Arg6Type;                               //!< Sixth argument type
-  };
-  template <typename U> struct PtrToMemberTraits  //!< Pointer to member type traits
-  {
-    enum { IsPointerToMember = 0};                //!< Non-pointer to member value
-  };
-  template <typename U, typename V> 
-  struct PtrToMemberTraits <U (V::*) (void)>      //!< Pointer to member type traits
-  {
-    enum { IsPointerToMember = 1};                //!< Pointer to member value
-    enum { nArgs = 0};                            //!< Number of arguments
-    typedef U ReturnType;                         //!< Return type
-  };
-  template <typename U, typename V> 
-  struct PtrToMemberTraits <U (V::*) (void) const>//!< Pointer to const member type traits
-  {						                                    
-    enum { IsPointerToMember = 1};		  //!< Pointer to member value	    
-    enum { nArgs = 0};				  //!< Number of arguments	    
-    typedef U ReturnType;			  //!< Return type		    
-  };
-  template <typename U, typename V,typename W1> 
-  struct PtrToMemberTraits <U (V::*) (W1)>        //!< Pointer to member type traits
-  {						                                    
-    enum { IsPointerToMember = 1};		  //!< Pointer to member value	    
-    enum { nArgs = 1};				  //!< Number of arguments	    
-    typedef U ReturnType;			  //!< Return type		    
-    typedef W1 Arg1Type;                          //!< First argument type
-  };
-  template <typename U, typename V,typename W1> 
-  struct PtrToMemberTraits <U (V::*) (W1) const>  //!< Pointer to const member type traits
-  {						                                    	  
-    enum { IsPointerToMember = 1};		  //!< Pointer to member value	    	  
-    enum { nArgs = 1};				  //!< Number of arguments	    	  
-    typedef U ReturnType;			  //!< Return type		    	  
-    typedef W1 Arg1Type;                          //!< First argument type
-  };
-  template <typename U, typename V,typename W1, typename W2> 
-  struct PtrToMemberTraits <U (V::*) (W1,W2)>     //!< Pointer to member type traits
-  {						                                    
-    enum { IsPointerToMember = 1};		  //!< Pointer to member value	    
-    enum { nArgs = 2};				  //!< Number of arguments	    
-    typedef U ReturnType;			  //!< Return type		    
-    typedef W1 Arg1Type;			  //!< First argument type	    
-    typedef W2 Arg2Type;			  //!< Second argument type	    
-  };
-  template <typename U, typename V,typename W1, typename W2> 
-  struct PtrToMemberTraits <U (V::*) (W1,W2) const>  //!< Pointer to const member type traits
-  {						                                       	  
-    enum { IsPointerToMember = 1};		     //!< Pointer to member value	    	  
-    enum { nArgs = 2};				     //!< Number of arguments	    	  
-    typedef U ReturnType;			     //!< Return type		    	  
-    typedef W1 Arg1Type;			     //!< First argument type		  
-    typedef W2 Arg2Type;			     //!< Second argument type		  
-  };
-  template <typename U, typename V,
-            typename W1, typename W2,
-            typename W3> 
-  struct PtrToMemberTraits <U (V::*) (W1,W2,W3)>  //!< Pointer to member type traits
-  {						                                    
-    enum { IsPointerToMember = 1};		  //!< Pointer to member value	    
-    enum { nArgs = 3};				  //!< Number of arguments	    
-    typedef U ReturnType;			  //!< Return type		    
-    typedef W1 Arg1Type;			  //!< First argument type	    
-    typedef W2 Arg2Type;			  //!< Second argument type	    
-    typedef W3 Arg3Type;			  //!< Third argument type	    
-  };
-  template <typename U, typename V,
-            typename W1, typename W2,
-            typename W3> 
-  struct PtrToMemberTraits <U (V::*) (W1,W2,W3) const>  //!< Pointer to const member type traits
-  {							                                  	     
-    enum { IsPointerToMember = 1};			//!< Pointer to member value	     
-    enum { nArgs = 3};					//!< Number of arguments	    	     
-    typedef U ReturnType;				//!< Return type		    	     
-    typedef W1 Arg1Type;				//!< First argument type		     
-    typedef W2 Arg2Type;				//!< Second argument type		     
-    typedef W3 Arg3Type;				//!< Third argument type		     
-  };
-  template <typename U, typename V,
-            typename W1, typename W2,
-            typename W3, typename W4> 
-  struct PtrToMemberTraits <U (V::*) (W1,W2,W3,W4)>  //!< Pointer to member type traits
-  {						                                       
-    enum { IsPointerToMember = 1};		     //!< Pointer to member value	    
-    enum { nArgs = 4};				     //!< Number of arguments	    
-    typedef U ReturnType;			     //!< Return type		    
-    typedef W1 Arg1Type;			     //!< First argument type	    
-    typedef W2 Arg2Type;			     //!< Second argument type	    
-    typedef W3 Arg3Type;			     //!< Third argument type	    
-    typedef W4 Arg4Type;			     //!< Fourth argument type	    
-  };
-  template <typename U, typename V,
-            typename W1, typename W2,
-            typename W3, typename W4> 
-  struct PtrToMemberTraits <U (V::*) (W1,W2,W3,W4) const>  //!< Pointer to const member type traits
-  {							                                     	
-    enum { IsPointerToMember = 1};			   //!< Pointer to member value	     	
-    enum { nArgs = 4};					   //!< Number of arguments	    	
-    typedef U ReturnType;				   //!< Return type		    	
-    typedef W1 Arg1Type;				   //!< First argument type		
-    typedef W2 Arg2Type;				   //!< Second argument type		
-    typedef W3 Arg3Type;				   //!< Third argument type		
-    typedef W4 Arg4Type;				   //!< Fourth argument type		
-  };
-  template <typename U, typename V,
-            typename W1, typename W2,
-            typename W3, typename W4,
-            typename W5> 
-  struct PtrToMemberTraits <U (V::*) (W1,W2,W3,W4,W5)>  //!< Pointer to member type traits
-  {							                                  
-    enum { IsPointerToMember = 1};			//!< Pointer to member value      
-    enum { nArgs = 5};					//!< Number of arguments	       
-    typedef U ReturnType;				//!< Return type		       
-    typedef W1 Arg1Type;				//!< First argument type	       
-    typedef W2 Arg2Type;				//!< Second argument type	       
-    typedef W3 Arg3Type;				//!< Third argument type	       
-    typedef W4 Arg4Type;				//!< Fourth argument type	       
-    typedef W5 Arg5Type;				//!< Fifth argument type	       
-  };
-  template <typename U, typename V,
-            typename W1, typename W2,
-            typename W3, typename W4,
-            typename W5> 
-  struct PtrToMemberTraits <U (V::*) (W1,W2,W3,W4,W5) const>  //!< Pointer to const member type traits
-  {							                                        	   
-    enum { IsPointerToMember = 1};			      //!< Pointer to member value	     	   
-    enum { nArgs = 5};					      //!< Number of arguments	    	   
-    typedef U ReturnType;				      //!< Return type		    	   
-    typedef W1 Arg1Type;				      //!< First argument type		   
-    typedef W2 Arg2Type;				      //!< Second argument type		   
-    typedef W3 Arg3Type;				      //!< Third argument type		   
-    typedef W4 Arg4Type;				      //!< Fourth argument type		   
-    typedef W5 Arg5Type;				      //!< Fifth argument type		   
-  };
-  template <typename U, typename V,
-            typename W1, typename W2,
-            typename W3, typename W4,
-            typename W5, typename W6> 
-  struct PtrToMemberTraits <U (V::*) (W1,W2,W3,W4,W5,W6)>  //!< Pointer to member type traits
-  {							                                     
-    enum { IsPointerToMember = 1};			   //!< Pointer to member value      
-    enum { nArgs = 6};					   //!< Number of arguments	  
-    typedef U ReturnType;				   //!< Return type		  
-    typedef W1 Arg1Type;				   //!< First argument type	  
-    typedef W2 Arg2Type;				   //!< Second argument type	  
-    typedef W3 Arg3Type;				   //!< Third argument type	  
-    typedef W4 Arg4Type;				   //!< Fourth argument type	  
-    typedef W5 Arg5Type;				   //!< Fifth argument type	  
-    typedef W6 Arg6Type;				   //!< Sixth argument type	  
-  };
-  template <typename U, typename V,
-            typename W1, typename W2,
-            typename W3, typename W4,
-            typename W5, typename W6> 
-  struct PtrToMemberTraits <U (V::*) (W1,W2,W3,W4,W5,W6) const>  //!< Pointer to const member type traits
-  {								                                         
-    enum { IsPointerToMember = 1};				 //!< Pointer to member value	      
-    enum { nArgs = 6};						 //!< Number of arguments	    	      
-    typedef U ReturnType;					 //!< Return type		    	      
-    typedef W1 Arg1Type;					 //!< First argument type		      
-    typedef W2 Arg2Type;					 //!< Second argument type		      
-    typedef W3 Arg3Type;					 //!< Third argument type		      
-    typedef W4 Arg4Type;					 //!< Fourth argument type		      
-    typedef W5 Arg5Type;					 //!< Fifth argument type		      
-    typedef W6 Arg6Type;					 //!< Sixth argument type		      
+  /**
+   *  Reference type.
+   *  \tparam U \deduced The type being inspected.
+   */
+  template <typename U> struct ReferenceTraits<U&>
+  {
+    /** Value. */  enum { IsReference = 1         /**< Reference type.       */ };
+    typedef U ReferencedType;                     /**< Base type.            */
+  };
+  /**
+   *  Not a pointer type.
+   *  \tparam U \deduced The type being inspected.
+   */
+  template <typename U> struct PointerTraits
+  {
+    /** Value. */  enum { IsPointer = 0,          /**< Not a pointer type.   */
+                          IsPtr = 0               /**< Not a Ptr type.       */};
+    typedef U PointeeType;                        /**< Base type.            */
+  };
+  /**
+   *  Pointer type.
+   *  \tparam U \deduced The type being inspected.
+   */
+  template <typename U> struct PointerTraits<U *>
+  {
+    /** Value. */  enum { IsPointer = 1,          /**< Pointer type.         */
+                          IsPtr = 0               /**< Not a Ptr type.       */};
+    typedef U PointeeType;                        /**< Pointee type.         */
+  };  
+  /**
+   *  Ptr type.
+   *  \tparam U \deduced The type being inspected.
+   */
+  template <typename U> struct PointerTraits<ns3::Ptr<U> >
+  {
+    /** Value. */  enum { IsPointer = 0,          /**< Not a pointer type.   */
+                          IsPtr = 1               /**< Ptr type.             */};
+    typedef U PointeeType;                        /**< Pointee type.         */
+  };
+  /**
+   * Base type, after removing \c &, \c * and \c const.
+   * \tparam U \deduced The type being inspected.
+   */
+  template <typename U> struct Base
+  {
+    typedef U Type;                               /**< Base type.            */
+  };
+  /**
+   * Base type, after removing \c &.
+   * \tparam U \deduced The type being inspected.
+   */
+  template <typename U> struct Base <U &>
+  {
+    typedef typename Base<U>::Type Type;          /**< Base type.            */
+  };
+  /**
+   * Base type, after removing \c *.
+   * \tparam U \deduced The type being inspected.
+   */
+  template <typename U> struct Base <U *>
+  {
+    typedef typename Base<U>::Type  Type;         /**< Base type.            */
+  };
+  /**
+   * Base type, after removing \c const.
+   * \tparam U \deduced The type being inspected.
+   */
+  template <typename U> struct Base <const U >
+  {
+    typedef typename Base<U>::Type  Type;         /**< Base type.            */
+  };
+  /**
+   * Base type of a Ptr.
+   * \tparam U \deduced The type being inspected.
+   */
+  template <typename U> struct PtrBase
+  {
+    typedef U Type;                               /**< Base type.            */
+  };
+  /**
+   * Base type of a Ptr.
+   * \tparam U \deduced The type being inspected.
+   */
+  template <typename U> struct PtrBase <ns3::Ptr<U> >
+  {
+    typedef U Type;                               /**< Base type.            */
+  };
+  /**
+   *  Not a function pointer type.
+   *  \tparam U \deduced The type being inspected.
+   */
+  template <typename U> struct FunctionPtrTraits
+  {
+    /** Value. */  enum { IsFunctionPointer = 0   /**< Not a function pointer. */ };
+    typedef NullType ReturnType;                  /**< Return type.            */
+  };
+  /**
+   *  Function pointer type.
+   *  \tparam U \deduced Return type.
+   */
+  template <typename U>
+  struct FunctionPtrTraits <U (*)(void)>
+  {
+    /** Value. */  enum { IsFunctionPointer = 1   /**< Function pointer.     */ };
+    /** Value. */  enum { nArgs = 0               /**< Number of arguments.  */ };
+    typedef U ReturnType;                         /**< Return type.          */
+  };
+  /**
+   *  Function pointer type.
+   *  \tparam U \deduced Return type.
+   *  \tparam V1 \deduced Argument type.
+   */
+  template <typename U,
+            typename V1>
+  struct FunctionPtrTraits <U (*)(V1)>
+  {
+    /** Value. */  enum { IsFunctionPointer = 1   /**< Function pointer.     */ };
+    /** Value. */  enum { nArgs = 1               /**< Number of arguments.  */ };
+    typedef U ReturnType;                         /**< Return type.          */
+    typedef V1 Arg1Type;                          /**< First argument type.  */
+  };
+  /**
+   *  Function pointer type.
+   *  \tparam U \deduced Return type.
+   *  \tparam V1 \deduced Argument type.
+   *  \tparam V2 \deduced Argument type.
+   */
+  template <typename U,
+            typename V1, typename V2>
+  struct FunctionPtrTraits <U (*)(V1,V2)>
+  {
+    /** Value. */  enum { IsFunctionPointer = 1   /**< Function pointer.     */ };
+    /** Value. */  enum { nArgs = 2               /**< Number of arguments.  */ };
+    typedef U ReturnType;                         /**< Return type.          */
+    typedef V1 Arg1Type;                          /**< First argument type.  */
+    typedef V2 Arg2Type;                          /**< Second argument type. */
+  };
+  /**
+   *  Function pointer type.
+   *  \tparam U \deduced Return type.
+   *  \tparam V1 \deduced Argument type.
+   *  \tparam V2 \deduced Argument type.
+   *  \tparam V3 \deduced Argument type.
+   */
+  template <typename U,
+            typename V1, typename V2, typename V3>
+  struct FunctionPtrTraits <U (*)(V1,V2,V3)>
+  {
+    /** Value. */  enum { IsFunctionPointer = 1   /**< Function pointer.     */ };
+    /** Value. */  enum { nArgs = 3               /**< Number of arguments.  */ };
+    typedef U ReturnType;                         /**< Return type.          */
+    typedef V1 Arg1Type;                          /**< First argument type.  */
+    typedef V2 Arg2Type;                          /**< Second argument type. */
+    typedef V3 Arg3Type;                          /**< Third argument type.  */
+  };
+  /**
+   *  Function pointer type.
+   *  \tparam U \deduced Return type.
+   *  \tparam V1 \deduced Argument type.
+   *  \tparam V2 \deduced Argument type.
+   *  \tparam V3 \deduced Argument type.
+   *  \tparam V4 \deduced Argument type.
+   */
+  template <typename U,
+            typename V1, typename V2, typename V3,
+            typename V4>
+  struct FunctionPtrTraits <U (*)(V1,V2,V3,V4)>
+  {
+    /** Value. */  enum { IsFunctionPointer = 1   /**< Function pointer.     */ };
+    /** Value. */  enum { nArgs = 4               /**< Number of arguments.  */ };
+    typedef U ReturnType;                         /**< Return type.          */
+    typedef V1 Arg1Type;                          /**< First argument type.  */
+    typedef V2 Arg2Type;                          /**< Second argument type. */
+    typedef V3 Arg3Type;                          /**< Third argument type.  */
+    typedef V4 Arg4Type;                          /**< Fourth argument type. */
+  };
+  /**
+   *  Function pointer type.
+   *  \tparam U \deduced Return type.
+   *  \tparam V1 \deduced Argument type.
+   *  \tparam V2 \deduced Argument type.
+   *  \tparam V3 \deduced Argument type.
+   *  \tparam V4 \deduced Argument type.
+   *  \tparam V5 \deduced Argument type.
+   */
+  template <typename U,
+            typename V1, typename V2, typename V3,
+            typename V4, typename V5>
+  struct FunctionPtrTraits <U (*)(V1,V2,V3,V4,V5)>
+  {
+    /** Value. */  enum { IsFunctionPointer = 1   /**< Function pointer.     */ };
+    /** Value. */  enum { nArgs = 5               /**< Number of arguments.  */ };
+    typedef U ReturnType;                         /**< Return type.          */
+    typedef V1 Arg1Type;                          /**< First argument type.  */
+    typedef V2 Arg2Type;                          /**< Second argument type. */
+    typedef V3 Arg3Type;                          /**< Third argument type.  */
+    typedef V4 Arg4Type;                          /**< Fourth argument type. */
+    typedef V5 Arg5Type;                          /**< Fifth argument type.  */
+  };
+  /**
+   *  Function pointer type.
+   *  \tparam U \deduced Return type.
+   *  \tparam V1 \deduced Argument type.
+   *  \tparam V2 \deduced Argument type.
+   *  \tparam V3 \deduced Argument type.
+   *  \tparam V4 \deduced Argument type.
+   *  \tparam V5 \deduced Argument type.
+   *  \tparam V6 \deduced Argument type.
+   */
+  template <typename U,
+            typename V1, typename V2, typename V3,
+            typename V4, typename V5, typename V6>
+  struct FunctionPtrTraits <U (*)(V1,V2,V3,V4,V5,V6)>
+  {
+    /** Value. */  enum { IsFunctionPointer = 1   /**< Function pointer.     */ };
+    /** Value. */  enum { nArgs = 6               /**< Number of arguments.  */ };
+    typedef U ReturnType;                         /**< Return type.          */
+    typedef V1 Arg1Type;                          /**< First argument type.  */
+    typedef V2 Arg2Type;                          /**< Second argument type. */
+    typedef V3 Arg3Type;                          /**< Third argument type.  */
+    typedef V4 Arg4Type;                          /**< Fourth argument type. */
+    typedef V5 Arg5Type;                          /**< Fifth argument type.  */
+    typedef V6 Arg6Type;                          /**< Sixth argument type.  */
+  };
+  /**
+   *  Not a pointer to member type.
+   *  \tparam U \deduced Return type.
+   */
+  template <typename U> struct PtrToMemberTraits
+  {
+    /** Value. */  enum { IsPointerToMember = 0   /**< Not a pointer to member.    */ };
+  };
+  /**
+   *  Pointer to member function.
+   *  \tparam U \deduced Return type.
+   *  \tparam V \deduced Class type.
+   */
+  template <typename U,  typename V>
+  struct PtrToMemberTraits <U (V::*) (void)>
+  {
+    /** Value. */  enum { IsPointerToMember = 1   /**< Pointer to member function. */ };
+    /** Value. */  enum { nArgs = 0               /**< Number of arguments.        */ };
+    typedef U ReturnType;                         /**< Return type.                */
+  };
+  /**
+   *  Pointer to const member function.
+   *  \tparam U \deduced Return type.
+   *  \tparam V \deduced Class type.
+   */
+  template <typename U,  typename V>
+  struct PtrToMemberTraits <U (V::*) (void) const>
+  {
+    /** Value. */  enum { IsPointerToMember = 1   /**< Pointer to member function. */ };
+    /** Value. */  enum { nArgs = 0               /**< Number of arguments.        */ };
+    typedef U ReturnType;                         /**< Return type.                */
+  };
+  /**
+   *  Pointer to member function.
+   *  \tparam U \deduced Return type.
+   *  \tparam V \deduced Class type.
+   *  \tparam W1 \deduced Argument type.
+   */
+  template <typename U,  typename V,
+            typename W1>
+  struct PtrToMemberTraits <U (V::*) (W1)>
+  {
+    /** Value. */  enum { IsPointerToMember = 1   /**< Pointer to member function. */ };
+    /** Value. */  enum { nArgs = 1               /**< Number of arguments.        */ };
+    typedef U ReturnType;                         /**< Return type.          */
+    typedef W1 Arg1Type;                          /**< First argument type.  */
+  };
+  /**
+   *  Pointer to const member function.
+   *  \tparam U \deduced Return type.
+   *  \tparam V \deduced Class type.
+   *  \tparam W1 \deduced Argument type.
+   */
+  template <typename U,  typename V,
+            typename W1>
+  struct PtrToMemberTraits <U (V::*) (W1) const>
+  {
+    /** Value. */  enum { IsPointerToMember = 1   /**< Pointer to member function. */ };
+    /** Value. */  enum { nArgs = 1               /**< Number of arguments.        */ };
+    typedef U ReturnType;                         /**< Return type.          */
+    typedef W1 Arg1Type;                          /**< First argument type.  */
+  };
+  /**
+   *  Pointer to member function.
+   *  \tparam U \deduced Return type.
+   *  \tparam V \deduced Class type.
+   *  \tparam W1 \deduced Argument type.
+   *  \tparam W2 \deduced Argument type.
+   */
+  template <typename U,  typename V,
+            typename W1, typename W2>
+  struct PtrToMemberTraits <U (V::*) (W1,W2)>
+  {
+    /** Value. */  enum { IsPointerToMember = 1   /**< Pointer to member function. */ };
+    /** Value. */  enum { nArgs = 2               /**< Number of arguments.        */ };
+    typedef U ReturnType;                         /**< Return type.          */
+    typedef W1 Arg1Type;                          /**< First argument type.  */
+    typedef W2 Arg2Type;                          /**< Second argument type. */
+  };
+  /**
+   *  Pointer to const member function.
+   *  \tparam U \deduced Return type.
+   *  \tparam V \deduced Class type.
+   *  \tparam W1 \deduced Argument type.
+   *  \tparam W2 \deduced Argument type.
+   */
+  template <typename U,  typename V,
+            typename W1, typename W2>
+  struct PtrToMemberTraits <U (V::*) (W1,W2) const>
+  {
+    /** Value. */  enum { IsPointerToMember = 1   /**< Pointer to member function. */ };
+    /** Value. */  enum { nArgs = 2               /**< Number of arguments.        */ };
+    typedef U ReturnType;                         /**< Return type.          */
+    typedef W1 Arg1Type;                          /**< First argument type.  */
+    typedef W2 Arg2Type;                          /**< Second argument type. */
+  };
+  /**
+   *  Pointer to member function.
+   *  \tparam U \deduced Return type.
+   *  \tparam V \deduced Class type.
+   *  \tparam W1 \deduced Argument type.
+   *  \tparam W2 \deduced Argument type.
+   *  \tparam W3 \deduced Argument type.
+   */
+  template <typename U,  typename V,
+            typename W1, typename W2, typename W3>
+  struct PtrToMemberTraits <U (V::*) (W1,W2,W3)>
+  {
+    /** Value. */  enum { IsPointerToMember = 1   /**< Pointer to member function. */ };
+    /** Value. */  enum { nArgs = 3               /**< Number of arguments.        */ };
+    typedef U ReturnType;                         /**< Return type.          */
+    typedef W1 Arg1Type;                          /**< First argument type.  */
+    typedef W2 Arg2Type;                          /**< Second argument type. */
+    typedef W3 Arg3Type;                          /**< Third argument type.  */
+  };
+  /**
+   *  Pointer to const member function.
+   *  \tparam U \deduced Return type.
+   *  \tparam V \deduced Class type.
+   *  \tparam W1 \deduced Argument type.
+   *  \tparam W2 \deduced Argument type.
+   *  \tparam W3 \deduced Argument type.
+   */
+  template <typename U,  typename V,
+            typename W1, typename W2, typename W3>
+  struct PtrToMemberTraits <U (V::*) (W1,W2,W3) const>
+  {
+    /** Value. */  enum { IsPointerToMember = 1   /**< Pointer to member function. */ };
+    /** Value. */  enum { nArgs = 3               /**< Number of arguments.        */ };
+    typedef U ReturnType;                         /**< Return type.          */
+    typedef W1 Arg1Type;                          /**< First argument type.  */
+    typedef W2 Arg2Type;                          /**< Second argument type. */
+    typedef W3 Arg3Type;                          /**< Third argument type.  */
+  };
+  /**
+   *  Pointer to member function.
+   *  \tparam U \deduced Return type.
+   *  \tparam V \deduced Class type.
+   *  \tparam W1 \deduced Argument type.
+   *  \tparam W2 \deduced Argument type.
+   *  \tparam W3 \deduced Argument type.
+   *  \tparam W4 \deduced Argument type.
+   */
+  template <typename U,  typename V,
+            typename W1, typename W2, typename W3,
+            typename W4>
+  struct PtrToMemberTraits <U (V::*) (W1,W2,W3,W4)>
+  {
+    /** Value. */  enum { IsPointerToMember = 1   /**< Pointer to member function. */ };
+    /** Value. */  enum { nArgs = 4               /**< Number of arguments.        */ };
+    typedef U ReturnType;                         /**< Return type.          */
+    typedef W1 Arg1Type;                          /**< First argument type.  */
+    typedef W2 Arg2Type;                          /**< Second argument type. */
+    typedef W3 Arg3Type;                          /**< Third argument type.  */
+    typedef W4 Arg4Type;                          /**< Fourth argument type. */
+  };
+  /**
+   *  Pointer to const member function.
+   *  \tparam U \deduced Return type.
+   *  \tparam V \deduced Class type.
+   *  \tparam W1 \deduced Argument type.
+   *  \tparam W2 \deduced Argument type.
+   *  \tparam W3 \deduced Argument type.
+   *  \tparam W4 \deduced Argument type.
+   */
+  template <typename U,  typename V,
+            typename W1, typename W2, typename W3,
+            typename W4>
+  struct PtrToMemberTraits <U (V::*) (W1,W2,W3,W4) const>
+  {
+    /** Value. */  enum { IsPointerToMember = 1   /**< Pointer to member function. */ };
+    /** Value. */  enum { nArgs = 4               /**< Number of arguments.        */ };
+    typedef U ReturnType;                         /**< Return type.          */
+    typedef W1 Arg1Type;                          /**< First argument type.  */
+    typedef W2 Arg2Type;                          /**< Second argument type. */
+    typedef W3 Arg3Type;                          /**< Third argument type.  */
+    typedef W4 Arg4Type;                          /**< Fourth argument type. */
+  };
+  /**
+   *  Pointer to member function.
+   *  \tparam U \deduced Return type.
+   *  \tparam V \deduced Class type.
+   *  \tparam W1 \deduced Argument type.
+   *  \tparam W2 \deduced Argument type.
+   *  \tparam W3 \deduced Argument type.
+   *  \tparam W4 \deduced Argument type.
+   *  \tparam W5 \deduced Argument type.
+   */
+  template <typename U,  typename V,
+            typename W1, typename W2, typename W3,
+            typename W4, typename W5>
+  struct PtrToMemberTraits <U (V::*) (W1,W2,W3,W4,W5)>
+  {
+    /** Value. */  enum { IsPointerToMember = 1   /**< Pointer to member function. */ };
+    /** Value. */  enum { nArgs = 5               /**< Number of arguments.        */ };
+    typedef U ReturnType;                         /**< Return type.          */
+    typedef W1 Arg1Type;                          /**< First argument type.  */
+    typedef W2 Arg2Type;                          /**< Second argument type. */
+    typedef W3 Arg3Type;                          /**< Third argument type.  */
+    typedef W4 Arg4Type;                          /**< Fourth argument type. */
+    typedef W5 Arg5Type;                          /**< Fifth argument type.  */
+  };
+  /**
+   *  Pointer to const member function.
+   *  \tparam U \deduced Return type.
+   *  \tparam V \deduced Class type.
+   *  \tparam W1 \deduced Argument type.
+   *  \tparam W2 \deduced Argument type.
+   *  \tparam W3 \deduced Argument type.
+   *  \tparam W4 \deduced Argument type.
+   *  \tparam W5 \deduced Argument type.
+   */
+  template <typename U,  typename V,
+            typename W1, typename W2, typename W3,
+            typename W4, typename W5>
+  struct PtrToMemberTraits <U (V::*) (W1,W2,W3,W4,W5) const>
+  {
+    /** Value. */  enum { IsPointerToMember = 1   /**< Pointer to member function. */ };
+    /** Value. */  enum { nArgs = 5               /**< Number of arguments.        */ };
+    typedef U ReturnType;                         /**< Return type.          */
+    typedef W1 Arg1Type;                          /**< First argument type.  */
+    typedef W2 Arg2Type;                          /**< Second argument type. */
+    typedef W3 Arg3Type;                          /**< Third argument type.  */
+    typedef W4 Arg4Type;                          /**< Fourth argument type. */
+    typedef W5 Arg5Type;                          /**< Fifth argument type.  */
+  };
+  /**
+   *  Pointer to member function.
+   *  \tparam U \deduced Return type.
+   *  \tparam V \deduced Class type.
+   *  \tparam W1 \deduced Argument type.
+   *  \tparam W2 \deduced Argument type.
+   *  \tparam W3 \deduced Argument type.
+   *  \tparam W4 \deduced Argument type.
+   *  \tparam W5 \deduced Argument type.
+   *  \tparam W6 \deduced Argument type.
+   */
+  template <typename U,  typename V,
+            typename W1, typename W2, typename W3,
+            typename W4, typename W5, typename W6>
+  struct PtrToMemberTraits <U (V::*) (W1,W2,W3,W4,W5,W6)>
+  {
+    /** Value. */  enum { IsPointerToMember = 1   /**< Pointer to member function. */ };
+    /** Value. */  enum { nArgs = 6               /**< Number of arguments.        */ };
+    typedef U ReturnType;                         /**< Return type.          */
+    typedef W1 Arg1Type;                          /**< First argument type.  */
+    typedef W2 Arg2Type;                          /**< Second argument type. */
+    typedef W3 Arg3Type;                          /**< Third argument type.  */
+    typedef W4 Arg4Type;                          /**< Fourth argument type. */
+    typedef W5 Arg5Type;                          /**< Fifth argument type.  */
+    typedef W6 Arg6Type;                          /**< Sixth argument type.  */
+  };
+  /**
+   *  Pointer to const member function.
+   *  \tparam U \deduced Return type.
+   *  \tparam V \deduced Class type.
+   *  \tparam W1 \deduced Argument type.
+   *  \tparam W2 \deduced Argument type.
+   *  \tparam W3 \deduced Argument type.
+   *  \tparam W4 \deduced Argument type.
+   *  \tparam W5 \deduced Argument type.
+   *  \tparam W6 \deduced Argument type.
+   */
+  template <typename U,  typename V,
+            typename W1, typename W2, typename W3,
+            typename W4, typename W5, typename W6>
+  struct PtrToMemberTraits <U (V::*) (W1,W2,W3,W4,W5,W6) const>
+  {
+    /** Value. */  enum { IsPointerToMember = 1   /**< Pointer to member function. */ };
+    /** Value. */  enum { nArgs = 6               /**< Number of arguments.        */ };
+    typedef U ReturnType;                         /**< Return type.          */
+    typedef W1 Arg1Type;                          /**< First argument type.  */
+    typedef W2 Arg2Type;                          /**< Second argument type. */
+    typedef W3 Arg3Type;                          /**< Third argument type.  */
+    typedef W4 Arg4Type;                          /**< Fourth argument type. */
+    typedef W5 Arg5Type;                          /**< Fifth argument type.  */
+    typedef W6 Arg6Type;                          /**< Sixth argument type.  */
   };
 
 public:
-  typedef typename UnConst<T>::Result NonConstType;                    //!< Non-const type
-  typedef typename ReferenceTraits<T>::ReferencedType ReferencedType;  //!< Referenced type
-  typedef typename PointerTraits<T>::PointeeType PointeeType;          //!< Pointee type
-  enum { IsPointerToMember = PtrToMemberTraits<T>::IsPointerToMember}; //!< Pointer to member predicate
-  enum { IsPointer = PointerTraits<T>::IsPointer};                     //!< Pointer predicate
-  enum { IsReference = ReferenceTraits<T>::IsReference};               //!< Reference predicate
-  enum { IsFunctionPointer = FunctionPtrTraits<T>::IsFunctionPointer}; //!< Function pointer predicate
-  typedef PtrToMemberTraits<T> PointerToMemberTraits;                  //!< Pointer to member traits type
-  typedef FunctionPtrTraits<T> FunctionPointerTraits;                  //!< Function pointer traits
+  /** Not a const type. */
+  typedef typename UnConst<T>::Result NonConstType;
+  /** Referenced type. */
+  typedef typename ReferenceTraits<T>::ReferencedType ReferencedType;
+  /** Pointee type. */
+  typedef typename PointerTraits<T>::PointeeType PointeeType;
+  /** Base type, after removing \c &, \c * and \c const. */
+  typedef typename Base<T>::Type BaseType;
+  /** Ptr base type. */
+  typedef typename PtrBase<T>::Type PtrBaseType;
+  /** Predicates. */
+  enum {
+    /** Pointer to member predicate. */
+    IsPointerToMember = PtrToMemberTraits<T>::IsPointerToMember,
+    /** Pointer predicate. */
+    IsPointer = PointerTraits<T>::IsPointer,
+    /** Ptr predicate. */
+    IsPtr = PointerTraits<T>::IsPtr,
+    /** Reference predicate. */
+    IsReference = ReferenceTraits<T>::IsReference,
+    /** Function pointer predicate. */
+    IsFunctionPointer = FunctionPtrTraits<T>::IsFunctionPointer
+  };
+  /** Pointer to member traits type. */
+  typedef PtrToMemberTraits<T> PointerToMemberTraits;
+  /** Function pointer traits. */
+  typedef FunctionPtrTraits<T> FunctionPointerTraits;
 };
 
 
diff -Naur ns-3.23/src/core/model/uinteger.cc ns-3.24/src/core/model/uinteger.cc
--- ns-3.23/src/core/model/uinteger.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/uinteger.cc	2015-09-15 11:18:44.000000000 -0700
@@ -40,9 +40,9 @@
  * \ingroup attribute_Uinteger
  * Make an Uinteger attribute checker with embedded numeric type name.
  *
- * \param min The minimum allowed value.
- * \param max The maximum allowed value.
- * \param name The original type name ("uint8_t", "uint16_t", _etc_.).
+ * \param [in] min The minimum allowed value.
+ * \param [in] max The maximum allowed value.
+ * \param [in] name The original type name ("uint8_t", "uint16_t", _etc_.).
  * \returns The AttributeChecker.
  */
 Ptr<const AttributeChecker> MakeUintegerChecker (uint64_t min, uint64_t max, std::string name)
diff -Naur ns-3.23/src/core/model/unix-fd-reader.h ns-3.24/src/core/model/unix-fd-reader.h
--- ns-3.23/src/core/model/unix-fd-reader.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/unix-fd-reader.h	2015-09-15 11:18:44.000000000 -0700
@@ -55,9 +55,9 @@
   /**
    * Start a new read thread.
    *
-   * \param fd A valid file descriptor open for reading.
+   * \param [in] fd A valid file descriptor open for reading.
    *
-   * \param readCallback A callback to invoke when new data is
+   * \param [in] readCallback A callback to invoke when new data is
    * available.
    */
   void Start (int fd, Callback<void, uint8_t *, ssize_t> readCallback);
@@ -80,8 +80,8 @@
     /**
      * Construct from a buffer of a given length.
      *
-     * \param buf The buffer.
-     * \param len The size of the buffer, in bytes.
+     * \param [in] buf The buffer.
+     * \param [in] len The size of the buffer, in bytes.
      */
     Data (uint8_t *buf, ssize_t len) : m_buf (buf), m_len (len) {}
     /** The read data buffer. */
diff -Naur ns-3.23/src/core/model/unix-system-condition.cc ns-3.24/src/core/model/unix-system-condition.cc
--- ns-3.23/src/core/model/unix-system-condition.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/unix-system-condition.cc	2015-09-15 11:18:44.000000000 -0700
@@ -52,7 +52,7 @@
   /**
    * Set the condition.
    *
-   * \param condition The new condition value.
+   * \param [in] condition The new condition value.
    */
   void SetCondition (bool condition);
   /**
@@ -73,7 +73,7 @@
    * Unset the condition, then wait for a limited amount of wall-clock
    * time for another thread to set it with SetCondition.
    *
-   * \param ns Maximum time to wait, in ns.
+   * \param [in] ns Maximum time to wait, in ns.
    * \returns \c true if the condition timed out; \c false if the other
    * thread set it.
    */
diff -Naur ns-3.23/src/core/model/unused.h ns-3.24/src/core/model/unused.h
--- ns-3.23/src/core/model/unused.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/unused.h	2015-09-15 11:18:44.000000000 -0700
@@ -1,3 +1,23 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2012 Andrey Mazo
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Andrey Mazo <ahippo@yandex.com>
+ */
+
 #ifndef UNUSED_H
 #define UNUSED_H
 
diff -Naur ns-3.23/src/core/model/vector.h ns-3.24/src/core/model/vector.h
--- ns-3.23/src/core/model/vector.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/vector.h	2015-09-15 11:18:44.000000000 -0700
@@ -39,9 +39,9 @@
 {
 public:
   /**
-   * \param _x x coordinate of vector
-   * \param _y y coordinate of vector
-   * \param _z z coordinate of vector
+   * \param [in] _x X coordinate of vector
+   * \param [in] _y Y coordinate of vector
+   * \param [in] _z Z coordinate of vector
    *
    * Create vector (_x, _y, _z)
    */
@@ -76,8 +76,8 @@
 {
 public:
   /**
-   * \param _x x coordinate of vector
-   * \param _y y coordinate of vector
+   * \param [in] _x X coordinate of vector
+   * \param [in] _y Y coordinate of vector
    *
    * Create vector (_x, _y)
    */
@@ -101,15 +101,15 @@
 };
 
 /**
- * \param a one point
- * \param b another point
- * \returns the cartesian distance between a and b.
+ * \param [in] a One point
+ * \param [in] b Another point
+ * \returns The cartesian distance between a and b.
  */
 double CalculateDistance (const Vector3D &a, const Vector3D &b);
 /**
- * \param a one point
- * \param b another point
- * \returns the cartesian distance between a and b.
+ * \param [in] a One point
+ * \param [in] b Another point
+ * \returns The cartesian distance between a and b.
  */
 double CalculateDistance (const Vector2D &a, const Vector2D &b);
 
diff -Naur ns-3.23/src/core/model/wall-clock-synchronizer.h ns-3.24/src/core/model/wall-clock-synchronizer.h
--- ns-3.23/src/core/model/wall-clock-synchronizer.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/wall-clock-synchronizer.h	2015-09-15 11:18:44.000000000 -0700
@@ -23,8 +23,8 @@
 #include "synchronizer.h"
 
 /**
- * \file
- * \ingroup realtime
+ * @file
+ * @ingroup realtime
  * ns3::WallClockSynchronizer declaration.
  */
 
@@ -37,9 +37,9 @@
  *
  * Enable this synchronizer using:
  *
- * \code
+ * @code
  *   DefaultValue::Bind ("Synchronizer", "WallClockSynchronizer");
- * \endcode
+ * @endcode
  *
  * before calling any simulator functions.
  *
@@ -47,21 +47,21 @@
  * access to several clocks we could use as a wall clock.  We don't care about
  * time in the sense of 04:30 CEST, we care about some piece of hardware that
  * ticks at some regular period.  The most accurate posix clock in this
- * respect is the \c CLOCK_PROCESS_CPUTIME_ID clock.  This is a high-resolution
+ * respect is the @c CLOCK_PROCESS_CPUTIME_ID clock.  This is a high-resolution
  * register in the CPU.  For example, on Intel machines this corresponds to
  * the timestamp counter (TSC) register.  The resolution of this counter will
  * be on the order of nanoseconds.
  *
  * Now, just because we can measure time in nanoseconds doesn't mean we can
  * put our process to sleep to nanosecond resolution.  We are eventually going
- * to use the function \c clock_nanosleep() to sleep until a simulation Time
+ * to use the function @c clock_nanosleep() to sleep until a simulation Time
  * specified by the caller. 
  *
- * \todo Add more on jiffies, sleep, processes, etc.
+ * @todo Add more on jiffies, sleep, processes, etc.
  *
- * \internal
+ * @internal
  * Nanosleep takes a <tt>struct timeval</tt> as an input so we have to
- * deal with conversion between Time and \c timeval here.
+ * deal with conversion between Time and @c timeval here.
  * They are both interpreted as elapsed times.
  */
 class WallClockSynchronizer : public Synchronizer
@@ -69,7 +69,7 @@
 public:
   /**
    * Get the registered TypeId for this class.
-   * \returns The TypeId.
+   * @returns The TypeId.
    */
   static TypeId GetTypeId (void);
 
@@ -88,15 +88,15 @@
 protected:
   /**
    * @brief Do a busy-wait until the normalized realtime equals the argument
-   * or the condition variable becomes \c true.
+   * or the condition variable becomes @c true.
   
-   * The condition becomes \c true if an outside entity (a network device
+   * The condition becomes @c true if an outside entity (a network device
    * receives a packet), sets the condition and signals the scheduler
    * it needs to re-evaluate.
    *
-   * @param ns The target normalized real time we should wait for.
-   * @returns \c true if we reached the target time,
-   *          \c false if we retured because the condition was set.
+   * @param [in] ns The target normalized real time we should wait for.
+   * @returns @c true if we reached the target time,
+   *          @c false if we retured because the condition was set.
    */
   bool SpinWait (uint64_t ns);
   /**
@@ -114,13 +114,13 @@
    * SystemCondition we have saved in m_condition takes care of this for us.
    *
    * This call will return if the timeout expires OR if the condition is 
-   * set \c true by a call to SetCondition (true) followed by a call to
+   * set @c true by a call to SetCondition (true) followed by a call to
    * Signal().  In either case, we are done waiting.  If the timeout happened,
-   * we return \c true; if a Signal happened we return \c false.
+   * we return @c true; if a Signal happened we return @c false.
    *
-   * @param ns The target normalized real time we should wait for.
-   * @returns \c true if we reached the target time,
-   *          \c false if we retured because the condition was set.
+   * @param [in] ns The target normalized real time we should wait for.
+   * @returns @c true if we reached the target time,
+   *          @c false if we retured because the condition was set.
    */
   bool SleepWait (uint64_t ns);
 
@@ -139,8 +139,8 @@
    * @brief Compute a correction to the nominal delay to account for
    * realtime drift since the last DoSynchronize.
    *
-   * @param nsNow The current simulation time (in nanosecond units).
-   * @param nsDelay The simulation time we need to wait for (normalized to 
+   * @param [in] nsNow The current simulation time (in nanosecond units).
+   * @param [in] nsDelay The simulation time we need to wait for (normalized to 
    * nanosecond units).
    * @returns The corrected delay.
    */
@@ -160,33 +160,33 @@
   uint64_t GetNormalizedRealtime (void);
 
   /**
-   * @brief Convert an absolute time in ns to a \c timeval
+   * @brief Convert an absolute time in ns to a @c timeval
    *
-   * @param ns Absolute time in ns.
-   * @param tv Converted \c timeval.
+   * @param [in] ns Absolute time in ns.
+   * @param [out] tv Converted @c timeval.
    */
   void NsToTimeval (int64_t ns, struct timeval *tv);
   /**
-   * @brief Convert a \c timeval to absolute time, in ns.
+   * @brief Convert a @c timeval to absolute time, in ns.
    *
-   * @param tv The input \c timeval.
+   * @param [in] tv The input @c timeval.
    * @returns The absolute time, in ns.
    */
   uint64_t TimevalToNs (struct timeval *tv);
 
   /**
-   * @brief Add two \c timeval.
+   * @brief Add two @c timeval.
    *
-   * @param tv1 The first \c timeval.
-   * @param tv2 The second \c timeval.
-   * @param result The sum of \c tv1 and \c tv2.
+   * @param [in]  tv1 The first @c timeval.
+   * @param [in]  tv2 The second @c timeval.
+   * @param [out] result The sum of @c tv1 and @c tv2.
    */
   void TimevalAdd (
     struct timeval *tv1, 
     struct timeval *tv2,
     struct timeval *result);
 
-  /** Size of the system clock tick, as reported by \c clock_getres, in ns. */
+  /** Size of the system clock tick, as reported by @c clock_getres, in ns. */
   uint64_t m_jiffy;
   /** Time recorded by DoEventStart. */
   uint64_t m_nsEventStart;
diff -Naur ns-3.23/src/core/model/watchdog.h ns-3.24/src/core/model/watchdog.h
--- ns-3.23/src/core/model/watchdog.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/model/watchdog.h	2015-09-15 11:18:44.000000000 -0700
@@ -64,7 +64,7 @@
   /**
    * Delay the timer.
    *
-   * \param delay The watchdog delay
+   * \param [in] delay The watchdog delay
    *
    * After a call to this method, the watchdog will not be triggered
    * until the delay specified has been expired. This operation is
@@ -75,7 +75,7 @@
   /**
    * Set the function to execute when the timer expires.
    *
-   * \param fn The function
+   * \param [in] fn The function
    *
    * Store this function in this Timer for later use by Timer::Schedule.
    */
@@ -85,10 +85,10 @@
   /**
    * Set the function to execute when the timer expires.
    *
-   * \tparam MEM_PTR Class method function type.
-   * \tparam OBJ_PTR Class type containing the function.
-   * \param memPtr The member function pointer
-   * \param objPtr The pointer to object
+   * \tparam MEM_PTR \deduced Class method function type.
+   * \tparam OBJ_PTR \deduced Class type containing the function.
+   * \param [in] memPtr The member function pointer
+   * \param [in] objPtr The pointer to object
    *
    * Store this function and object in this Timer for later use by Timer::Schedule.
    */
@@ -101,68 +101,68 @@
    */
   /**@{*/
   /**
-   * \tparam T1 Type of the first argument.
-   * \param a1 The first argument
+   * \tparam T1 \deduced Type of the first argument.
+   * \param [in] a1 The first argument
    */
   template <typename T1>
   void SetArguments (T1 a1);
   /**
-   * \tparam T1 Type of the first argument.
-   * \tparam T2 Type of the second argument.
-   * \param a1 the first argument
-   * \param a2 the second argument
+   * \tparam T1 \deduced Type of the first argument.
+   * \tparam T2 \deduced Type of the second argument.
+   * \param [in] a1 the first argument
+   * \param [in] a2 the second argument
    */
   template <typename T1, typename T2>
   void SetArguments (T1 a1, T2 a2);
   /**
-   * \tparam T1 Type of the first argument.
-   * \tparam T2 Type of the second argument.
-   * \tparam T3 Type of the third argument.
-   * \param a1 the first argument
-   * \param a2 the second argument
-   * \param a3 the third argument
+   * \tparam T1 \deduced Type of the first argument.
+   * \tparam T2 \deduced Type of the second argument.
+   * \tparam T3 \deduced Type of the third argument.
+   * \param [in] a1 the first argument
+   * \param [in] a2 the second argument
+   * \param [in] a3 the third argument
    */
   template <typename T1, typename T2, typename T3>
   void SetArguments (T1 a1, T2 a2, T3 a3);
   /**
-   * \tparam T1 Type of the first argument.
-   * \tparam T2 Type of the second argument.
-   * \tparam T3 Type of the third argument.
-   * \tparam T4 Type of the fourth argument.
-   * \param a1 the first argument
-   * \param a2 the second argument
-   * \param a3 the third argument
-   * \param a4 the fourth argument
+   * \tparam T1 \deduced Type of the first argument.
+   * \tparam T2 \deduced Type of the second argument.
+   * \tparam T3 \deduced Type of the third argument.
+   * \tparam T4 \deduced Type of the fourth argument.
+   * \param [in] a1 the first argument
+   * \param [in] a2 the second argument
+   * \param [in] a3 the third argument
+   * \param [in] a4 the fourth argument
    */
   template <typename T1, typename T2, typename T3, typename T4>
   void SetArguments (T1 a1, T2 a2, T3 a3, T4 a4);
   /**
-   * \tparam T1 Type of the first argument.
-   * \tparam T2 Type of the second argument.
-   * \tparam T3 Type of the third argument.
-   * \tparam T4 Type of the fourth argument.
-   * \tparam T5 Type of the fifth argument.
-   * \param a1 the first argument
-   * \param a2 the second argument
-   * \param a3 the third argument
-   * \param a4 the fourth argument
-   * \param a5 the fifth argument
+   * \tparam T1 \deduced Type of the first argument.
+   * \tparam T2 \deduced Type of the second argument.
+   * \tparam T3 \deduced Type of the third argument.
+   * \tparam T4 \deduced Type of the fourth argument.
+   * \tparam T5 \deduced Type of the fifth argument.
+   * \param [in] a1 the first argument
+   * \param [in] a2 the second argument
+   * \param [in] a3 the third argument
+   * \param [in] a4 the fourth argument
+   * \param [in] a5 the fifth argument
    */
   template <typename T1, typename T2, typename T3, typename T4, typename T5>
   void SetArguments (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
   /**
-   * \tparam T1 Type of the first argument.
-   * \tparam T2 Type of the second argument.
-   * \tparam T3 Type of the third argument.
-   * \tparam T4 Type of the fourth argument.
-   * \tparam T5 Type of the fifth argument.
-   * \tparam T6 Type of the sixth argument.
-   * \param a1 the first argument
-   * \param a2 the second argument
-   * \param a3 the third argument
-   * \param a4 the fourth argument
-   * \param a5 the fifth argument
-   * \param a6 the sixth argument
+   * \tparam T1 \deduced Type of the first argument.
+   * \tparam T2 \deduced Type of the second argument.
+   * \tparam T3 \deduced Type of the third argument.
+   * \tparam T4 \deduced Type of the fourth argument.
+   * \tparam T5 \deduced Type of the fifth argument.
+   * \tparam T6 \deduced Type of the sixth argument.
+   * \param [in] a1 the first argument
+   * \param [in] a2 the second argument
+   * \param [in] a3 the third argument
+   * \param [in] a4 the fourth argument
+   * \param [in] a5 the fifth argument
+   * \param [in] a6 the sixth argument
    */
   template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
   void SetArguments (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6);
diff -Naur ns-3.23/src/core/test/attribute-test-suite.cc ns-3.24/src/core/test/attribute-test-suite.cc
--- ns-3.23/src/core/test/attribute-test-suite.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/test/attribute-test-suite.cc	2015-09-15 11:18:44.000000000 -0700
@@ -136,6 +136,13 @@
                      MakeEnumChecker (TEST_A, "TestA",
                                       TEST_B, "TestB",
                                       TEST_C, "TestC"))
+      .AddAttribute ("TestEnumSetGet", "help text",
+                     EnumValue (TEST_B),
+                     MakeEnumAccessor (&AttributeObjectTest::DoSetEnum,
+                                       &AttributeObjectTest::DoGetEnum),
+                     MakeEnumChecker (TEST_A, "TestA",
+                                      TEST_B, "TestB",
+                                      TEST_C, "TestC"))
       .AddAttribute ("TestRandom", "help text",
                      StringValue ("ns3::ConstantRandomVariable[Constant=1.0]"),
                      MakePointerAccessor (&AttributeObjectTest::m_random),
@@ -188,7 +195,7 @@
                      MakeValueClassTestChecker ())
       .AddTraceSource ("Source1", "help test",
                        MakeTraceSourceAccessor (&AttributeObjectTest::m_intSrc1),
-                       "ns3::TracedValue::Int8Callback")
+                       "ns3::TracedValueCallback::Int8")
       .AddTraceSource ("Source2", "help text",
                        MakeTraceSourceAccessor (&AttributeObjectTest::m_cb),
                        "ns3::AttributeObjectTest::NumericTracedCallback")
@@ -228,6 +235,7 @@
     NS_UNUSED (m_uint8);
     NS_UNUSED (m_float);
     NS_UNUSED (m_enum);
+    NS_UNUSED (m_enumSetGet);
   }
 
   virtual ~AttributeObjectTest (void) {};
@@ -255,6 +263,8 @@
   Ptr<Derived> DoGetVector (uint32_t i) const { return m_vector2[i]; }
   bool DoSetIntSrc (int8_t v) { m_intSrc2 = v; return true; }
   int8_t DoGetIntSrc (void) const { return m_intSrc2; }
+  bool DoSetEnum (Test_e v) { m_enumSetGet = v; return true; }
+  Test_e DoGetEnum (void) const { return m_enumSetGet; }
 
   bool m_boolTestA;
   bool m_boolTest;
@@ -264,6 +274,7 @@
   uint8_t m_uint8;
   float m_float;
   enum Test_e m_enum;
+  enum Test_e m_enumSetGet;
   Ptr<RandomVariableStream> m_random;
   std::vector<Ptr<Derived> > m_vector1;
   std::vector<Ptr<Derived> > m_vector2;
@@ -272,7 +283,7 @@
   TracedValue<int8_t> m_intSrc1;
   TracedValue<int8_t> m_intSrc2;
 
-  typedef void (* NumericTracedCallback) (const double, const int, const float);
+  typedef void (* NumericTracedCallback) (double, int, float);
   TracedCallback<double, int, float> m_cb;
   TracedValue<ValueClassTest> m_valueSrc;
   Ptr<Derived> m_ptr;
@@ -654,6 +665,22 @@
   NS_TEST_ASSERT_MSG_EQ (ok, true, "Attribute not set properly by SetAttributeFailSafe() via EnumValue");
 
   //
+  // When the object is first created, the Attribute should have the default 
+  // value.
+  //
+  ok = CheckGetCodePaths (p, "TestEnumSetGet", "TestB", EnumValue (AttributeObjectTest::TEST_B));
+  NS_TEST_ASSERT_MSG_EQ (ok, true, "Attribute not set properly by default value");
+
+  //
+  // Set the Attribute using the EnumValue type.
+  //
+  ok = p->SetAttributeFailSafe ("TestEnumSetGet", EnumValue (AttributeObjectTest::TEST_C));
+  NS_TEST_ASSERT_MSG_EQ (ok, true, "Could not SetAttributeFailSafe() to TEST_C");
+
+  ok = CheckGetCodePaths (p, "TestEnumSetGet", "TestC", EnumValue (AttributeObjectTest::TEST_C));
+  NS_TEST_ASSERT_MSG_EQ (ok, true, "Attribute not set properly by SetAttributeFailSafe() via EnumValue");
+
+  //
   // Set the Attribute using the StringValue type.
   //
   ok = p->SetAttributeFailSafe ("TestEnum", StringValue ("TestB"));
@@ -692,6 +719,9 @@
   p = CreateObject<AttributeObjectTest> ();
   NS_TEST_ASSERT_MSG_NE (p, 0, "Unable to CreateObject");
 
+  // The test vectors assume ns resolution
+  Time::SetResolution (Time::NS);
+  
   //
   // Set value
   //
@@ -699,13 +729,13 @@
   NS_TEST_ASSERT_MSG_EQ (ok, true, "Could not SetAttributeFailSafe() via TimeValue to 5s");
 
   ok = CheckGetCodePaths (p, "TestTimeWithBounds", "+5000000000.0ns", TimeValue (Seconds (5)));
-  NS_TEST_ASSERT_MSG_EQ (ok, true, "Attribute not set properly by SetAttributeFailSafe() (5s) via TimeValue");
+  NS_TEST_ASSERT_MSG_EQ (ok, true, "Attribute not set properly by SetAttributeFailSafe(5s) via TimeValue");
 
   ok = p->SetAttributeFailSafe ("TestTimeWithBounds", StringValue ("3s"));
-  NS_TEST_ASSERT_MSG_EQ (ok, true, "Could not SetAttributeFailSafe() via TimeValue to 5s");
+  NS_TEST_ASSERT_MSG_EQ (ok, true, "Could not SetAttributeFailSafe() via TimeValue to 3s");
 
   ok = CheckGetCodePaths (p, "TestTimeWithBounds", "+3000000000.0ns", TimeValue (Seconds (3)));
-  NS_TEST_ASSERT_MSG_EQ (ok, true, "Attribute not set properly by SetAttributeFailSafe() (3s) via StringValue");
+  NS_TEST_ASSERT_MSG_EQ (ok, true, "Attribute not set properly by SetAttributeFailSafe(3s) via StringValue");
 
   
   //
@@ -717,16 +747,16 @@
   // Set the Attribute at the positive limit
   //
   ok = p->SetAttributeFailSafe ("TestTimeWithBounds", TimeValue (Seconds (10)));
-  NS_TEST_ASSERT_MSG_EQ (ok, true, "Could not SetAttributeFailSafe() via TimeValue to 10");
+  NS_TEST_ASSERT_MSG_EQ (ok, true, "Could not SetAttributeFailSafe() via TimeValue to 10s");
 
   ok = CheckGetCodePaths (p, "TestTimeWithBounds", "+10000000000.0ns", TimeValue (Seconds (10)));
-  NS_TEST_ASSERT_MSG_EQ (ok, true, "Attribute not set properly by SetAttributeFailSafe() (positive limit) via StringValue");
+  NS_TEST_ASSERT_MSG_EQ (ok, true, "Attribute not set properly by SetAttributeFailSafe(10s [positive limit]) via StringValue");
 
   //
   // Set the Attribute past the positive limit.
   //
   ok = p->SetAttributeFailSafe ("TestTimeWithBounds", TimeValue (Seconds (11)));
-  NS_TEST_ASSERT_MSG_EQ (ok, false, "Unexpectedly could SetAttributeFailSafe() via TimeValue to 11");
+  NS_TEST_ASSERT_MSG_EQ (ok, false, "Unexpectedly could SetAttributeFailSafe() via TimeValue to 11s [greater than positive limit]");
 
   ok = CheckGetCodePaths (p, "TestTimeWithBounds", "+10000000000.0ns", TimeValue (Seconds (10)));
   NS_TEST_ASSERT_MSG_EQ (ok, true, "Error in SetAttributeFailSafe() but value changes");
@@ -735,16 +765,16 @@
   // Set the Attribute at the negative limit.
   //
   ok = p->SetAttributeFailSafe ("TestTimeWithBounds", TimeValue (Seconds (-5)));
-  NS_TEST_ASSERT_MSG_EQ (ok, true, "Could not SetAttributeFailSafe() via TimeValue to -5");
+  NS_TEST_ASSERT_MSG_EQ (ok, true, "Could not SetAttributeFailSafe() via TimeValue to -5s");
 
   ok = CheckGetCodePaths (p, "TestTimeWithBounds", "-5000000000.0ns", TimeValue (Seconds (-5)));
-  NS_TEST_ASSERT_MSG_EQ (ok, true, "Attribute not set properly by SetAttributeFailSafe() (negative limit) via StringValue");
+  NS_TEST_ASSERT_MSG_EQ (ok, true, "Attribute not set properly by SetAttributeFailSafe(-5s [negative limit]) via StringValue");
 
   //
   // Set the Attribute past the negative limit.
   //
   ok = p->SetAttributeFailSafe ("TestTimeWithBounds", TimeValue (Seconds (-6)));
-  NS_TEST_ASSERT_MSG_EQ (ok, false, "Unexpectedly could SetAttributeFailSafe() via TimeValue to -6");
+  NS_TEST_ASSERT_MSG_EQ (ok, false, "Unexpectedly could SetAttributeFailSafe() via TimeValue to -6s");
 
   ok = CheckGetCodePaths (p, "TestTimeWithBounds", "-5000000000.0ns", TimeValue (Seconds (-5)));
   NS_TEST_ASSERT_MSG_EQ (ok, true, "Error in SetAttributeFailSafe() but value changes");
diff -Naur ns-3.23/src/core/test/build-profile-test-suite.cc ns-3.24/src/core/test/build-profile-test-suite.cc
--- ns-3.23/src/core/test/build-profile-test-suite.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.24/src/core/test/build-profile-test-suite.cc	2015-09-15 11:18:44.000000000 -0700
@@ -0,0 +1,82 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 LLNL
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
+ */
+
+#include "ns3/build-profile.h"
+#include "ns3/test.h"
+
+using namespace ns3;
+
+class BuildProfileTestCase : public TestCase
+{
+public:
+  BuildProfileTestCase ();
+  virtual ~BuildProfileTestCase () {}
+
+private:
+  virtual void DoRun (void);
+};
+
+BuildProfileTestCase::BuildProfileTestCase (void)
+  : TestCase ("Check build profile macros")
+{
+}
+
+void
+BuildProfileTestCase::DoRun (void)
+{
+  int i = 0;
+  int j = 0;
+
+#ifdef NS3_BUILD_PROFILE_DEBUG
+  std::cout << GetName () << ": running in build profile debug" << std::endl;
+  NS_BUILD_DEBUG (++i; ++j);
+#elif NS3_BUILD_PROFILE_RELEASE
+  std::cout << GetName () << ": running in build profile release" << std::endl;
+  NS_BUILD_RELEASE (++i; ++j);
+#elif NS3_BUILD_PROFILE_OPTIMIZED
+  std::cout << GetName () << ": running in build profile optimized" << std::endl;
+  NS_BUILD_OPTIMIZED (++i; ++j);
+#else
+  NS_TEST_ASSERT_MSG_EQ (0, 1, ": no build profile case executed");
+#endif
+  
+  if (i == 1)
+    std::cout << "build profile executed first statement." << std::endl;
+  NS_TEST_ASSERT_MSG_EQ (i, 1,
+                         "build profile failed to execute first statement");
+  if (j == 1)
+    std::cout << "build profile executed second statement." << std::endl;
+  NS_TEST_ASSERT_MSG_EQ (j, 1,
+                         "build profile failed to execute second statement");
+}
+
+class BuildProfileTestSuite : public TestSuite
+{
+public:
+  BuildProfileTestSuite ();
+};
+
+BuildProfileTestSuite::BuildProfileTestSuite ()
+  : TestSuite ("build-profile", UNIT)
+{
+  AddTestCase (new BuildProfileTestCase, TestCase::QUICK);
+}
+
+static BuildProfileTestSuite g_BuildProfileTestSuite;
diff -Naur ns-3.23/src/core/test/config-test-suite.cc ns-3.24/src/core/test/config-test-suite.cc
--- ns-3.23/src/core/test/config-test-suite.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/test/config-test-suite.cc	2015-09-15 11:18:44.000000000 -0700
@@ -98,7 +98,7 @@
                    MakeIntegerChecker<int16_t> ())
     .AddTraceSource ("Source", "XX",
                      MakeTraceSourceAccessor (&ConfigTestObject::m_trace),
-                     "ns3::TracedValue::Int16Callback")
+                     "ns3::TracedValueCallback::Int16")
   ;
   return tid;
 }
diff -Naur ns-3.23/src/core/test/hash-test-suite.cc ns-3.24/src/core/test/hash-test-suite.cc
--- ns-3.23/src/core/test/hash-test-suite.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/test/hash-test-suite.cc	2015-09-15 11:18:44.000000000 -0700
@@ -45,7 +45,7 @@
   virtual void DoRun (void);
 };  // class HashTestCase
 
-HashTestCase::HashTestCase (const std:: string name)
+HashTestCase::HashTestCase (const std::string name)
   : TestCase (name),
     key ("The quick brown fox jumped over the lazy dogs.")
 {
diff -Naur ns-3.23/src/core/test/names-test-suite.cc ns-3.24/src/core/test/names-test-suite.cc
--- ns-3.23/src/core/test/names-test-suite.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/test/names-test-suite.cc	2015-09-15 11:18:44.000000000 -0700
@@ -26,10 +26,15 @@
 class TestObject : public Object
 {
 public:
+  /**
+   * Register this type.
+   * \return The TypeId.
+   */
   static TypeId GetTypeId (void) 
   {
     static TypeId tid = TypeId ("TestObject")
-      .SetParent (Object::GetTypeId ())
+      .SetParent<Object> ()
+      .SetGroupName ("Core")
       .HideFromDocumentation ()
       .AddConstructor<TestObject> ();
     return tid;
@@ -41,10 +46,15 @@
 class AlternateTestObject : public Object
 {
 public:
+  /**
+   * Register this type.
+   * \return The TypeId.
+   */
   static TypeId GetTypeId (void) 
   {
     static TypeId tid = TypeId ("AlternateTestObject")
-      .SetParent (Object::GetTypeId ())
+      .SetParent<Object> ()
+      .SetGroupName ("Core")
       .HideFromDocumentation ()
       .AddConstructor<AlternateTestObject> ();
     return tid;
diff -Naur ns-3.23/src/core/test/object-test-suite.cc ns-3.24/src/core/test/object-test-suite.cc
--- ns-3.23/src/core/test/object-test-suite.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/test/object-test-suite.cc	2015-09-15 11:18:44.000000000 -0700
@@ -28,9 +28,15 @@
 class BaseA : public ns3::Object
 {
 public:
-  static ns3::TypeId GetTypeId (void) {
+  /**
+   * Register this type.
+   * \return The TypeId.
+   */
+  static ns3::TypeId GetTypeId (void)
+  {
     static ns3::TypeId tid = ns3::TypeId ("ObjectTest:BaseA")
-      .SetParent (Object::GetTypeId ())
+      .SetParent<Object> ()
+      .SetGroupName ("Core")
       .HideFromDocumentation ()
       .AddConstructor<BaseA> ();
     return tid;
@@ -43,9 +49,15 @@
 class DerivedA : public BaseA
 {
 public:
-  static ns3::TypeId GetTypeId (void) {
+  /**
+   * Register this type.
+   * \return The TypeId.
+   */
+  static ns3::TypeId GetTypeId (void)
+  {
     static ns3::TypeId tid = ns3::TypeId ("ObjectTest:DerivedA")
-      .SetParent (BaseA::GetTypeId ())
+      .SetParent<BaseA> ()
+      .SetGroupName ("Core")
       .HideFromDocumentation ()
       .AddConstructor<DerivedA> ();
     return tid;
@@ -60,9 +72,15 @@
 class BaseB : public ns3::Object
 {
 public:
-  static ns3::TypeId GetTypeId (void) {
+  /**
+   * Register this type.
+   * \return The TypeId.
+   */
+  static ns3::TypeId GetTypeId (void)
+  {
     static ns3::TypeId tid = ns3::TypeId ("ObjectTest:BaseB")
-      .SetParent (Object::GetTypeId ())
+      .SetParent<Object> ()
+      .SetGroupName ("Core")
       .HideFromDocumentation ()
       .AddConstructor<BaseB> ();
     return tid;
@@ -75,9 +93,15 @@
 class DerivedB : public BaseB
 {
 public:
-  static ns3::TypeId GetTypeId (void) {
+  /**
+   * Register this type.
+   * \return The TypeId.
+   */
+  static ns3::TypeId GetTypeId (void)
+  {
     static ns3::TypeId tid = ns3::TypeId ("ObjectTest:DerivedB")
-      .SetParent (BaseB::GetTypeId ())
+      .SetParent<BaseB> ()
+      .SetGroupName ("Core")
       .HideFromDocumentation ()
       .AddConstructor<DerivedB> ();
     return tid;
diff -Naur ns-3.23/src/core/test/random-variable-stream-test-suite.cc ns-3.24/src/core/test/random-variable-stream-test-suite.cc
--- ns-3.23/src/core/test/random-variable-stream-test-suite.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/test/random-variable-stream-test-suite.cc	2015-09-15 11:18:44.000000000 -0700
@@ -34,11 +34,14 @@
 #include "ns3/string.h"
 #include "ns3/integer.h"
 #include "ns3/test.h"
+#include "ns3/log.h"
 #include "ns3/rng-seed-manager.h"
 #include "ns3/random-variable-stream.h"
 
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE ("RandomVariableStreamGenerators");
+
 namespace {
 
 void
@@ -54,6 +57,57 @@
     }
 }
 
+bool seedSet = false;
+
+// Over time, this test suite is designed to be run with varying seed
+// values so that the distributions can be evaluated with chi-squared
+// tests.  To enable this, normal invocation of this test suite will
+// result in a seed value corresponding to the seconds since epoch
+// (time (0) from ctime).  Note: this is not a recommended practice for 
+// seeding normal simulations, as described in the ns-3 manual, but
+// suits our purposes here.
+//
+// However, we also want to provide the ability to run this test suite
+// with a repeatable value, such as when the seed or run number is configured
+// to a specific value.  Therefore, we adopt the following policy.  When
+// the test program is being run with the default global values for seed
+// and run number, this function will instead pick a random, time-based
+// seed for use within this test suite.  If the global values for seed or 
+// run number have been configured differently from the default values,
+// the global seed value will be used instead of the time-based one.
+// 
+// For example, this command will cause this test suite to use the 
+// deterministic value of seed=3 every time:
+//   NS_GLOBAL_VALUE="RngSeed=3" ./test.py -s random-variable-stream-generators
+// or equivalently (to see log output):
+//   NS_LOG="RandomVariableStreamGenerators" NS_GLOBAL_VALUE="RngSeed=3" ./waf --run "test-runner --suite=random-variable-stream-generators"
+//  Similarly, if the value of RngRun is not set to 1, the globals will be
+//  used.
+//
+void
+SetTestSuiteSeed (void)
+{
+  if (seedSet == false)
+    {
+      uint32_t seed;
+      if (RngSeedManager::GetSeed () == 1 && RngSeedManager::GetRun () == 1)
+        {
+          seed = static_cast<uint32_t> (time (0));
+          seedSet = true;
+          NS_LOG_DEBUG ("Global seed and run number are default; seeding with time of day: " << seed);
+          
+        }
+      else
+        {
+          seed = RngSeedManager::GetSeed ();
+          seedSet = true;
+          NS_LOG_DEBUG ("Global seed and run number are not default; using the non-default values seed: " <<
+                        seed << " and run: " << RngSeedManager::GetRun ());
+        }
+      SeedManager::SetSeed (seed);
+    }
+}
+
 } // anonymous namespace
 
 // ===========================================================================
@@ -62,10 +116,14 @@
 class RandomVariableStreamUniformTestCase : public TestCase
 {
 public:
-  static const uint32_t N_RUNS = 5;
-  static const uint32_t N_BINS = 50;
+  // We want the number of observations in each bin to be > 5
+  // The following values should yield many more than 5 per bin
+  static const uint32_t N_BINS = 100;
   static const uint32_t N_MEASUREMENTS = 1000000;
 
+  // Number of times to wrap the Chi-Squared test and retry
+  static const uint32_t N_RUNS = 2;
+
   RandomVariableStreamUniformTestCase ();
   virtual ~RandomVariableStreamUniformTestCase ();
 
@@ -125,21 +183,26 @@
 void
 RandomVariableStreamUniformTestCase::DoRun (void)
 {
-  SeedManager::SetSeed (time (0));
+  SetTestSuiteSeed ();
 
-  double sum = 0.;
-  double maxStatistic = gsl_cdf_chisq_Qinv (0.05, N_BINS);
+  double confidence = 0.99;
+  double maxStatistic = gsl_cdf_chisq_Pinv (confidence, (N_BINS-1));
+  NS_LOG_DEBUG ("Chi square required at " << confidence << " confidence for " << N_BINS << " bins is " << maxStatistic);
 
+  double result = maxStatistic;
+  // If chi-squared test fails, re-try it up to N_RUNS times
   for (uint32_t i = 0; i < N_RUNS; ++i)
     {
       Ptr<UniformRandomVariable> u = CreateObject<UniformRandomVariable> ();
-      double result = ChiSquaredTest (u);
-      sum += result;
+      result = ChiSquaredTest (u);
+      NS_LOG_DEBUG ("Chi square result is " << result);
+      if (result < maxStatistic)
+        {
+          break;
+        }
     }
 
-  sum /= (double)N_RUNS;
-
-  NS_TEST_ASSERT_MSG_LT (sum, maxStatistic, "Chi-squared statistic out of range");
+  NS_TEST_ASSERT_MSG_LT (result, maxStatistic, "Chi-squared statistic out of range");
 
   double min = 0.0;
   double max = 10.0;
@@ -268,7 +331,7 @@
 void
 RandomVariableStreamUniformAntitheticTestCase::DoRun (void)
 {
-  SeedManager::SetSeed (time (0));
+  SetTestSuiteSeed ();
 
   double sum = 0.;
   double maxStatistic = gsl_cdf_chisq_Qinv (0.05, N_BINS);
@@ -345,7 +408,7 @@
 void
 RandomVariableStreamConstantTestCase::DoRun (void)
 {
-  SeedManager::SetSeed (time (0));
+  SetTestSuiteSeed ();
 
   Ptr<ConstantRandomVariable> c = CreateObject<ConstantRandomVariable> ();
 
@@ -395,7 +458,7 @@
 void
 RandomVariableStreamSequentialTestCase::DoRun (void)
 {
-  SeedManager::SetSeed (time (0));
+  SetTestSuiteSeed ();
 
   Ptr<SequentialRandomVariable> s = CreateObject<SequentialRandomVariable> ();
 
@@ -509,7 +572,7 @@
 void
 RandomVariableStreamNormalTestCase::DoRun (void)
 {
-  SeedManager::SetSeed (time (0));
+  SetTestSuiteSeed ();
 
   double sum = 0.;
   double maxStatistic = gsl_cdf_chisq_Qinv (0.05, N_BINS);
@@ -635,7 +698,7 @@
 void
 RandomVariableStreamNormalAntitheticTestCase::DoRun (void)
 {
-  SeedManager::SetSeed (time (0));
+  SetTestSuiteSeed ();
 
   double sum = 0.;
   double maxStatistic = gsl_cdf_chisq_Qinv (0.05, N_BINS);
@@ -766,7 +829,7 @@
 void
 RandomVariableStreamExponentialTestCase::DoRun (void)
 {
-  SeedManager::SetSeed (time (0));
+  SetTestSuiteSeed ();
 
   double sum = 0.;
   double maxStatistic = gsl_cdf_chisq_Qinv (0.05, N_BINS);
@@ -886,7 +949,7 @@
 void
 RandomVariableStreamExponentialAntitheticTestCase::DoRun (void)
 {
-  SeedManager::SetSeed (time (0));
+  SetTestSuiteSeed ();
 
   double sum = 0.;
   double maxStatistic = gsl_cdf_chisq_Qinv (0.05, N_BINS);
@@ -1015,7 +1078,7 @@
 void
 RandomVariableStreamParetoTestCase::DoRun (void)
 {
-  SeedManager::SetSeed (time (0));
+  SetTestSuiteSeed ();
 
   double sum = 0.;
   double maxStatistic = gsl_cdf_chisq_Qinv (0.05, N_BINS);
@@ -1149,7 +1212,7 @@
 void
 RandomVariableStreamParetoAntitheticTestCase::DoRun (void)
 {
-  SeedManager::SetSeed (time (0));
+  SetTestSuiteSeed ();
 
   double sum = 0.;
   double maxStatistic = gsl_cdf_chisq_Qinv (0.05, N_BINS);
@@ -1291,7 +1354,7 @@
 void
 RandomVariableStreamWeibullTestCase::DoRun (void)
 {
-  SeedManager::SetSeed (time (0));
+  SetTestSuiteSeed ();
 
   double sum = 0.;
   double maxStatistic = gsl_cdf_chisq_Qinv (0.05, N_BINS);
@@ -1437,7 +1500,7 @@
 void
 RandomVariableStreamWeibullAntitheticTestCase::DoRun (void)
 {
-  SeedManager::SetSeed (time (0));
+  SetTestSuiteSeed ();
 
   double sum = 0.;
   double maxStatistic = gsl_cdf_chisq_Qinv (0.05, N_BINS);
@@ -1590,7 +1653,7 @@
 void
 RandomVariableStreamLogNormalTestCase::DoRun (void)
 {
-  SeedManager::SetSeed (time (0));
+  SetTestSuiteSeed ();
 
   double sum = 0.;
   double maxStatistic = gsl_cdf_chisq_Qinv (0.05, N_BINS);
@@ -1726,7 +1789,7 @@
 void
 RandomVariableStreamLogNormalAntitheticTestCase::DoRun (void)
 {
-  SeedManager::SetSeed (time (0));
+  SetTestSuiteSeed ();
 
   double sum = 0.;
   double maxStatistic = gsl_cdf_chisq_Qinv (0.05, N_BINS);
@@ -1869,7 +1932,7 @@
 void
 RandomVariableStreamGammaTestCase::DoRun (void)
 {
-  SeedManager::SetSeed (time (0));
+  SetTestSuiteSeed ();
 
   double sum = 0.;
   double maxStatistic = gsl_cdf_chisq_Qinv (0.05, N_BINS);
@@ -1998,7 +2061,7 @@
 void
 RandomVariableStreamGammaAntitheticTestCase::DoRun (void)
 {
-  SeedManager::SetSeed (time (0));
+  SetTestSuiteSeed ();
 
   double sum = 0.;
   double maxStatistic = gsl_cdf_chisq_Qinv (0.05, N_BINS);
@@ -2138,7 +2201,7 @@
 void
 RandomVariableStreamErlangTestCase::DoRun (void)
 {
-  SeedManager::SetSeed (time (0));
+  SetTestSuiteSeed ();
 
   double sum = 0.;
   double maxStatistic = gsl_cdf_chisq_Qinv (0.05, N_BINS);
@@ -2270,7 +2333,7 @@
 void
 RandomVariableStreamErlangAntitheticTestCase::DoRun (void)
 {
-  SeedManager::SetSeed (time (0));
+  SetTestSuiteSeed ();
 
   double sum = 0.;
   double maxStatistic = gsl_cdf_chisq_Qinv (0.05, N_BINS);
@@ -2351,7 +2414,7 @@
 void
 RandomVariableStreamZipfTestCase::DoRun (void)
 {
-  SeedManager::SetSeed (time (0));
+  SetTestSuiteSeed ();
 
   uint32_t n = 1;
   double alpha = 2.0;
@@ -2433,7 +2496,7 @@
 void
 RandomVariableStreamZipfAntitheticTestCase::DoRun (void)
 {
-  SeedManager::SetSeed (time (0));
+  SetTestSuiteSeed ();
 
   uint32_t n = 1;
   double alpha = 2.0;
@@ -2518,7 +2581,7 @@
 void
 RandomVariableStreamZetaTestCase::DoRun (void)
 {
-  SeedManager::SetSeed (time (0));
+  SetTestSuiteSeed ();
 
   double alpha = 5.0;
   double value;
@@ -2582,7 +2645,7 @@
 void
 RandomVariableStreamZetaAntitheticTestCase::DoRun (void)
 {
-  SeedManager::SetSeed (time (0));
+  SetTestSuiteSeed ();
 
   double alpha = 5.0;
   double value;
@@ -2651,7 +2714,7 @@
 void
 RandomVariableStreamDeterministicTestCase::DoRun (void)
 {
-  SeedManager::SetSeed (time (0));
+  SetTestSuiteSeed ();
 
   Ptr<DeterministicRandomVariable> s = CreateObject<DeterministicRandomVariable> ();
 
@@ -2726,7 +2789,7 @@
 void
 RandomVariableStreamEmpiricalTestCase::DoRun (void)
 {
-  SeedManager::SetSeed (time (0));
+  SetTestSuiteSeed ();
 
   // Create the RNG with a uniform distribution between 0 and 10.
   Ptr<EmpiricalRandomVariable> x = CreateObject<EmpiricalRandomVariable> ();
@@ -2790,7 +2853,7 @@
 void
 RandomVariableStreamEmpiricalAntitheticTestCase::DoRun (void)
 {
-  SeedManager::SetSeed (time (0));
+  SetTestSuiteSeed ();
 
   // Create the RNG with a uniform distribution between 0 and 10.
   Ptr<EmpiricalRandomVariable> x = CreateObject<EmpiricalRandomVariable> ();
diff -Naur ns-3.23/src/core/test/time-test-suite.cc ns-3.24/src/core/test/time-test-suite.cc
--- ns-3.23/src/core/test/time-test-suite.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/test/time-test-suite.cc	2015-09-15 11:18:44.000000000 -0700
@@ -102,28 +102,28 @@
 {
 }
 
-class TimesWithSignsTestCase : public TestCase
+class TimeWithSignTestCase : public TestCase
 {
 public:
-  TimesWithSignsTestCase ();
+  TimeWithSignTestCase ();
 private:
   virtual void DoSetup (void);
   virtual void DoRun (void);
   virtual void DoTeardown (void);
 };
 
-TimesWithSignsTestCase::TimesWithSignsTestCase ()
+TimeWithSignTestCase::TimeWithSignTestCase ()
   : TestCase ("Checks times that have plus or minus signs")
 {
 }
 
 void
-TimesWithSignsTestCase::DoSetup (void)
+TimeWithSignTestCase::DoSetup (void)
 {
 }
 
 void
-TimesWithSignsTestCase::DoRun (void)
+TimeWithSignTestCase::DoRun (void)
 {
   Time timePositive          ("+1000.0");
   Time timePositiveWithUnits ("+1000.0ms");
@@ -153,27 +153,27 @@
 }
 
 void 
-TimesWithSignsTestCase::DoTeardown (void)
+TimeWithSignTestCase::DoTeardown (void)
 {
 }
 
 
-class TimeIntputOutputTestCase : public TestCase
+class TimeInputOutputTestCase : public TestCase
 {
 public:
-  TimeIntputOutputTestCase ();
+  TimeInputOutputTestCase ();
 private:
   virtual void DoRun (void);
   void Check (const std::string & str);
 };
 
-TimeIntputOutputTestCase::TimeIntputOutputTestCase ()
+TimeInputOutputTestCase::TimeInputOutputTestCase ()
   : TestCase ("Input,output from,to strings")
 {
 }
 
 void
-TimeIntputOutputTestCase::Check (const std::string & str)
+TimeInputOutputTestCase::Check (const std::string & str)
 {
   std::stringstream ss (str);
   Time time;
@@ -192,7 +192,7 @@
 }
 
 void
-TimeIntputOutputTestCase::DoRun (void)
+TimeInputOutputTestCase::DoRun (void)
 {
   std::cout << std::endl;
   std::cout << GetParent ()->GetName () << " InputOutput: " << GetName ()
@@ -236,8 +236,8 @@
   TimeTestSuite ()
     : TestSuite ("time", UNIT)
   {
-    AddTestCase (new TimesWithSignsTestCase (), TestCase::QUICK);
-    AddTestCase (new TimeIntputOutputTestCase (), TestCase::QUICK);
+    AddTestCase (new TimeWithSignTestCase (), TestCase::QUICK);
+    AddTestCase (new TimeInputOutputTestCase (), TestCase::QUICK);
     // This should be last, since it changes the resolution
     AddTestCase (new TimeSimpleTestCase (), TestCase::QUICK);
   }
diff -Naur ns-3.23/src/core/wscript ns-3.24/src/core/wscript
--- ns-3.23/src/core/wscript	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/core/wscript	2015-09-15 11:18:44.000000000 -0700
@@ -32,8 +32,8 @@
                          "the implementation-defined numerical precision may "
                          "be less than the other implementations.  "
                          "[Allowed Values: %s]"
-                         % ", ".join([repr(p) for p in int64x64.keys()])),
-                   choices=int64x64.keys(),
+                         % ", ".join([repr(p) for p in list(int64x64.keys())])),
+                   choices=list(int64x64.keys()),
                    dest='int64x64_impl')
                    
     opt.add_option('--disable-pthread',
@@ -192,6 +192,7 @@
     core_test = bld.create_ns3_module_test_library('core')
     core_test.source = [
         'test/attribute-test-suite.cc',
+        'test/build-profile-test-suite.cc',
         'test/callback-test-suite.cc',
         'test/command-line-test-suite.cc',
         'test/config-test-suite.cc',
@@ -296,6 +297,8 @@
         'model/hash-fnv.h',
         'model/hash.h',
         'model/valgrind.h',
+        'model/non-copyable.h',
+        'model/build-profile.h',
         ]
 
     if sys.platform == 'win32':
diff -Naur ns-3.23/src/csma/bindings/modulegen__gcc_ILP32.py ns-3.24/src/csma/bindings/modulegen__gcc_ILP32.py
--- ns-3.23/src/csma/bindings/modulegen__gcc_ILP32.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/csma/bindings/modulegen__gcc_ILP32.py	2015-09-15 11:18:44.000000000 -0700
@@ -109,7 +109,7 @@
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
+    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SSL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
@@ -313,6 +313,12 @@
     nested_module = module.add_cpp_namespace('Hash')
     register_types_ns3_Hash(nested_module)
     
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -348,6 +354,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AsciiTraceHelper_methods(root_module, root_module['ns3::AsciiTraceHelper'])
@@ -756,17 +769,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -788,11 +801,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -802,16 +810,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -1049,14 +1047,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -1117,11 +1119,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CsmaDeviceRec_methods(root_module, cls):
@@ -1129,8 +1126,8 @@
     cls.add_constructor([])
     ## csma-channel.h (module 'csma'): ns3::CsmaDeviceRec::CsmaDeviceRec(ns3::Ptr<ns3::CsmaNetDevice> device) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CsmaNetDevice >', 'device')])
-    ## csma-channel.h (module 'csma'): ns3::CsmaDeviceRec::CsmaDeviceRec(ns3::CsmaDeviceRec const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CsmaDeviceRec const &', 'arg0')])
+    ## csma-channel.h (module 'csma'): ns3::CsmaDeviceRec::CsmaDeviceRec(ns3::CsmaDeviceRec const & o) [copy constructor]
+    cls.add_constructor([param('ns3::CsmaDeviceRec const &', 'o')])
     ## csma-channel.h (module 'csma'): bool ns3::CsmaDeviceRec::IsActive() [member function]
     cls.add_method('IsActive', 
                    'bool', 
@@ -2155,7 +2152,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -2173,10 +2170,10 @@
     cls.add_method('Close', 
                    'void', 
                    [])
-    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
+    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t & packets, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
     cls.add_method('Diff', 
                    'bool', 
-                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
+                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t &', 'packets'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
                    is_static=True)
     ## pcap-file.h (module 'network'): bool ns3::PcapFile::Eof() const [member function]
     cls.add_method('Eof', 
@@ -2240,10 +2237,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header const & header, ns3::Ptr<const ns3::Packet> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file.h (module 'network'): ns3::PcapFile::SNAPLEN_DEFAULT [variable]
     cls.add_static_attribute('SNAPLEN_DEFAULT', 'uint32_t const', is_const=True)
     ## pcap-file.h (module 'network'): ns3::PcapFile::ZONE_DEFAULT [variable]
@@ -2390,10 +2387,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -3016,10 +3013,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header const & header, ns3::Ptr<const ns3::Packet> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('ns3::Time', 't'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('ns3::Time', 't'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, uint8_t const * buffer, uint32_t length) [member function]
     cls.add_method('Write', 
                    'void', 
@@ -3901,11 +3898,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -4167,10 +4174,10 @@
                    'double', 
                    [], 
                    is_virtual=True)
-    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
     cls.add_method('Interpolate', 
                    'double', 
-                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
                    visibility='private', is_virtual=True)
     ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
     cls.add_method('Validate', 
@@ -5792,6 +5799,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -5804,6 +5812,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.23/src/csma/bindings/modulegen__gcc_LP64.py ns-3.24/src/csma/bindings/modulegen__gcc_LP64.py
--- ns-3.23/src/csma/bindings/modulegen__gcc_LP64.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/csma/bindings/modulegen__gcc_LP64.py	2015-09-15 11:18:44.000000000 -0700
@@ -109,7 +109,7 @@
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
+    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SSL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
@@ -313,6 +313,12 @@
     nested_module = module.add_cpp_namespace('Hash')
     register_types_ns3_Hash(nested_module)
     
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -348,6 +354,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AsciiTraceHelper_methods(root_module, root_module['ns3::AsciiTraceHelper'])
@@ -756,17 +769,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -788,11 +801,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -802,16 +810,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -1049,14 +1047,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -1117,11 +1119,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CsmaDeviceRec_methods(root_module, cls):
@@ -1129,8 +1126,8 @@
     cls.add_constructor([])
     ## csma-channel.h (module 'csma'): ns3::CsmaDeviceRec::CsmaDeviceRec(ns3::Ptr<ns3::CsmaNetDevice> device) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CsmaNetDevice >', 'device')])
-    ## csma-channel.h (module 'csma'): ns3::CsmaDeviceRec::CsmaDeviceRec(ns3::CsmaDeviceRec const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CsmaDeviceRec const &', 'arg0')])
+    ## csma-channel.h (module 'csma'): ns3::CsmaDeviceRec::CsmaDeviceRec(ns3::CsmaDeviceRec const & o) [copy constructor]
+    cls.add_constructor([param('ns3::CsmaDeviceRec const &', 'o')])
     ## csma-channel.h (module 'csma'): bool ns3::CsmaDeviceRec::IsActive() [member function]
     cls.add_method('IsActive', 
                    'bool', 
@@ -2155,7 +2152,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -2173,10 +2170,10 @@
     cls.add_method('Close', 
                    'void', 
                    [])
-    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
+    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t & packets, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
     cls.add_method('Diff', 
                    'bool', 
-                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
+                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t &', 'packets'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
                    is_static=True)
     ## pcap-file.h (module 'network'): bool ns3::PcapFile::Eof() const [member function]
     cls.add_method('Eof', 
@@ -2240,10 +2237,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header const & header, ns3::Ptr<const ns3::Packet> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file.h (module 'network'): ns3::PcapFile::SNAPLEN_DEFAULT [variable]
     cls.add_static_attribute('SNAPLEN_DEFAULT', 'uint32_t const', is_const=True)
     ## pcap-file.h (module 'network'): ns3::PcapFile::ZONE_DEFAULT [variable]
@@ -2390,10 +2387,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -3016,10 +3013,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header const & header, ns3::Ptr<const ns3::Packet> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('ns3::Time', 't'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('ns3::Time', 't'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, uint8_t const * buffer, uint32_t length) [member function]
     cls.add_method('Write', 
                    'void', 
@@ -3901,11 +3898,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -4167,10 +4174,10 @@
                    'double', 
                    [], 
                    is_virtual=True)
-    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
     cls.add_method('Interpolate', 
                    'double', 
-                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
                    visibility='private', is_virtual=True)
     ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
     cls.add_method('Validate', 
@@ -5792,6 +5799,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -5804,6 +5812,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.23/src/csma/helper/csma-helper.h ns-3.24/src/csma/helper/csma-helper.h
--- ns-3.23/src/csma/helper/csma-helper.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/csma/helper/csma-helper.h	2015-09-15 11:18:44.000000000 -0700
@@ -34,6 +34,7 @@
 class Packet;
 
 /**
+ * \ingroup csma
  * \brief build a set of CsmaNetDevice objects
  *
  * Normally we eschew multiple inheritance, however, the classes 
@@ -206,6 +207,15 @@
 
 private:
 
+  /**
+   * This method creates an ns3::CsmaNetDevice with the attributes configured by
+   * CsmaHelper::SetDeviceAttribute and then adds the device to the node and
+   * attaches the provided channel to the device.
+   *
+   * \param node The node to install the device in
+   * \param channel The channel to attach to the device.
+   * \returns A container holding the added net device.
+   */
   Ptr<NetDevice> InstallPriv (Ptr<Node> node, Ptr<CsmaChannel> channel) const;
 
   /**
@@ -237,9 +247,9 @@
                                     Ptr<NetDevice> nd,
                                     bool explicitFilename);
 
-  ObjectFactory m_queueFactory;
-  ObjectFactory m_deviceFactory;
-  ObjectFactory m_channelFactory;
+  ObjectFactory m_queueFactory;   //!< factory for the queues
+  ObjectFactory m_deviceFactory;  //!< factory for the NetDevices
+  ObjectFactory m_channelFactory; //!< factory for the channel
 };
 
 } // namespace ns3
diff -Naur ns-3.23/src/csma/model/backoff.h ns-3.24/src/csma/model/backoff.h
--- ns-3.23/src/csma/model/backoff.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/csma/model/backoff.h	2015-09-15 11:18:44.000000000 -0700
@@ -29,9 +29,9 @@
 namespace ns3 {
 
 /**
+ * \ingroup csma
  * \brief The backoff class is used for calculating backoff times
  * when many net devices can write to the same channel
- *
  */
 
 class Backoff {
@@ -62,6 +62,14 @@
   Time m_slotTime;
 
   Backoff (void);
+  /**
+   * \brief Constructor
+   * \param slotTime Length of one slot
+   * \param minSlots Minimum number of backoff slots
+   * \param maxSlots Maximum number of backoff slots
+   * \param ceiling Cap to the exponential function
+   * \param maxRetries Maximum number of transmission retries
+   */
   Backoff (Time slotTime, uint32_t minSlots, uint32_t maxSlots, uint32_t ceiling, uint32_t maxRetries);
 
   /**
@@ -103,6 +111,10 @@
    * Number of times that the transmitter has tried to unsuccessfully transmit the current packet.
    */
   uint32_t m_numBackoffRetries;
+
+  /**
+   * Random number generator
+   */
   Ptr<UniformRandomVariable> m_rng;
 };
 
diff -Naur ns-3.23/src/csma/model/csma-channel.h ns-3.24/src/csma/model/csma-channel.h
--- ns-3.23/src/csma/model/csma-channel.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/csma/model/csma-channel.h	2015-09-15 11:18:44.000000000 -0700
@@ -33,6 +33,7 @@
 class CsmaNetDevice;
 
 /**
+ * \ingroup csma
  * \brief CsmaNetDevice Record 
  *
  * Stores the information related to each net device that is
@@ -40,12 +41,24 @@
  */
 class CsmaDeviceRec {
 public:
-  Ptr< CsmaNetDevice > devicePtr; /// Pointer to the net device
-  bool                       active;    /// Is net device enabled to TX/RX
+  Ptr< CsmaNetDevice > devicePtr; //!< Pointer to the net device
+  bool                 active;    //!< Is net device enabled to TX/RX
 
   CsmaDeviceRec();
+
+  /**
+   * \brief Constructor
+   * Builds a record of the given NetDevice, its status is initialized to enabled.
+   *
+   * \param device the device to record
+   */
   CsmaDeviceRec(Ptr< CsmaNetDevice > device);
-  CsmaDeviceRec (CsmaDeviceRec const &);
+
+  /**
+   * Copy constructor
+   * \param o the object to copy
+   */
+  CsmaDeviceRec (CsmaDeviceRec const &o);
 
   /**
    * \return If the net device pointed to by the devicePtr is active
@@ -65,6 +78,7 @@
 };
 
 /**
+ * \ingroup csma
  * \brief Csma Channel.
  *
  * This class represents a simple Csma channel that can be used
@@ -76,6 +90,11 @@
 class CsmaChannel : public Channel 
 {
 public:
+
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   /**
@@ -274,9 +293,20 @@
   Time GetDelay (void);
 
 private:
-  // Avoid implicit copy constructor and assignment (python bindings issues)
-  CsmaChannel (CsmaChannel const &);
-  CsmaChannel &operator = (CsmaChannel const &);
+  /**
+   * Copy constructor is declared but not implemented.  This disables the
+   * copy constructor for CsmaChannel objects.
+   * \param o object to copy
+   */
+  CsmaChannel (CsmaChannel const &o);
+
+  /**
+   * Operator = is declared but not implemented.  This disables the assignment
+   * operator for CsmaChannel objects.
+   * \param o object to copy
+   * \returns the copied object
+   */
+  CsmaChannel &operator = (CsmaChannel const &o);
 
   /**
    * The assigned data rate of the channel
diff -Naur ns-3.23/src/csma/model/csma-net-device.h ns-3.24/src/csma/model/csma-net-device.h
--- ns-3.23/src/csma/model/csma-net-device.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/csma/model/csma-net-device.h	2015-09-15 11:18:44.000000000 -0700
@@ -58,6 +58,11 @@
 class CsmaNetDevice : public NetDevice 
 {
 public:
+
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   /**
@@ -114,6 +119,7 @@
    * \see SetDataRate ()
    * \see SetInterframeGap ()
    * \param ch a pointer to the channel to which this object is being attached.
+   * \returns true if no error
    */
   bool Attach (Ptr<CsmaChannel> ch);
 
@@ -356,6 +362,7 @@
    * Operator = is declared but not implemented.  This disables the assignment
    * operator for CsmaNetDevice objects.
    * \param o object to copy
+   * \returns the copied object
    */
   CsmaNetDevice &operator = (const CsmaNetDevice &o);
 
@@ -708,6 +715,9 @@
    */
   TracedCallback<> m_linkChangeCallbacks;
 
+  /**
+   * Default Maximum Transmission Unit (MTU) for the CsmaNetDevice
+   */
   static const uint16_t DEFAULT_MTU = 1500;
 
   /**
diff -Naur ns-3.23/src/csma-layout/bindings/modulegen__gcc_ILP32.py ns-3.24/src/csma-layout/bindings/modulegen__gcc_ILP32.py
--- ns-3.23/src/csma-layout/bindings/modulegen__gcc_ILP32.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/csma-layout/bindings/modulegen__gcc_ILP32.py	2015-09-15 11:18:44.000000000 -0700
@@ -104,6 +104,10 @@
     module.add_class('Ipv6InterfaceContainer', import_from_module='ns.internet')
     ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix [class]
     module.add_class('Ipv6Prefix', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    module.add_class('Mac48Address', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    root_module['ns3::Mac48Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## net-device-container.h (module 'network'): ns3::NetDeviceContainer [class]
     module.add_class('NetDeviceContainer', import_from_module='ns.network')
     ## node-container.h (module 'network'): ns3::NodeContainer [class]
@@ -137,7 +141,7 @@
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
+    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SSL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
     ## internet-trace-helper.h (module 'internet'): ns3::PcapHelperForIpv4 [class]
@@ -304,6 +308,10 @@
     module.add_class('Ipv6PrefixChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue [class]
     module.add_class('Ipv6PrefixValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker [class]
+    module.add_class('Mac48AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue [class]
+    module.add_class('Mac48AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
     module.add_class('NetDevice', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice::PacketType [enumeration]
@@ -344,6 +352,12 @@
     nested_module = module.add_cpp_namespace('Hash')
     register_types_ns3_Hash(nested_module)
     
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -379,6 +393,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AsciiTraceHelper_methods(root_module, root_module['ns3::AsciiTraceHelper'])
@@ -413,6 +434,7 @@
     register_Ns3Ipv6InterfaceAddress_methods(root_module, root_module['ns3::Ipv6InterfaceAddress'])
     register_Ns3Ipv6InterfaceContainer_methods(root_module, root_module['ns3::Ipv6InterfaceContainer'])
     register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
+    register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
     register_Ns3NetDeviceContainer_methods(root_module, root_module['ns3::NetDeviceContainer'])
     register_Ns3NodeContainer_methods(root_module, root_module['ns3::NodeContainer'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
@@ -499,6 +521,8 @@
     register_Ns3Ipv6PmtuCache_methods(root_module, root_module['ns3::Ipv6PmtuCache'])
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
+    register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
+    register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
@@ -875,17 +899,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -907,11 +931,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -921,16 +940,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -1168,14 +1177,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -1236,11 +1249,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CsmaDeviceRec_methods(root_module, cls):
@@ -1248,8 +1256,8 @@
     cls.add_constructor([])
     ## csma-channel.h (module 'csma'): ns3::CsmaDeviceRec::CsmaDeviceRec(ns3::Ptr<ns3::CsmaNetDevice> device) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CsmaNetDevice >', 'device')])
-    ## csma-channel.h (module 'csma'): ns3::CsmaDeviceRec::CsmaDeviceRec(ns3::CsmaDeviceRec const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CsmaDeviceRec const &', 'arg0')])
+    ## csma-channel.h (module 'csma'): ns3::CsmaDeviceRec::CsmaDeviceRec(ns3::CsmaDeviceRec const & o) [copy constructor]
+    cls.add_constructor([param('ns3::CsmaDeviceRec const &', 'o')])
     ## csma-channel.h (module 'csma'): bool ns3::CsmaDeviceRec::IsActive() [member function]
     cls.add_method('IsActive', 
                    'bool', 
@@ -2309,6 +2317,78 @@
                    is_const=True)
     return
 
+def register_Ns3Mac48Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(ns3::Mac48Address const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetBroadcast() [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv4Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv4Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv6Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast6Prefix() [member function]
+    cls.add_method('GetMulticast6Prefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticastPrefix() [member function]
+    cls.add_method('GetMulticastPrefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsBroadcast() const [member function]
+    cls.add_method('IsBroadcast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsGroup() const [member function]
+    cls.add_method('IsGroup', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static bool ns3::Mac48Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
 def register_Ns3NetDeviceContainer_methods(root_module, cls):
     ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer(ns3::NetDeviceContainer const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDeviceContainer const &', 'arg0')])
@@ -2711,7 +2791,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -2729,10 +2809,10 @@
     cls.add_method('Close', 
                    'void', 
                    [])
-    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
+    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t & packets, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
     cls.add_method('Diff', 
                    'bool', 
-                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
+                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t &', 'packets'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
                    is_static=True)
     ## pcap-file.h (module 'network'): bool ns3::PcapFile::Eof() const [member function]
     cls.add_method('Eof', 
@@ -2796,10 +2876,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header const & header, ns3::Ptr<const ns3::Packet> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file.h (module 'network'): ns3::PcapFile::SNAPLEN_DEFAULT [variable]
     cls.add_static_attribute('SNAPLEN_DEFAULT', 'uint32_t const', is_const=True)
     ## pcap-file.h (module 'network'): ns3::PcapFile::ZONE_DEFAULT [variable]
@@ -3018,10 +3098,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -4003,10 +4083,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header const & header, ns3::Ptr<const ns3::Packet> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('ns3::Time', 't'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('ns3::Time', 't'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, uint8_t const * buffer, uint32_t length) [member function]
     cls.add_method('Write', 
                    'void', 
@@ -5157,11 +5237,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -6524,6 +6614,46 @@
                    [param('ns3::Ipv6Prefix const &', 'value')])
     return
 
+def register_Ns3Mac48AddressChecker_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker(ns3::Mac48AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac48AddressValue_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressValue const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'value')])
+    ## mac48-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac48AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## mac48-address.h (module 'network'): ns3::Mac48Address ns3::Mac48AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): std::string ns3::Mac48AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48AddressValue::Set(ns3::Mac48Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac48Address const &', 'value')])
+    return
+
 def register_Ns3NetDevice_methods(root_module, cls):
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
     cls.add_constructor([])
@@ -7243,6 +7373,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -7255,6 +7386,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.23/src/csma-layout/bindings/modulegen__gcc_LP64.py ns-3.24/src/csma-layout/bindings/modulegen__gcc_LP64.py
--- ns-3.23/src/csma-layout/bindings/modulegen__gcc_LP64.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/csma-layout/bindings/modulegen__gcc_LP64.py	2015-09-15 11:18:44.000000000 -0700
@@ -104,6 +104,10 @@
     module.add_class('Ipv6InterfaceContainer', import_from_module='ns.internet')
     ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix [class]
     module.add_class('Ipv6Prefix', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    module.add_class('Mac48Address', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    root_module['ns3::Mac48Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## net-device-container.h (module 'network'): ns3::NetDeviceContainer [class]
     module.add_class('NetDeviceContainer', import_from_module='ns.network')
     ## node-container.h (module 'network'): ns3::NodeContainer [class]
@@ -137,7 +141,7 @@
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
+    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SSL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
     ## internet-trace-helper.h (module 'internet'): ns3::PcapHelperForIpv4 [class]
@@ -304,6 +308,10 @@
     module.add_class('Ipv6PrefixChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue [class]
     module.add_class('Ipv6PrefixValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker [class]
+    module.add_class('Mac48AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue [class]
+    module.add_class('Mac48AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
     module.add_class('NetDevice', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice::PacketType [enumeration]
@@ -344,6 +352,12 @@
     nested_module = module.add_cpp_namespace('Hash')
     register_types_ns3_Hash(nested_module)
     
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -379,6 +393,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AsciiTraceHelper_methods(root_module, root_module['ns3::AsciiTraceHelper'])
@@ -413,6 +434,7 @@
     register_Ns3Ipv6InterfaceAddress_methods(root_module, root_module['ns3::Ipv6InterfaceAddress'])
     register_Ns3Ipv6InterfaceContainer_methods(root_module, root_module['ns3::Ipv6InterfaceContainer'])
     register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
+    register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
     register_Ns3NetDeviceContainer_methods(root_module, root_module['ns3::NetDeviceContainer'])
     register_Ns3NodeContainer_methods(root_module, root_module['ns3::NodeContainer'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
@@ -499,6 +521,8 @@
     register_Ns3Ipv6PmtuCache_methods(root_module, root_module['ns3::Ipv6PmtuCache'])
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
+    register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
+    register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
@@ -875,17 +899,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -907,11 +931,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -921,16 +940,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -1168,14 +1177,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -1236,11 +1249,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CsmaDeviceRec_methods(root_module, cls):
@@ -1248,8 +1256,8 @@
     cls.add_constructor([])
     ## csma-channel.h (module 'csma'): ns3::CsmaDeviceRec::CsmaDeviceRec(ns3::Ptr<ns3::CsmaNetDevice> device) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CsmaNetDevice >', 'device')])
-    ## csma-channel.h (module 'csma'): ns3::CsmaDeviceRec::CsmaDeviceRec(ns3::CsmaDeviceRec const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CsmaDeviceRec const &', 'arg0')])
+    ## csma-channel.h (module 'csma'): ns3::CsmaDeviceRec::CsmaDeviceRec(ns3::CsmaDeviceRec const & o) [copy constructor]
+    cls.add_constructor([param('ns3::CsmaDeviceRec const &', 'o')])
     ## csma-channel.h (module 'csma'): bool ns3::CsmaDeviceRec::IsActive() [member function]
     cls.add_method('IsActive', 
                    'bool', 
@@ -2309,6 +2317,78 @@
                    is_const=True)
     return
 
+def register_Ns3Mac48Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(ns3::Mac48Address const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetBroadcast() [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv4Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv4Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv6Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast6Prefix() [member function]
+    cls.add_method('GetMulticast6Prefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticastPrefix() [member function]
+    cls.add_method('GetMulticastPrefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsBroadcast() const [member function]
+    cls.add_method('IsBroadcast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsGroup() const [member function]
+    cls.add_method('IsGroup', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static bool ns3::Mac48Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
 def register_Ns3NetDeviceContainer_methods(root_module, cls):
     ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer(ns3::NetDeviceContainer const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDeviceContainer const &', 'arg0')])
@@ -2711,7 +2791,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -2729,10 +2809,10 @@
     cls.add_method('Close', 
                    'void', 
                    [])
-    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
+    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t & packets, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
     cls.add_method('Diff', 
                    'bool', 
-                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
+                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t &', 'packets'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
                    is_static=True)
     ## pcap-file.h (module 'network'): bool ns3::PcapFile::Eof() const [member function]
     cls.add_method('Eof', 
@@ -2796,10 +2876,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header const & header, ns3::Ptr<const ns3::Packet> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file.h (module 'network'): ns3::PcapFile::SNAPLEN_DEFAULT [variable]
     cls.add_static_attribute('SNAPLEN_DEFAULT', 'uint32_t const', is_const=True)
     ## pcap-file.h (module 'network'): ns3::PcapFile::ZONE_DEFAULT [variable]
@@ -3018,10 +3098,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -4003,10 +4083,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header const & header, ns3::Ptr<const ns3::Packet> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('ns3::Time', 't'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('ns3::Time', 't'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, uint8_t const * buffer, uint32_t length) [member function]
     cls.add_method('Write', 
                    'void', 
@@ -5157,11 +5237,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -6524,6 +6614,46 @@
                    [param('ns3::Ipv6Prefix const &', 'value')])
     return
 
+def register_Ns3Mac48AddressChecker_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker(ns3::Mac48AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac48AddressValue_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressValue const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'value')])
+    ## mac48-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac48AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## mac48-address.h (module 'network'): ns3::Mac48Address ns3::Mac48AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): std::string ns3::Mac48AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48AddressValue::Set(ns3::Mac48Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac48Address const &', 'value')])
+    return
+
 def register_Ns3NetDevice_methods(root_module, cls):
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
     cls.add_constructor([])
@@ -7243,6 +7373,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -7255,6 +7386,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.23/src/csma-layout/model/csma-star-helper.h ns-3.24/src/csma-layout/model/csma-star-helper.h
--- ns-3.23/src/csma-layout/model/csma-star-helper.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/csma-layout/model/csma-star-helper.h	2015-09-15 11:18:44.000000000 -0700
@@ -141,14 +141,14 @@
   void AssignIpv6Addresses (Ipv6Address network, Ipv6Prefix prefix);
 
 private:
-  NodeContainer m_hub;
-  NetDeviceContainer m_hubDevices;
-  NodeContainer m_spokes;
-  NetDeviceContainer m_spokeDevices;
-  Ipv4InterfaceContainer m_hubInterfaces;
-  Ipv4InterfaceContainer m_spokeInterfaces;
-  Ipv6InterfaceContainer m_hubInterfaces6;
-  Ipv6InterfaceContainer m_spokeInterfaces6;
+  NodeContainer m_hub;                        //!< NodeContainer for the hub node
+  NetDeviceContainer m_hubDevices;            //!< NetDeviceContainer for the hub node NetDevices
+  NodeContainer m_spokes;                     //!< NodeContainer for the spokes nodes
+  NetDeviceContainer m_spokeDevices;          //!< NetDeviceContainer for the spokes nodes NetDevices
+  Ipv4InterfaceContainer m_hubInterfaces;     //!< Ipv4InterfaceContainer for the hub IPv4 interfaces
+  Ipv4InterfaceContainer m_spokeInterfaces;   //!< Ipv4InterfaceContainer for the spokes IPv4 interfaces
+  Ipv6InterfaceContainer m_hubInterfaces6;    //!< Ipv6InterfaceContainer for the hub IPv6 interfaces
+  Ipv6InterfaceContainer m_spokeInterfaces6;  //!< Ipv6InterfaceContainer for the spokes IPv6 interfaces
 };
 
 } // namespace ns3
diff -Naur ns-3.23/src/dsdv/bindings/modulegen__gcc_ILP32.py ns-3.24/src/dsdv/bindings/modulegen__gcc_ILP32.py
--- ns-3.23/src/dsdv/bindings/modulegen__gcc_ILP32.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/dsdv/bindings/modulegen__gcc_ILP32.py	2015-09-15 11:18:44.000000000 -0700
@@ -102,6 +102,10 @@
     root_module['ns3::Ipv6Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix [class]
     module.add_class('Ipv6Prefix', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    module.add_class('Mac48Address', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    root_module['ns3::Mac48Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## node-container.h (module 'network'): ns3::NodeContainer [class]
     module.add_class('NodeContainer', import_from_module='ns.network')
     ## object-base.h (module 'core'): ns3::ObjectBase [class]
@@ -302,6 +306,10 @@
     module.add_class('Ipv6PrefixValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## random-variable-stream.h (module 'core'): ns3::LogNormalRandomVariable [class]
     module.add_class('LogNormalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker [class]
+    module.add_class('Mac48AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue [class]
+    module.add_class('Mac48AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
     module.add_class('NetDevice', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice::PacketType [enumeration]
@@ -348,6 +356,12 @@
     register_types_ns3_Hash(nested_module)
     
     
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
+    
     ## Register a nested module for the namespace dsdv
     
     nested_module = module.add_cpp_namespace('dsdv')
@@ -388,6 +402,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_types_ns3_dsdv(module):
     root_module = module.get_root()
     
@@ -436,6 +457,7 @@
     register_Ns3Ipv4RoutingHelper_methods(root_module, root_module['ns3::Ipv4RoutingHelper'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
     register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
+    register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
     register_Ns3NodeContainer_methods(root_module, root_module['ns3::NodeContainer'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
     register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
@@ -523,6 +545,8 @@
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
     register_Ns3LogNormalRandomVariable_methods(root_module, root_module['ns3::LogNormalRandomVariable'])
+    register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
+    register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
@@ -669,17 +693,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -701,11 +725,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -715,16 +734,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -962,14 +971,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -1030,11 +1043,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3EventId_methods(root_module, cls):
@@ -1792,6 +1800,78 @@
                    is_const=True)
     return
 
+def register_Ns3Mac48Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(ns3::Mac48Address const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetBroadcast() [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv4Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv4Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv6Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast6Prefix() [member function]
+    cls.add_method('GetMulticast6Prefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticastPrefix() [member function]
+    cls.add_method('GetMulticastPrefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsBroadcast() const [member function]
+    cls.add_method('IsBroadcast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsGroup() const [member function]
+    cls.add_method('IsGroup', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static bool ns3::Mac48Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
 def register_Ns3NodeContainer_methods(root_module, cls):
     ## node-container.h (module 'network'): ns3::NodeContainer::NodeContainer(ns3::NodeContainer const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NodeContainer const &', 'arg0')])
@@ -2149,7 +2229,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -2241,10 +2321,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -4422,11 +4502,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -4536,10 +4626,10 @@
                    'double', 
                    [], 
                    is_virtual=True)
-    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
     cls.add_method('Interpolate', 
                    'double', 
-                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
                    visibility='private', is_virtual=True)
     ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
     cls.add_method('Validate', 
@@ -5542,6 +5632,46 @@
                    is_virtual=True)
     return
 
+def register_Ns3Mac48AddressChecker_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker(ns3::Mac48AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac48AddressValue_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressValue const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'value')])
+    ## mac48-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac48AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## mac48-address.h (module 'network'): ns3::Mac48Address ns3::Mac48AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): std::string ns3::Mac48AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48AddressValue::Set(ns3::Mac48Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac48Address const &', 'value')])
+    return
+
 def register_Ns3NetDevice_methods(root_module, cls):
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
     cls.add_constructor([])
@@ -6884,6 +7014,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     register_functions_ns3_dsdv(module.get_submodule('dsdv'), root_module)
     return
 
@@ -6897,6 +7028,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def register_functions_ns3_dsdv(module, root_module):
     return
 
diff -Naur ns-3.23/src/dsdv/bindings/modulegen__gcc_LP64.py ns-3.24/src/dsdv/bindings/modulegen__gcc_LP64.py
--- ns-3.23/src/dsdv/bindings/modulegen__gcc_LP64.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/dsdv/bindings/modulegen__gcc_LP64.py	2015-09-15 11:18:44.000000000 -0700
@@ -102,6 +102,10 @@
     root_module['ns3::Ipv6Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix [class]
     module.add_class('Ipv6Prefix', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    module.add_class('Mac48Address', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    root_module['ns3::Mac48Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## node-container.h (module 'network'): ns3::NodeContainer [class]
     module.add_class('NodeContainer', import_from_module='ns.network')
     ## object-base.h (module 'core'): ns3::ObjectBase [class]
@@ -302,6 +306,10 @@
     module.add_class('Ipv6PrefixValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## random-variable-stream.h (module 'core'): ns3::LogNormalRandomVariable [class]
     module.add_class('LogNormalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker [class]
+    module.add_class('Mac48AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue [class]
+    module.add_class('Mac48AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
     module.add_class('NetDevice', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice::PacketType [enumeration]
@@ -348,6 +356,12 @@
     register_types_ns3_Hash(nested_module)
     
     
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
+    
     ## Register a nested module for the namespace dsdv
     
     nested_module = module.add_cpp_namespace('dsdv')
@@ -388,6 +402,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_types_ns3_dsdv(module):
     root_module = module.get_root()
     
@@ -436,6 +457,7 @@
     register_Ns3Ipv4RoutingHelper_methods(root_module, root_module['ns3::Ipv4RoutingHelper'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
     register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
+    register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
     register_Ns3NodeContainer_methods(root_module, root_module['ns3::NodeContainer'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
     register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
@@ -523,6 +545,8 @@
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
     register_Ns3LogNormalRandomVariable_methods(root_module, root_module['ns3::LogNormalRandomVariable'])
+    register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
+    register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
@@ -669,17 +693,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -701,11 +725,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -715,16 +734,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -962,14 +971,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -1030,11 +1043,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3EventId_methods(root_module, cls):
@@ -1792,6 +1800,78 @@
                    is_const=True)
     return
 
+def register_Ns3Mac48Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(ns3::Mac48Address const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetBroadcast() [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv4Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv4Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv6Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast6Prefix() [member function]
+    cls.add_method('GetMulticast6Prefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticastPrefix() [member function]
+    cls.add_method('GetMulticastPrefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsBroadcast() const [member function]
+    cls.add_method('IsBroadcast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsGroup() const [member function]
+    cls.add_method('IsGroup', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static bool ns3::Mac48Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
 def register_Ns3NodeContainer_methods(root_module, cls):
     ## node-container.h (module 'network'): ns3::NodeContainer::NodeContainer(ns3::NodeContainer const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NodeContainer const &', 'arg0')])
@@ -2149,7 +2229,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -2241,10 +2321,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -4422,11 +4502,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -4536,10 +4626,10 @@
                    'double', 
                    [], 
                    is_virtual=True)
-    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
     cls.add_method('Interpolate', 
                    'double', 
-                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
                    visibility='private', is_virtual=True)
     ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
     cls.add_method('Validate', 
@@ -5542,6 +5632,46 @@
                    is_virtual=True)
     return
 
+def register_Ns3Mac48AddressChecker_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker(ns3::Mac48AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac48AddressValue_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressValue const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'value')])
+    ## mac48-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac48AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## mac48-address.h (module 'network'): ns3::Mac48Address ns3::Mac48AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): std::string ns3::Mac48AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48AddressValue::Set(ns3::Mac48Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac48Address const &', 'value')])
+    return
+
 def register_Ns3NetDevice_methods(root_module, cls):
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
     cls.add_constructor([])
@@ -6884,6 +7014,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     register_functions_ns3_dsdv(module.get_submodule('dsdv'), root_module)
     return
 
@@ -6897,6 +7028,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def register_functions_ns3_dsdv(module, root_module):
     return
 
diff -Naur ns-3.23/src/dsdv/model/dsdv-routing-protocol.cc ns-3.24/src/dsdv/model/dsdv-routing-protocol.cc
--- ns-3.23/src/dsdv/model/dsdv-routing-protocol.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/dsdv/model/dsdv-routing-protocol.cc	2015-09-15 11:18:44.000000000 -0700
@@ -66,7 +66,11 @@
   static TypeId
   GetTypeId ()
   {
-    static TypeId tid = TypeId ("ns3::dsdv::DeferredRouteOutputTag").SetParent<Tag> ().SetGroupName ("Dsdv");
+    static TypeId tid = TypeId ("ns3::dsdv::DeferredRouteOutputTag")
+      .SetParent<Tag> ()
+      .SetGroupName ("Dsdv")
+      .AddConstructor<DeferredRouteOutputTag> ()
+      ;
     return tid;
   }
 
diff -Naur ns-3.23/src/dsr/bindings/modulegen__gcc_ILP32.py ns-3.24/src/dsr/bindings/modulegen__gcc_ILP32.py
--- ns-3.23/src/dsr/bindings/modulegen__gcc_ILP32.py	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/dsr/bindings/modulegen__gcc_ILP32.py	2015-09-15 11:18:44.000000000 -0700
@@ -23,11 +23,11 @@
     ## wifi-mac-header.h (module 'wifi'): ns3::WifiMacType [enumeration]
     module.add_enum('WifiMacType', ['WIFI_MAC_CTL_RTS', 'WIFI_MAC_CTL_CTS', 'WIFI_MAC_CTL_ACK', 'WIFI_MAC_CTL_BACKREQ', 'WIFI_MAC_CTL_BACKRESP', 'WIFI_MAC_CTL_CTLWRAPPER', 'WIFI_MAC_MGT_BEACON', 'WIFI_MAC_MGT_ASSOCIATION_REQUEST', 'WIFI_MAC_MGT_ASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_DISASSOCIATION', 'WIFI_MAC_MGT_REASSOCIATION_REQUEST', 'WIFI_MAC_MGT_REASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_PROBE_REQUEST', 'WIFI_MAC_MGT_PROBE_RESPONSE', 'WIFI_MAC_MGT_AUTHENTICATION', 'WIFI_MAC_MGT_DEAUTHENTICATION', 'WIFI_MAC_MGT_ACTION', 'WIFI_MAC_MGT_ACTION_NO_ACK', 'WIFI_MAC_MGT_MULTIHOP_ACTION', 'WIFI_MAC_DATA', 'WIFI_MAC_DATA_CFACK', 'WIFI_MAC_DATA_CFPOLL', 'WIFI_MAC_DATA_CFACK_CFPOLL', 'WIFI_MAC_DATA_NULL', 'WIFI_MAC_DATA_NULL_CFACK', 'WIFI_MAC_DATA_NULL_CFPOLL', 'WIFI_MAC_DATA_NULL_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA', 'WIFI_MAC_QOSDATA_CFACK', 'WIFI_MAC_QOSDATA_CFPOLL', 'WIFI_MAC_QOSDATA_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA_NULL', 'WIFI_MAC_QOSDATA_NULL_CFPOLL', 'WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL'], import_from_module='ns.wifi')
     ## wifi-preamble.h (module 'wifi'): ns3::WifiPreamble [enumeration]
-    module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF', 'WIFI_PREAMBLE_NONE'], import_from_module='ns.wifi')
+    module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF', 'WIFI_PREAMBLE_VHT', 'WIFI_PREAMBLE_NONE'], import_from_module='ns.wifi')
     ## wifi-mode.h (module 'wifi'): ns3::WifiModulationClass [enumeration]
-    module.add_enum('WifiModulationClass', ['WIFI_MOD_CLASS_UNKNOWN', 'WIFI_MOD_CLASS_IR', 'WIFI_MOD_CLASS_FHSS', 'WIFI_MOD_CLASS_DSSS', 'WIFI_MOD_CLASS_ERP_PBCC', 'WIFI_MOD_CLASS_DSSS_OFDM', 'WIFI_MOD_CLASS_ERP_OFDM', 'WIFI_MOD_CLASS_OFDM', 'WIFI_MOD_CLASS_HT'], import_from_module='ns.wifi')
+    module.add_enum('WifiModulationClass', ['WIFI_MOD_CLASS_UNKNOWN', 'WIFI_MOD_CLASS_IR', 'WIFI_MOD_CLASS_FHSS', 'WIFI_MOD_CLASS_DSSS', 'WIFI_MOD_CLASS_HR_DSSS', 'WIFI_MOD_CLASS_ERP_PBCC', 'WIFI_MOD_CLASS_DSSS_OFDM', 'WIFI_MOD_CLASS_ERP_OFDM', 'WIFI_MOD_CLASS_OFDM', 'WIFI_MOD_CLASS_HT', 'WIFI_MOD_CLASS_VHT'], import_from_module='ns.wifi')
     ## wifi-phy-standard.h (module 'wifi'): ns3::WifiPhyStandard [enumeration]
-    module.add_enum('WifiPhyStandard', ['WIFI_PHY_STANDARD_80211a', 'WIFI_PHY_STANDARD_80211b', 'WIFI_PHY_STANDARD_80211g', 'WIFI_PHY_STANDARD_80211_10MHZ', 'WIFI_PHY_STANDARD_80211_5MHZ', 'WIFI_PHY_STANDARD_holland', 'WIFI_PHY_STANDARD_80211n_2_4GHZ', 'WIFI_PHY_STANDARD_80211n_5GHZ'], import_from_module='ns.wifi')
+    module.add_enum('WifiPhyStandard', ['WIFI_PHY_STANDARD_80211a', 'WIFI_PHY_STANDARD_80211b', 'WIFI_PHY_STANDARD_80211g', 'WIFI_PHY_STANDARD_80211_10MHZ', 'WIFI_PHY_STANDARD_80211_5MHZ', 'WIFI_PHY_STANDARD_holland', 'WIFI_PHY_STANDARD_80211n_2_4GHZ', 'WIFI_PHY_STANDARD_80211n_5GHZ', 'WIFI_PHY_STANDARD_80211ac'], import_from_module='ns.wifi')
     ## qos-utils.h (module 'wifi'): ns3::AcIndex [enumeration]
     module.add_enum('AcIndex', ['AC_BE', 'AC_BK', 'AC_VI', 'AC_VO', 'AC_BE_NQOS', 'AC_UNDEF'], import_from_module='ns.wifi')
     ## wifi-mode.h (module 'wifi'): ns3::WifiCodeRate [enumeration]
@@ -130,6 +130,8 @@
     root_module['ns3::Mac48Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## node-container.h (module 'network'): ns3::NodeContainer [class]
     module.add_class('NodeContainer', import_from_module='ns.network')
+    ## non-copyable.h (module 'core'): ns3::NonCopyable [class]
+    module.add_class('NonCopyable', destructor_visibility='protected', import_from_module='ns.core')
     ## object-base.h (module 'core'): ns3::ObjectBase [class]
     module.add_class('ObjectBase', allow_subclassing=True, import_from_module='ns.core')
     ## object.h (module 'core'): ns3::ObjectDeleter [struct]
@@ -204,6 +206,10 @@
     module.add_class('int64x64_t', import_from_module='ns.core')
     ## int64x64-double.h (module 'core'): ns3::int64x64_t::impl_type [enumeration]
     module.add_enum('impl_type', ['int128_impl', 'cairo_impl', 'ld_impl'], outer_class=root_module['ns3::int64x64_t'], import_from_module='ns.core')
+    ## wifi-phy.h (module 'wifi'): ns3::mpduInfo [struct]
+    module.add_class('mpduInfo', import_from_module='ns.wifi')
+    ## wifi-phy.h (module 'wifi'): ns3::signalNoiseDbm [struct]
+    module.add_class('signalNoiseDbm', import_from_module='ns.wifi')
     ## chunk.h (module 'network'): ns3::Chunk [class]
     module.add_class('Chunk', import_from_module='ns.network', parent=root_module['ns3::ObjectBase'])
     ## header.h (module 'network'): ns3::Header [class]
@@ -442,6 +448,12 @@
     module.add_class('UdpL4Protocol', import_from_module='ns.internet', parent=root_module['ns3::IpL4Protocol'])
     ## uinteger.h (module 'core'): ns3::UintegerValue [class]
     module.add_class('UintegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilities [class]
+    module.add_class('VhtCapabilities', import_from_module='ns.wifi', parent=root_module['ns3::WifiInformationElement'])
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilitiesChecker [class]
+    module.add_class('VhtCapabilitiesChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilitiesValue [class]
+    module.add_class('VhtCapabilitiesValue', import_from_module='ns.wifi', parent=root_module['ns3::AttributeValue'])
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeChecker [class]
     module.add_class('WifiModeChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeValue [class]
@@ -453,24 +465,26 @@
     ## icmpv4-l4-protocol.h (module 'internet'): ns3::Icmpv4L4Protocol [class]
     module.add_class('Icmpv4L4Protocol', import_from_module='ns.internet', parent=root_module['ns3::IpL4Protocol'])
     module.add_container('ns3::WifiModeList', 'ns3::WifiMode', container_type=u'vector')
-    module.add_container('ns3::WifiMcsList', 'unsigned char', container_type=u'vector')
     module.add_container('std::list< ns3::Ptr< ns3::Packet > >', 'ns3::Ptr< ns3::Packet >', container_type=u'list')
     module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type=u'map')
-    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >', u'ns3::WifiMcsListIterator')
-    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >*', u'ns3::WifiMcsListIterator*')
-    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >&', u'ns3::WifiMcsListIterator&')
-    typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >', u'ns3::WifiMcsList')
-    typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >*', u'ns3::WifiMcsList*')
-    typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >&', u'ns3::WifiMcsList&')
+    typehandlers.add_type_alias(u'ns3::SequenceNumber< short unsigned int, short int >', u'ns3::SequenceNumber16')
+    typehandlers.add_type_alias(u'ns3::SequenceNumber< short unsigned int, short int >*', u'ns3::SequenceNumber16*')
+    typehandlers.add_type_alias(u'ns3::SequenceNumber< short unsigned int, short int >&', u'ns3::SequenceNumber16&')
+    typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned int, int >', u'ns3::SequenceNumber32')
+    typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned int, int >*', u'ns3::SequenceNumber32*')
+    typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned int, int >&', u'ns3::SequenceNumber32&')
     typehandlers.add_type_alias(u'uint8_t', u'ns3::WifiInformationElementId')
     typehandlers.add_type_alias(u'uint8_t*', u'ns3::WifiInformationElementId*')
     typehandlers.add_type_alias(u'uint8_t&', u'ns3::WifiInformationElementId&')
-    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >', u'ns3::WifiModeListIterator')
-    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >*', u'ns3::WifiModeListIterator*')
-    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >&', u'ns3::WifiModeListIterator&')
+    typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >', u'ns3::SequenceNumber8')
+    typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >*', u'ns3::SequenceNumber8*')
+    typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >&', u'ns3::SequenceNumber8&')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >', u'ns3::WifiModeList')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >*', u'ns3::WifiModeList*')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >&', u'ns3::WifiModeList&')
+    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >', u'ns3::WifiModeListIterator')
+    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >*', u'ns3::WifiModeListIterator*')
+    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >&', u'ns3::WifiModeListIterator&')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -484,6 +498,12 @@
     register_types_ns3_Hash(nested_module)
     
     
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
+    
     ## Register a nested module for the namespace dsr
     
     nested_module = module.add_cpp_namespace('dsr')
@@ -530,6 +550,16 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *', u'ns3::TracedValueCallback::SequenceNumber32')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) **', u'ns3::TracedValueCallback::SequenceNumber32*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *&', u'ns3::TracedValueCallback::SequenceNumber32&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_types_ns3_dsr(module):
     root_module = module.get_root()
     
@@ -688,6 +718,7 @@
     register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
     register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
     register_Ns3NodeContainer_methods(root_module, root_module['ns3::NodeContainer'])
+    register_Ns3NonCopyable_methods(root_module, root_module['ns3::NonCopyable'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
     register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
     register_Ns3ObjectFactory_methods(root_module, root_module['ns3::ObjectFactory'])
@@ -718,6 +749,8 @@
     register_Ns3WifiTxVector_methods(root_module, root_module['ns3::WifiTxVector'])
     register_Ns3Empty_methods(root_module, root_module['ns3::empty'])
     register_Ns3Int64x64_t_methods(root_module, root_module['ns3::int64x64_t'])
+    register_Ns3MpduInfo_methods(root_module, root_module['ns3::mpduInfo'])
+    register_Ns3SignalNoiseDbm_methods(root_module, root_module['ns3::signalNoiseDbm'])
     register_Ns3Chunk_methods(root_module, root_module['ns3::Chunk'])
     register_Ns3Header_methods(root_module, root_module['ns3::Header'])
     register_Ns3Icmpv4DestinationUnreachable_methods(root_module, root_module['ns3::Icmpv4DestinationUnreachable'])
@@ -821,6 +854,9 @@
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
     register_Ns3UdpL4Protocol_methods(root_module, root_module['ns3::UdpL4Protocol'])
     register_Ns3UintegerValue_methods(root_module, root_module['ns3::UintegerValue'])
+    register_Ns3VhtCapabilities_methods(root_module, root_module['ns3::VhtCapabilities'])
+    register_Ns3VhtCapabilitiesChecker_methods(root_module, root_module['ns3::VhtCapabilitiesChecker'])
+    register_Ns3VhtCapabilitiesValue_methods(root_module, root_module['ns3::VhtCapabilitiesValue'])
     register_Ns3WifiModeChecker_methods(root_module, root_module['ns3::WifiModeChecker'])
     register_Ns3WifiModeValue_methods(root_module, root_module['ns3::WifiModeValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
@@ -1001,17 +1037,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -1033,11 +1069,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -1047,16 +1078,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -1294,14 +1315,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -1362,11 +1387,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3DsrHelper_methods(root_module, cls):
@@ -2310,6 +2330,12 @@
                    is_const=True)
     return
 
+def register_Ns3NonCopyable_methods(root_module, cls):
+    ## non-copyable.h (module 'core'): ns3::NonCopyable::NonCopyable() [constructor]
+    cls.add_constructor([], 
+                        visibility='protected')
+    return
+
 def register_Ns3ObjectBase_methods(root_module, cls):
     ## object-base.h (module 'core'): ns3::ObjectBase::ObjectBase() [constructor]
     cls.add_constructor([])
@@ -2603,7 +2629,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -2695,10 +2721,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -3133,24 +3159,24 @@
     cls.add_constructor([])
     ## wifi-mode.h (module 'wifi'): ns3::WifiMode::WifiMode(std::string name) [constructor]
     cls.add_constructor([param('std::string', 'name')])
-    ## wifi-mode.h (module 'wifi'): uint32_t ns3::WifiMode::GetBandwidth() const [member function]
-    cls.add_method('GetBandwidth', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## wifi-mode.h (module 'wifi'): ns3::WifiCodeRate ns3::WifiMode::GetCodeRate() const [member function]
+    ## wifi-mode.h (module 'wifi'): ns3::WifiCodeRate ns3::WifiMode::GetCodeRate(uint8_t nss) const [member function]
     cls.add_method('GetCodeRate', 
                    'ns3::WifiCodeRate', 
-                   [], 
+                   [param('uint8_t', 'nss')], 
                    is_const=True)
-    ## wifi-mode.h (module 'wifi'): uint8_t ns3::WifiMode::GetConstellationSize() const [member function]
+    ## wifi-mode.h (module 'wifi'): uint16_t ns3::WifiMode::GetConstellationSize(uint8_t nss) const [member function]
     cls.add_method('GetConstellationSize', 
-                   'uint8_t', 
-                   [], 
+                   'uint16_t', 
+                   [param('uint8_t', 'nss')], 
                    is_const=True)
-    ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetDataRate() const [member function]
+    ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetDataRate(uint32_t channelWidth, bool isShortGuardInterval, uint8_t nss) const [member function]
     cls.add_method('GetDataRate', 
                    'uint64_t', 
+                   [param('uint32_t', 'channelWidth'), param('bool', 'isShortGuardInterval'), param('uint8_t', 'nss')], 
+                   is_const=True)
+    ## wifi-mode.h (module 'wifi'): uint8_t ns3::WifiMode::GetMcsValue() const [member function]
+    cls.add_method('GetMcsValue', 
+                   'uint8_t', 
                    [], 
                    is_const=True)
     ## wifi-mode.h (module 'wifi'): ns3::WifiModulationClass ns3::WifiMode::GetModulationClass() const [member function]
@@ -3158,10 +3184,10 @@
                    'ns3::WifiModulationClass', 
                    [], 
                    is_const=True)
-    ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetPhyRate() const [member function]
+    ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetPhyRate(uint32_t channelWidth, bool isShortGuardInterval, uint8_t nss) const [member function]
     cls.add_method('GetPhyRate', 
                    'uint64_t', 
-                   [], 
+                   [param('uint32_t', 'channelWidth'), param('bool', 'isShortGuardInterval'), param('uint8_t', 'nss')], 
                    is_const=True)
     ## wifi-mode.h (module 'wifi'): uint32_t ns3::WifiMode::GetUid() const [member function]
     cls.add_method('GetUid', 
@@ -3183,10 +3209,15 @@
 def register_Ns3WifiModeFactory_methods(root_module, cls):
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeFactory::WifiModeFactory(ns3::WifiModeFactory const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::WifiModeFactory const &', 'arg0')])
-    ## wifi-mode.h (module 'wifi'): static ns3::WifiMode ns3::WifiModeFactory::CreateWifiMode(std::string uniqueName, ns3::WifiModulationClass modClass, bool isMandatory, uint32_t bandwidth, uint32_t dataRate, ns3::WifiCodeRate codingRate, uint8_t constellationSize) [member function]
+    ## wifi-mode.h (module 'wifi'): static ns3::WifiMode ns3::WifiModeFactory::CreateWifiMcs(std::string uniqueName, uint8_t mcsValue, ns3::WifiModulationClass modClass) [member function]
+    cls.add_method('CreateWifiMcs', 
+                   'ns3::WifiMode', 
+                   [param('std::string', 'uniqueName'), param('uint8_t', 'mcsValue'), param('ns3::WifiModulationClass', 'modClass')], 
+                   is_static=True)
+    ## wifi-mode.h (module 'wifi'): static ns3::WifiMode ns3::WifiModeFactory::CreateWifiMode(std::string uniqueName, ns3::WifiModulationClass modClass, bool isMandatory, ns3::WifiCodeRate codingRate, uint16_t constellationSize) [member function]
     cls.add_method('CreateWifiMode', 
                    'ns3::WifiMode', 
-                   [param('std::string', 'uniqueName'), param('ns3::WifiModulationClass', 'modClass'), param('bool', 'isMandatory'), param('uint32_t', 'bandwidth'), param('uint32_t', 'dataRate'), param('ns3::WifiCodeRate', 'codingRate'), param('uint8_t', 'constellationSize')], 
+                   [param('std::string', 'uniqueName'), param('ns3::WifiModulationClass', 'modClass'), param('bool', 'isMandatory'), param('ns3::WifiCodeRate', 'codingRate'), param('uint16_t', 'constellationSize')], 
                    is_static=True)
     return
 
@@ -3279,6 +3310,10 @@
     cls.add_constructor([param('ns3::WifiRemoteStationState const &', 'arg0')])
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_address [variable]
     cls.add_instance_attribute('m_address', 'ns3::Mac48Address', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_aggregation [variable]
+    cls.add_instance_attribute('m_aggregation', 'bool', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_channelWidth [variable]
+    cls.add_instance_attribute('m_channelWidth', 'uint32_t', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_greenfield [variable]
     cls.add_instance_attribute('m_greenfield', 'bool', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_info [variable]
@@ -3286,7 +3321,7 @@
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_ness [variable]
     cls.add_instance_attribute('m_ness', 'uint32_t', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_operationalMcsSet [variable]
-    cls.add_instance_attribute('m_operationalMcsSet', 'ns3::WifiMcsList', is_const=False)
+    cls.add_instance_attribute('m_operationalMcsSet', 'ns3::WifiModeList', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_operationalRateSet [variable]
     cls.add_instance_attribute('m_operationalRateSet', 'ns3::WifiModeList', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_rx [variable]
@@ -3305,8 +3340,13 @@
     cls.add_constructor([param('ns3::WifiTxVector const &', 'arg0')])
     ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector() [constructor]
     cls.add_constructor([])
-    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiMode mode, uint8_t powerLevel, uint8_t retries, bool shortGuardInterval, uint8_t nss, uint8_t ness, bool stbc) [constructor]
-    cls.add_constructor([param('ns3::WifiMode', 'mode'), param('uint8_t', 'powerLevel'), param('uint8_t', 'retries'), param('bool', 'shortGuardInterval'), param('uint8_t', 'nss'), param('uint8_t', 'ness'), param('bool', 'stbc')])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiMode mode, uint8_t powerLevel, uint8_t retries, bool shortGuardInterval, uint8_t nss, uint8_t ness, uint32_t channelWidth, bool aggregation, bool stbc) [constructor]
+    cls.add_constructor([param('ns3::WifiMode', 'mode'), param('uint8_t', 'powerLevel'), param('uint8_t', 'retries'), param('bool', 'shortGuardInterval'), param('uint8_t', 'nss'), param('uint8_t', 'ness'), param('uint32_t', 'channelWidth'), param('bool', 'aggregation'), param('bool', 'stbc')])
+    ## wifi-tx-vector.h (module 'wifi'): uint32_t ns3::WifiTxVector::GetChannelWidth() const [member function]
+    cls.add_method('GetChannelWidth', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## wifi-tx-vector.h (module 'wifi'): ns3::WifiMode ns3::WifiTxVector::GetMode() const [member function]
     cls.add_method('GetMode', 
                    'ns3::WifiMode', 
@@ -3332,6 +3372,11 @@
                    'uint8_t', 
                    [], 
                    is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): bool ns3::WifiTxVector::IsAggregation() const [member function]
+    cls.add_method('IsAggregation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## wifi-tx-vector.h (module 'wifi'): bool ns3::WifiTxVector::IsShortGuardInterval() const [member function]
     cls.add_method('IsShortGuardInterval', 
                    'bool', 
@@ -3342,6 +3387,14 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetAggregation(bool aggregation) [member function]
+    cls.add_method('SetAggregation', 
+                   'void', 
+                   [param('bool', 'aggregation')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetChannelWidth(uint32_t channelWidth) [member function]
+    cls.add_method('SetChannelWidth', 
+                   'void', 
+                   [param('uint32_t', 'channelWidth')])
     ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetMode(ns3::WifiMode mode) [member function]
     cls.add_method('SetMode', 
                    'void', 
@@ -3446,6 +3499,28 @@
     cls.add_static_attribute('implementation', 'ns3::int64x64_t::impl_type const', is_const=True)
     return
 
+def register_Ns3MpduInfo_methods(root_module, cls):
+    ## wifi-phy.h (module 'wifi'): ns3::mpduInfo::mpduInfo() [constructor]
+    cls.add_constructor([])
+    ## wifi-phy.h (module 'wifi'): ns3::mpduInfo::mpduInfo(ns3::mpduInfo const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::mpduInfo const &', 'arg0')])
+    ## wifi-phy.h (module 'wifi'): ns3::mpduInfo::packetType [variable]
+    cls.add_instance_attribute('packetType', 'uint8_t', is_const=False)
+    ## wifi-phy.h (module 'wifi'): ns3::mpduInfo::referenceNumber [variable]
+    cls.add_instance_attribute('referenceNumber', 'uint32_t', is_const=False)
+    return
+
+def register_Ns3SignalNoiseDbm_methods(root_module, cls):
+    ## wifi-phy.h (module 'wifi'): ns3::signalNoiseDbm::signalNoiseDbm() [constructor]
+    cls.add_constructor([])
+    ## wifi-phy.h (module 'wifi'): ns3::signalNoiseDbm::signalNoiseDbm(ns3::signalNoiseDbm const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::signalNoiseDbm const &', 'arg0')])
+    ## wifi-phy.h (module 'wifi'): ns3::signalNoiseDbm::noise [variable]
+    cls.add_instance_attribute('noise', 'double', is_const=False)
+    ## wifi-phy.h (module 'wifi'): ns3::signalNoiseDbm::signal [variable]
+    cls.add_instance_attribute('signal', 'double', is_const=False)
+    return
+
 def register_Ns3Chunk_methods(root_module, cls):
     ## chunk.h (module 'network'): ns3::Chunk::Chunk() [constructor]
     cls.add_constructor([])
@@ -5986,6 +6061,10 @@
     cls.add_method('SetQosEosp', 
                    'void', 
                    [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosMeshControlPresent() [member function]
+    cls.add_method('SetQosMeshControlPresent', 
+                   'void', 
+                   [])
     ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosNoAck() [member function]
     cls.add_method('SetQosNoAck', 
                    'void', 
@@ -5998,6 +6077,10 @@
     cls.add_method('SetQosNoEosp', 
                    'void', 
                    [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosNoMeshControlPresent() [member function]
+    cls.add_method('SetQosNoMeshControlPresent', 
+                   'void', 
+                   [])
     ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosNormalAck() [member function]
     cls.add_method('SetQosNormalAck', 
                    'void', 
@@ -6042,19 +6125,19 @@
                    'int64_t', 
                    [param('int64_t', 'stream')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculatePlcpDuration(ns3::WifiTxVector txvector, ns3::WifiPreamble preamble) [member function]
-    cls.add_method('CalculatePlcpDuration', 
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculatePlcpPreambleAndHeaderDuration(ns3::WifiTxVector txVector, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('CalculatePlcpPreambleAndHeaderDuration', 
                    'ns3::Time', 
-                   [param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble')])
+                   [param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble')])
     ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::CalculateSnr(ns3::WifiMode txMode, double ber) const [member function]
     cls.add_method('CalculateSnr', 
                    'double', 
                    [param('ns3::WifiMode', 'txMode'), param('double', 'ber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
     cls.add_method('CalculateTxDuration', 
                    'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('ConfigureStandard', 
                    'void', 
@@ -6070,11 +6153,6 @@
                    'ns3::Ptr< ns3::WifiChannel >', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetChannelBonding() const [member function]
-    cls.add_method('GetChannelBonding', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint16_t ns3::WifiPhy::GetChannelNumber() const [member function]
     cls.add_method('GetChannelNumber', 
                    'uint16_t', 
@@ -6085,6 +6163,11 @@
                    'ns3::Time', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetChannelWidth() const [member function]
+    cls.add_method('GetChannelWidth', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetDelayUntilIdle() [member function]
     cls.add_method('GetDelayUntilIdle', 
                    'ns3::Time', 
@@ -6165,328 +6248,328 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetLastRxStartTime() const [member function]
-    cls.add_method('GetLastRxStartTime', 
-                   'ns3::Time', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetLdpc() const [member function]
-    cls.add_method('GetLdpc', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetMFPlcpHeaderMode(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
-    cls.add_method('GetMFPlcpHeaderMode', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs0() [member function]
+    cls.add_method('GetHtMcs0', 
                    'ns3::WifiMode', 
-                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetMcs(uint8_t mcs) const [member function]
-    cls.add_method('GetMcs', 
-                   'uint8_t', 
-                   [param('uint8_t', 'mcs')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::WifiModeList ns3::WifiPhy::GetMembershipSelectorModes(uint32_t selector) [member function]
-    cls.add_method('GetMembershipSelectorModes', 
-                   'ns3::WifiModeList', 
-                   [param('uint32_t', 'selector')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::GetMode(uint32_t mode) const [member function]
-    cls.add_method('GetMode', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs1() [member function]
+    cls.add_method('GetHtMcs1', 
                    'ns3::WifiMode', 
-                   [param('uint32_t', 'mode')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNBssMembershipSelectors() const [member function]
-    cls.add_method('GetNBssMembershipSelectors', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetNMcs() const [member function]
-    cls.add_method('GetNMcs', 
-                   'uint8_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNModes() const [member function]
-    cls.add_method('GetNModes', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNTxPower() const [member function]
-    cls.add_method('GetNTxPower', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfReceiveAntennas() const [member function]
-    cls.add_method('GetNumberOfReceiveAntennas', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfTransmitAntennas() const [member function]
-    cls.add_method('GetNumberOfTransmitAntennas', 
-                   'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate108MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate108MbpsBW40MHz', 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs10() [member function]
+    cls.add_method('GetHtMcs10', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate120MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate120MbpsBW40MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs11() [member function]
+    cls.add_method('GetHtMcs11', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate121_5MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate121_5MbpsBW40MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs12() [member function]
+    cls.add_method('GetHtMcs12', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12Mbps() [member function]
-    cls.add_method('GetOfdmRate12Mbps', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs13() [member function]
+    cls.add_method('GetHtMcs13', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate12MbpsBW10MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs14() [member function]
+    cls.add_method('GetHtMcs14', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate12MbpsBW5MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs15() [member function]
+    cls.add_method('GetHtMcs15', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate135MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate135MbpsBW40MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs16() [member function]
+    cls.add_method('GetHtMcs16', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate135MbpsBW40MHzShGi() [member function]
-    cls.add_method('GetOfdmRate135MbpsBW40MHzShGi', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs17() [member function]
+    cls.add_method('GetHtMcs17', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate13MbpsBW20MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs18() [member function]
+    cls.add_method('GetHtMcs18', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13_5MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate13_5MbpsBW40MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs19() [member function]
+    cls.add_method('GetHtMcs19', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13_5MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate13_5MbpsBW5MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs2() [member function]
+    cls.add_method('GetHtMcs2', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate14_4MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate14_4MbpsBW20MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs20() [member function]
+    cls.add_method('GetHtMcs20', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate150MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate150MbpsBW40MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs21() [member function]
+    cls.add_method('GetHtMcs21', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate15MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate15MbpsBW40MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs22() [member function]
+    cls.add_method('GetHtMcs22', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate18Mbps() [member function]
-    cls.add_method('GetOfdmRate18Mbps', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs23() [member function]
+    cls.add_method('GetHtMcs23', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate18MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate18MbpsBW10MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs24() [member function]
+    cls.add_method('GetHtMcs24', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate19_5MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate19_5MbpsBW20MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs25() [member function]
+    cls.add_method('GetHtMcs25', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate1_5MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate1_5MbpsBW5MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs26() [member function]
+    cls.add_method('GetHtMcs26', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate21_7MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate21_7MbpsBW20MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs27() [member function]
+    cls.add_method('GetHtMcs27', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate24Mbps() [member function]
-    cls.add_method('GetOfdmRate24Mbps', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs28() [member function]
+    cls.add_method('GetHtMcs28', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate24MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate24MbpsBW10MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs29() [member function]
+    cls.add_method('GetHtMcs29', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate26MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate26MbpsBW20MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs3() [member function]
+    cls.add_method('GetHtMcs3', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate27MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate27MbpsBW10MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs30() [member function]
+    cls.add_method('GetHtMcs30', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate27MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate27MbpsBW40MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs31() [member function]
+    cls.add_method('GetHtMcs31', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate28_9MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate28_9MbpsBW20MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs4() [member function]
+    cls.add_method('GetHtMcs4', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate2_25MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate2_25MbpsBW5MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs5() [member function]
+    cls.add_method('GetHtMcs5', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate30MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate30MbpsBW40MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs6() [member function]
+    cls.add_method('GetHtMcs6', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate36Mbps() [member function]
-    cls.add_method('GetOfdmRate36Mbps', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs7() [member function]
+    cls.add_method('GetHtMcs7', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate39MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate39MbpsBW20MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs8() [member function]
+    cls.add_method('GetHtMcs8', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate3MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate3MbpsBW10MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs9() [member function]
+    cls.add_method('GetHtMcs9', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate3MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate3MbpsBW5MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtPlcpHeaderMode(ns3::WifiMode payloadMode) [member function]
+    cls.add_method('GetHtPlcpHeaderMode', 
                    'ns3::WifiMode', 
-                   [], 
+                   [param('ns3::WifiMode', 'payloadMode')], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate40_5MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate40_5MbpsBW40MHz', 
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetLastRxStartTime() const [member function]
+    cls.add_method('GetLastRxStartTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetLdpc() const [member function]
+    cls.add_method('GetLdpc', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::GetMcs(uint8_t mcs) const [member function]
+    cls.add_method('GetMcs', 
                    'ns3::WifiMode', 
+                   [param('uint8_t', 'mcs')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::WifiModeList ns3::WifiPhy::GetMembershipSelectorModes(uint32_t selector) [member function]
+    cls.add_method('GetMembershipSelectorModes', 
+                   'ns3::WifiModeList', 
+                   [param('uint32_t', 'selector')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::GetMode(uint32_t mode) const [member function]
+    cls.add_method('GetMode', 
+                   'ns3::WifiMode', 
+                   [param('uint32_t', 'mode')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNBssMembershipSelectors() const [member function]
+    cls.add_method('GetNBssMembershipSelectors', 
+                   'uint32_t', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate43_3MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate43_3MbpsBW20MHz', 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetNMcs() const [member function]
+    cls.add_method('GetNMcs', 
+                   'uint8_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNModes() const [member function]
+    cls.add_method('GetNModes', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNTxPower() const [member function]
+    cls.add_method('GetNTxPower', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfReceiveAntennas() const [member function]
+    cls.add_method('GetNumberOfReceiveAntennas', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfTransmitAntennas() const [member function]
+    cls.add_method('GetNumberOfTransmitAntennas', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12Mbps() [member function]
+    cls.add_method('GetOfdmRate12Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate45MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate45MbpsBW40MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12MbpsBW10MHz() [member function]
+    cls.add_method('GetOfdmRate12MbpsBW10MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate48Mbps() [member function]
-    cls.add_method('GetOfdmRate48Mbps', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12MbpsBW5MHz() [member function]
+    cls.add_method('GetOfdmRate12MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate4_5MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate4_5MbpsBW10MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13_5MbpsBW5MHz() [member function]
+    cls.add_method('GetOfdmRate13_5MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate4_5MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate4_5MbpsBW5MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate18Mbps() [member function]
+    cls.add_method('GetOfdmRate18Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate52MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate52MbpsBW20MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate18MbpsBW10MHz() [member function]
+    cls.add_method('GetOfdmRate18MbpsBW10MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate54Mbps() [member function]
-    cls.add_method('GetOfdmRate54Mbps', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate1_5MbpsBW5MHz() [member function]
+    cls.add_method('GetOfdmRate1_5MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate54MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate54MbpsBW40MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate24Mbps() [member function]
+    cls.add_method('GetOfdmRate24Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate57_8MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate57_8MbpsBW20MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate24MbpsBW10MHz() [member function]
+    cls.add_method('GetOfdmRate24MbpsBW10MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate58_5MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate58_5MbpsBW20MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate27MbpsBW10MHz() [member function]
+    cls.add_method('GetOfdmRate27MbpsBW10MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate60MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate60MbpsBW40MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate2_25MbpsBW5MHz() [member function]
+    cls.add_method('GetOfdmRate2_25MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate65MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate65MbpsBW20MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate36Mbps() [member function]
+    cls.add_method('GetOfdmRate36Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate65MbpsBW20MHzShGi() [member function]
-    cls.add_method('GetOfdmRate65MbpsBW20MHzShGi', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate3MbpsBW10MHz() [member function]
+    cls.add_method('GetOfdmRate3MbpsBW10MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6Mbps() [member function]
-    cls.add_method('GetOfdmRate6Mbps', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate3MbpsBW5MHz() [member function]
+    cls.add_method('GetOfdmRate3MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate6MbpsBW10MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate48Mbps() [member function]
+    cls.add_method('GetOfdmRate48Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate6MbpsBW5MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate4_5MbpsBW10MHz() [member function]
+    cls.add_method('GetOfdmRate4_5MbpsBW10MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6_5MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate6_5MbpsBW20MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate4_5MbpsBW5MHz() [member function]
+    cls.add_method('GetOfdmRate4_5MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate72_2MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate72_2MbpsBW20MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate54Mbps() [member function]
+    cls.add_method('GetOfdmRate54Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate7_2MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate7_2MbpsBW20MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6Mbps() [member function]
+    cls.add_method('GetOfdmRate6Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate81MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate81MbpsBW40MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6MbpsBW10MHz() [member function]
+    cls.add_method('GetOfdmRate6MbpsBW10MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate90MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate90MbpsBW40MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6MbpsBW5MHz() [member function]
+    cls.add_method('GetOfdmRate6MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
@@ -6505,34 +6588,49 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetPayloadDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetPayloadDuration(uint32_t size, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
     cls.add_method('GetPayloadDuration', 
                    'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
-    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHeaderDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHeaderDuration(ns3::WifiTxVector txVector, ns3::WifiPreamble preamble) [member function]
     cls.add_method('GetPlcpHeaderDuration', 
                    'ns3::Time', 
-                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   [param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetPlcpHeaderMode(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetPlcpHeaderMode(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble, ns3::WifiTxVector txVector) [member function]
     cls.add_method('GetPlcpHeaderMode', 
                    'ns3::WifiMode', 
-                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txVector')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHtSigHeaderDuration(ns3::WifiPreamble preamble) [member function]
     cls.add_method('GetPlcpHtSigHeaderDuration', 
                    'ns3::Time', 
                    [param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHtTrainingSymbolDuration(ns3::WifiPreamble preamble, ns3::WifiTxVector txvector) [member function]
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHtTrainingSymbolDuration(ns3::WifiPreamble preamble, ns3::WifiTxVector txVector) [member function]
     cls.add_method('GetPlcpHtTrainingSymbolDuration', 
                    'ns3::Time', 
-                   [param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txvector')], 
+                   [param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txVector')], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpPreambleDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpPreambleDuration(ns3::WifiTxVector txVector, ns3::WifiPreamble preamble) [member function]
     cls.add_method('GetPlcpPreambleDuration', 
                    'ns3::Time', 
-                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   [param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpVhtSigA1Duration(ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpVhtSigA1Duration', 
+                   'ns3::Time', 
+                   [param('ns3::WifiPreamble', 'preamble')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpVhtSigA2Duration(ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpVhtSigA2Duration', 
+                   'ns3::Time', 
+                   [param('ns3::WifiPreamble', 'preamble')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpVhtSigBDuration(ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpVhtSigBDuration', 
+                   'ns3::Time', 
+                   [param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetStateDuration() [member function]
     cls.add_method('GetStateDuration', 
@@ -6553,12 +6651,67 @@
     cls.add_method('GetTxPowerStart', 
                    'double', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::TypeId ns3::WifiPhy::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::TypeId ns3::WifiPhy::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs0() [member function]
+    cls.add_method('GetVhtMcs0', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs1() [member function]
+    cls.add_method('GetVhtMcs1', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs2() [member function]
+    cls.add_method('GetVhtMcs2', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs3() [member function]
+    cls.add_method('GetVhtMcs3', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs4() [member function]
+    cls.add_method('GetVhtMcs4', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs5() [member function]
+    cls.add_method('GetVhtMcs5', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs6() [member function]
+    cls.add_method('GetVhtMcs6', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs7() [member function]
+    cls.add_method('GetVhtMcs7', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs8() [member function]
+    cls.add_method('GetVhtMcs8', 
+                   'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs9() [member function]
+    cls.add_method('GetVhtMcs9', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtPlcpHeaderMode(ns3::WifiMode payloadMode) [member function]
+    cls.add_method('GetVhtPlcpHeaderMode', 
+                   'ns3::WifiMode', 
+                   [param('ns3::WifiMode', 'payloadMode')], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsModeSupported(ns3::WifiMode mode) const [member function]
     cls.add_method('IsModeSupported', 
                    'bool', 
@@ -6599,19 +6752,14 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::McsToWifiMode(uint8_t mcs) [member function]
-    cls.add_method('McsToWifiMode', 
-                   'ns3::WifiMode', 
-                   [param('uint8_t', 'mcs')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffRx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble, double signalDbm, double noiseDbm) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffRx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, ns3::WifiPreamble preamble, ns3::WifiTxVector txVector, ns3::mpduInfo aMpdu, ns3::signalNoiseDbm signalNoise) [member function]
     cls.add_method('NotifyMonitorSniffRx', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('bool', 'isShortPreamble'), param('double', 'signalDbm'), param('double', 'noiseDbm')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffTx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble, uint8_t txPower) [member function]
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txVector'), param('ns3::mpduInfo', 'aMpdu'), param('ns3::signalNoiseDbm', 'signalNoise')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffTx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, ns3::WifiPreamble preamble, ns3::WifiTxVector txVector, ns3::mpduInfo aMpdu) [member function]
     cls.add_method('NotifyMonitorSniffTx', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('bool', 'isShortPreamble'), param('uint8_t', 'txPower')])
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txVector'), param('ns3::mpduInfo', 'aMpdu')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyRxBegin(ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('NotifyRxBegin', 
                    'void', 
@@ -6646,21 +6794,21 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, uint8_t packetType) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, uint8_t packetType, uint32_t mpduReferenceNumber) [member function]
     cls.add_method('SendPacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'packetType')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelBonding(bool channelbonding) [member function]
-    cls.add_method('SetChannelBonding', 
-                   'void', 
-                   [param('bool', 'channelbonding')], 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'packetType'), param('uint32_t', 'mpduReferenceNumber')], 
                    is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelNumber(uint16_t id) [member function]
     cls.add_method('SetChannelNumber', 
                    'void', 
                    [param('uint16_t', 'id')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelWidth(uint32_t channelwidth) [member function]
+    cls.add_method('SetChannelWidth', 
+                   'void', 
+                   [param('uint32_t', 'channelwidth')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetFrequency(uint32_t freq) [member function]
     cls.add_method('SetFrequency', 
                    'void', 
@@ -6716,11 +6864,6 @@
                    'void', 
                    [param('ns3::WifiPhyListener *', 'listener')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::WifiModeToMcs(ns3::WifiMode mode) [member function]
-    cls.add_method('WifiModeToMcs', 
-                   'uint32_t', 
-                   [param('ns3::WifiMode', 'mode')], 
-                   is_pure_virtual=True, is_virtual=True)
     return
 
 def register_Ns3WifiRemoteStationManager_methods(root_module, cls):
@@ -6732,10 +6875,10 @@
     cls.add_method('AddAllSupportedModes', 
                    'void', 
                    [param('ns3::Mac48Address', 'address')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddBasicMcs(uint8_t mcs) [member function]
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddBasicMcs(ns3::WifiMode mcs) [member function]
     cls.add_method('AddBasicMcs', 
                    'void', 
-                   [param('uint8_t', 'mcs')])
+                   [param('ns3::WifiMode', 'mcs')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddBasicMode(ns3::WifiMode mode) [member function]
     cls.add_method('AddBasicMode', 
                    'void', 
@@ -6744,10 +6887,14 @@
     cls.add_method('AddStationHtCapabilities', 
                    'void', 
                    [param('ns3::Mac48Address', 'from'), param('ns3::HtCapabilities', 'htcapabilities')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddSupportedMcs(ns3::Mac48Address address, uint8_t mcs) [member function]
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddStationVhtCapabilities(ns3::Mac48Address from, ns3::VhtCapabilities vhtcapabilities) [member function]
+    cls.add_method('AddStationVhtCapabilities', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'from'), param('ns3::VhtCapabilities', 'vhtcapabilities')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddSupportedMcs(ns3::Mac48Address address, ns3::WifiMode mcs) [member function]
     cls.add_method('AddSupportedMcs', 
                    'void', 
-                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'mcs')])
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'mcs')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddSupportedMode(ns3::Mac48Address address, ns3::WifiMode mode) [member function]
     cls.add_method('AddSupportedMode', 
                    'void', 
@@ -6760,9 +6907,9 @@
     cls.add_method('GetAckTxVector', 
                    'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'dataMode')])
-    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetBasicMcs(uint32_t i) const [member function]
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetBasicMcs(uint32_t i) const [member function]
     cls.add_method('GetBasicMcs', 
-                   'uint8_t', 
+                   'ns3::WifiMode', 
                    [param('uint32_t', 'i')], 
                    is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetBasicMode(uint32_t i) const [member function]
@@ -6786,9 +6933,9 @@
     cls.add_method('GetDataTxVector', 
                    'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint32_t', 'fullPacketSize')])
-    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetDefaultMcs() const [member function]
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetDefaultMcs() const [member function]
     cls.add_method('GetDefaultMcs', 
-                   'uint8_t', 
+                   'ns3::WifiMode', 
                    [], 
                    is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetDefaultMode() const [member function]
@@ -6871,6 +7018,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::HasVhtSupported() const [member function]
+    cls.add_method('HasVhtSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::IsAssociated(ns3::Mac48Address address) const [member function]
     cls.add_method('IsAssociated', 
                    'bool', 
@@ -6990,6 +7142,10 @@
     cls.add_method('SetRtsCtsThreshold', 
                    'void', 
                    [param('uint32_t', 'threshold')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetVhtSupported(bool enable) [member function]
+    cls.add_method('SetVhtSupported', 
+                   'void', 
+                   [param('bool', 'enable')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetupMac(ns3::Ptr<ns3::WifiMac> mac) [member function]
     cls.add_method('SetupMac', 
                    'void', 
@@ -7000,11 +7156,25 @@
                    'void', 
                    [param('ns3::Ptr< ns3::WifiPhy >', 'phy')], 
                    is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::UpdateFragmentationThreshold() [member function]
+    cls.add_method('UpdateFragmentationThreshold', 
+                   'void', 
+                   [])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetAggregation(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetAggregation', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetChannelWidth(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetChannelWidth', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetGreenfield(ns3::WifiRemoteStation const * station) const [member function]
     cls.add_method('GetGreenfield', 
                    'bool', 
@@ -7020,9 +7190,9 @@
                    'ns3::Ptr< ns3::WifiMac >', 
                    [], 
                    is_const=True, visibility='protected')
-    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetMcsSupported(ns3::WifiRemoteStation const * station, uint32_t i) const [member function]
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetMcsSupported(ns3::WifiRemoteStation const * station, uint32_t i) const [member function]
     cls.add_method('GetMcsSupported', 
-                   'uint8_t', 
+                   'ns3::WifiMode', 
                    [param('ns3::WifiRemoteStation const *', 'station'), param('uint32_t', 'i')], 
                    is_const=True, visibility='protected')
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNMcsSupported(ns3::WifiRemoteStation const * station) const [member function]
@@ -7080,6 +7250,11 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::DoGetAckTxChannelWidth(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetAckTxChannelWidth', 
+                   'uint32_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetAckTxGuardInterval(ns3::Mac48Address address, ns3::WifiMode ackMode) [member function]
     cls.add_method('DoGetAckTxGuardInterval', 
                    'bool', 
@@ -7105,6 +7280,11 @@
                    'bool', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ackMode')], 
                    visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::DoGetBlockAckTxChannelWidth(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetBlockAckTxChannelWidth', 
+                   'uint32_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetBlockAckTxGuardInterval(ns3::Mac48Address address, ns3::WifiMode blockAckMode) [member function]
     cls.add_method('DoGetBlockAckTxGuardInterval', 
                    'bool', 
@@ -7130,6 +7310,11 @@
                    'bool', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'blockAckMode')], 
                    visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::DoGetCtsTxChannelWidth(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetCtsTxChannelWidth', 
+                   'uint32_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetCtsTxGuardInterval(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
     cls.add_method('DoGetCtsTxGuardInterval', 
                    'bool', 
@@ -7347,6 +7532,10 @@
     cls.add_method('PrintArpCache', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')])
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Remove(ns3::ArpCache::Entry * entry) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::ArpCache::Entry *', 'entry')])
     ## arp-cache.h (module 'internet'): void ns3::ArpCache::SetAliveTimeout(ns3::Time aliveTimeout) [member function]
     cls.add_method('SetAliveTimeout', 
                    'void', 
@@ -7383,6 +7572,10 @@
     cls.add_constructor([param('ns3::ArpCache::Entry const &', 'arg0')])
     ## arp-cache.h (module 'internet'): ns3::ArpCache::Entry::Entry(ns3::ArpCache * arp) [constructor]
     cls.add_constructor([param('ns3::ArpCache *', 'arp')])
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::ClearPendingPacket() [member function]
+    cls.add_method('ClearPendingPacket', 
+                   'void', 
+                   [])
     ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::ClearRetries() [member function]
     cls.add_method('ClearRetries', 
                    'void', 
@@ -7423,6 +7616,10 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## arp-cache.h (module 'internet'): bool ns3::ArpCache::Entry::IsPermanent() [member function]
+    cls.add_method('IsPermanent', 
+                   'bool', 
+                   [])
     ## arp-cache.h (module 'internet'): bool ns3::ArpCache::Entry::IsWaitReply() [member function]
     cls.add_method('IsWaitReply', 
                    'bool', 
@@ -7435,6 +7632,10 @@
     cls.add_method('MarkDead', 
                    'void', 
                    [])
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::MarkPermanent() [member function]
+    cls.add_method('MarkPermanent', 
+                   'void', 
+                   [])
     ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::MarkWaitReply(ns3::Ptr<ns3::Packet> waiting) [member function]
     cls.add_method('MarkWaitReply', 
                    'void', 
@@ -7443,6 +7644,10 @@
     cls.add_method('SetIpv4Address', 
                    'void', 
                    [param('ns3::Ipv4Address', 'destination')])
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::SetMacAddresss(ns3::Address macAddress) [member function]
+    cls.add_method('SetMacAddresss', 
+                   'void', 
+                   [param('ns3::Address', 'macAddress')])
     ## arp-cache.h (module 'internet'): bool ns3::ArpCache::Entry::UpdateWaitReply(ns3::Ptr<ns3::Packet> waiting) [member function]
     cls.add_method('UpdateWaitReply', 
                    'bool', 
@@ -7552,11 +7757,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -7666,10 +7881,10 @@
                    'double', 
                    [], 
                    is_virtual=True)
-    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
     cls.add_method('Interpolate', 
                    'double', 
-                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
                    visibility='private', is_virtual=True)
     ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
     cls.add_method('Validate', 
@@ -7937,6 +8152,16 @@
                    'uint8_t', 
                    [], 
                    is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetAntennaSelectionCapabilities() const [member function]
+    cls.add_method('GetAntennaSelectionCapabilities', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint16_t ns3::HtCapabilities::GetExtendedHtCapabilities() const [member function]
+    cls.add_method('GetExtendedHtCapabilities', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
     ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetGreenfield() const [member function]
     cls.add_method('GetGreenfield', 
                    'uint8_t', 
@@ -7952,11 +8177,31 @@
                    'uint8_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetLSigProtectionSupport() const [member function]
+    cls.add_method('GetLSigProtectionSupport', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetLdpc() const [member function]
     cls.add_method('GetLdpc', 
                    'uint8_t', 
                    [], 
                    is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetMaxAmpduLength() const [member function]
+    cls.add_method('GetMaxAmpduLength', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetMaxAmsduLength() const [member function]
+    cls.add_method('GetMaxAmsduLength', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint16_t ns3::HtCapabilities::GetRxHighestSupportedDataRate() const [member function]
+    cls.add_method('GetRxHighestSupportedDataRate', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
     ## ht-capabilities.h (module 'wifi'): uint8_t * ns3::HtCapabilities::GetRxMcsBitmask() [member function]
     cls.add_method('GetRxMcsBitmask', 
                    'uint8_t *', 
@@ -7971,6 +8216,11 @@
                    'uint8_t', 
                    [], 
                    is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetShortGuardInterval40() const [member function]
+    cls.add_method('GetShortGuardInterval40', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetSupportedChannelWidth() const [member function]
     cls.add_method('GetSupportedChannelWidth', 
                    'uint8_t', 
@@ -7986,6 +8236,21 @@
                    'uint64_t', 
                    [], 
                    is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint32_t ns3::HtCapabilities::GetTxBfCapabilities() const [member function]
+    cls.add_method('GetTxBfCapabilities', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetTxMaxNSpatialStreams() const [member function]
+    cls.add_method('GetTxMaxNSpatialStreams', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetTxMcsSetDefined() const [member function]
+    cls.add_method('GetTxMcsSetDefined', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## ht-capabilities.h (module 'wifi'): bool ns3::HtCapabilities::IsSupportedMcs(uint8_t mcs) [member function]
     cls.add_method('IsSupportedMcs', 
                    'bool', 
@@ -8004,6 +8269,14 @@
     cls.add_method('SetAmpduParameters', 
                    'void', 
                    [param('uint8_t', 'ctrl')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetAntennaSelectionCapabilities(uint8_t ctrl) [member function]
+    cls.add_method('SetAntennaSelectionCapabilities', 
+                   'void', 
+                   [param('uint8_t', 'ctrl')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetExtendedHtCapabilities(uint16_t ctrl) [member function]
+    cls.add_method('SetExtendedHtCapabilities', 
+                   'void', 
+                   [param('uint16_t', 'ctrl')])
     ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetGreenfield(uint8_t greenfield) [member function]
     cls.add_method('SetGreenfield', 
                    'void', 
@@ -8016,10 +8289,26 @@
     cls.add_method('SetHtSupported', 
                    'void', 
                    [param('uint8_t', 'htsupported')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetLSigProtectionSupport(uint8_t lsigprotection) [member function]
+    cls.add_method('SetLSigProtectionSupport', 
+                   'void', 
+                   [param('uint8_t', 'lsigprotection')])
     ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetLdpc(uint8_t ldpc) [member function]
     cls.add_method('SetLdpc', 
                    'void', 
                    [param('uint8_t', 'ldpc')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetMaxAmpduLength(uint8_t maxampdulength) [member function]
+    cls.add_method('SetMaxAmpduLength', 
+                   'void', 
+                   [param('uint8_t', 'maxampdulength')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetMaxAmsduLength(uint8_t maxamsdulength) [member function]
+    cls.add_method('SetMaxAmsduLength', 
+                   'void', 
+                   [param('uint8_t', 'maxamsdulength')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetRxHighestSupportedDataRate(uint16_t maxsupportedrate) [member function]
+    cls.add_method('SetRxHighestSupportedDataRate', 
+                   'void', 
+                   [param('uint16_t', 'maxsupportedrate')])
     ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetRxMcsBitmask(uint8_t index) [member function]
     cls.add_method('SetRxMcsBitmask', 
                    'void', 
@@ -8028,6 +8317,10 @@
     cls.add_method('SetShortGuardInterval20', 
                    'void', 
                    [param('uint8_t', 'shortguardinterval')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetShortGuardInterval40(uint8_t shortguardinterval) [member function]
+    cls.add_method('SetShortGuardInterval40', 
+                   'void', 
+                   [param('uint8_t', 'shortguardinterval')])
     ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetSupportedChannelWidth(uint8_t supportedchannelwidth) [member function]
     cls.add_method('SetSupportedChannelWidth', 
                    'void', 
@@ -8036,6 +8329,18 @@
     cls.add_method('SetSupportedMcsSet', 
                    'void', 
                    [param('uint64_t', 'ctrl1'), param('uint64_t', 'ctrl2')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetTxBfCapabilities(uint32_t ctrl) [member function]
+    cls.add_method('SetTxBfCapabilities', 
+                   'void', 
+                   [param('uint32_t', 'ctrl')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetTxMaxNSpatialStreams(uint8_t maxtxspatialstreams) [member function]
+    cls.add_method('SetTxMaxNSpatialStreams', 
+                   'void', 
+                   [param('uint8_t', 'maxtxspatialstreams')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetTxMcsSetDefined(uint8_t txmcssetdefined) [member function]
+    cls.add_method('SetTxMcsSetDefined', 
+                   'void', 
+                   [param('uint8_t', 'txmcssetdefined')])
     return
 
 def register_Ns3HtCapabilitiesChecker_methods(root_module, cls):
@@ -9845,11 +10150,6 @@
     cls.add_method('SetNode', 
                    'void', 
                    [param('ns3::Ptr< ns3::Node >', 'node')])
-    ## tcp-l4-protocol.h (module 'internet'): int ns3::TcpL4Protocol::GetProtocolNumber() const [member function]
-    cls.add_method('GetProtocolNumber', 
-                   'int', 
-                   [], 
-                   is_const=True, is_virtual=True)
     ## tcp-l4-protocol.h (module 'internet'): ns3::Ptr<ns3::Socket> ns3::TcpL4Protocol::CreateSocket() [member function]
     cls.add_method('CreateSocket', 
                    'ns3::Ptr< ns3::Socket >', 
@@ -9898,6 +10198,19 @@
     cls.add_method('Allocate6', 
                    'ns3::Ipv6EndPoint *', 
                    [param('ns3::Ipv6Address', 'localAddress'), param('uint16_t', 'localPort'), param('ns3::Ipv6Address', 'peerAddress'), param('uint16_t', 'peerPort')])
+    ## tcp-l4-protocol.h (module 'internet'): void ns3::TcpL4Protocol::SendPacket(ns3::Ptr<ns3::Packet> pkt, ns3::TcpHeader const & outgoing, ns3::Address const & saddr, ns3::Address const & daddr, ns3::Ptr<ns3::NetDevice> oif=0) const [member function]
+    cls.add_method('SendPacket', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'pkt'), param('ns3::TcpHeader const &', 'outgoing'), param('ns3::Address const &', 'saddr'), param('ns3::Address const &', 'daddr'), param('ns3::Ptr< ns3::NetDevice >', 'oif', default_value='0')], 
+                   is_const=True)
+    ## tcp-l4-protocol.h (module 'internet'): void ns3::TcpL4Protocol::AddSocket(ns3::Ptr<ns3::TcpSocketBase> socket) [member function]
+    cls.add_method('AddSocket', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TcpSocketBase >', 'socket')])
+    ## tcp-l4-protocol.h (module 'internet'): bool ns3::TcpL4Protocol::RemoveSocket(ns3::Ptr<ns3::TcpSocketBase> socket) [member function]
+    cls.add_method('RemoveSocket', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::TcpSocketBase >', 'socket')])
     ## tcp-l4-protocol.h (module 'internet'): void ns3::TcpL4Protocol::DeAllocate(ns3::Ipv4EndPoint * endPoint) [member function]
     cls.add_method('DeAllocate', 
                    'void', 
@@ -9906,23 +10219,15 @@
     cls.add_method('DeAllocate', 
                    'void', 
                    [param('ns3::Ipv6EndPoint *', 'endPoint')])
-    ## tcp-l4-protocol.h (module 'internet'): void ns3::TcpL4Protocol::Send(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address saddr, ns3::Ipv4Address daddr, uint16_t sport, uint16_t dport, ns3::Ptr<ns3::NetDevice> oif=0) [member function]
-    cls.add_method('Send', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'saddr'), param('ns3::Ipv4Address', 'daddr'), param('uint16_t', 'sport'), param('uint16_t', 'dport'), param('ns3::Ptr< ns3::NetDevice >', 'oif', default_value='0')])
-    ## tcp-l4-protocol.h (module 'internet'): void ns3::TcpL4Protocol::Send(ns3::Ptr<ns3::Packet> packet, ns3::Ipv6Address saddr, ns3::Ipv6Address daddr, uint16_t sport, uint16_t dport, ns3::Ptr<ns3::NetDevice> oif=0) [member function]
-    cls.add_method('Send', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv6Address', 'saddr'), param('ns3::Ipv6Address', 'daddr'), param('uint16_t', 'sport'), param('uint16_t', 'dport'), param('ns3::Ptr< ns3::NetDevice >', 'oif', default_value='0')])
-    ## tcp-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::TcpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, ns3::Ptr<ns3::Ipv4Interface> incomingInterface) [member function]
+    ## tcp-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::TcpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & incomingIpHeader, ns3::Ptr<ns3::Ipv4Interface> incomingInterface) [member function]
     cls.add_method('Receive', 
                    'ns3::IpL4Protocol::RxStatus', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::Ipv4Interface >', 'incomingInterface')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'incomingIpHeader'), param('ns3::Ptr< ns3::Ipv4Interface >', 'incomingInterface')], 
                    is_virtual=True)
-    ## tcp-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::TcpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & header, ns3::Ptr<ns3::Ipv6Interface> incomingInterface) [member function]
+    ## tcp-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::TcpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & incomingIpHeader, ns3::Ptr<ns3::Ipv6Interface> incomingInterface) [member function]
     cls.add_method('Receive', 
                    'ns3::IpL4Protocol::RxStatus', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Header const &', 'header'), param('ns3::Ptr< ns3::Ipv6Interface >', 'incomingInterface')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Header const &', 'incomingIpHeader'), param('ns3::Ptr< ns3::Ipv6Interface >', 'incomingInterface')], 
                    is_virtual=True)
     ## tcp-l4-protocol.h (module 'internet'): void ns3::TcpL4Protocol::ReceiveIcmp(ns3::Ipv4Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo, ns3::Ipv4Address payloadSource, ns3::Ipv4Address payloadDestination, uint8_t const * payload) [member function]
     cls.add_method('ReceiveIcmp', 
@@ -9944,6 +10249,11 @@
                    'void', 
                    [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::Ipv6Address, ns3::Ipv6Address, unsigned char, ns3::Ptr< ns3::Ipv6Route >, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
                    is_virtual=True)
+    ## tcp-l4-protocol.h (module 'internet'): int ns3::TcpL4Protocol::GetProtocolNumber() const [member function]
+    cls.add_method('GetProtocolNumber', 
+                   'int', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## tcp-l4-protocol.h (module 'internet'): ns3::Callback<void, ns3::Ptr<ns3::Packet>, ns3::Ipv4Address, ns3::Ipv4Address, unsigned char, ns3::Ptr<ns3::Ipv4Route>, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::TcpL4Protocol::GetDownTarget() const [member function]
     cls.add_method('GetDownTarget', 
                    'ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::Ipv4Address, ns3::Ipv4Address, unsigned char, ns3::Ptr< ns3::Ipv4Route >, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
@@ -9964,6 +10274,16 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
+    ## tcp-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::TcpL4Protocol::PacketReceived(ns3::Ptr<ns3::Packet> packet, ns3::TcpHeader & incomingTcpHeader, ns3::Address const & source, ns3::Address const & destination) [member function]
+    cls.add_method('PacketReceived', 
+                   'ns3::IpL4Protocol::RxStatus', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::TcpHeader &', 'incomingTcpHeader'), param('ns3::Address const &', 'source'), param('ns3::Address const &', 'destination')], 
+                   visibility='protected')
+    ## tcp-l4-protocol.h (module 'internet'): void ns3::TcpL4Protocol::NoEndPointsFound(ns3::TcpHeader const & incomingHeader, ns3::Address const & incomingSAddr, ns3::Address const & incomingDAddr) [member function]
+    cls.add_method('NoEndPointsFound', 
+                   'void', 
+                   [param('ns3::TcpHeader const &', 'incomingHeader'), param('ns3::Address const &', 'incomingSAddr'), param('ns3::Address const &', 'incomingDAddr')], 
+                   visibility='protected')
     return
 
 def register_Ns3TimeValue_methods(root_module, cls):
@@ -10211,6 +10531,237 @@
                    [param('uint64_t const &', 'value')])
     return
 
+def register_Ns3VhtCapabilities_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilities::VhtCapabilities(ns3::VhtCapabilities const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::VhtCapabilities const &', 'arg0')])
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilities::VhtCapabilities() [constructor]
+    cls.add_constructor([])
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::DeserializeInformationField(ns3::Buffer::Iterator start, uint8_t length) [member function]
+    cls.add_method('DeserializeInformationField', 
+                   'uint8_t', 
+                   [param('ns3::Buffer::Iterator', 'start'), param('uint8_t', 'length')], 
+                   is_virtual=True)
+    ## vht-capabilities.h (module 'wifi'): ns3::WifiInformationElementId ns3::VhtCapabilities::ElementId() const [member function]
+    cls.add_method('ElementId', 
+                   'ns3::WifiInformationElementId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::GetInformationFieldSize() const [member function]
+    cls.add_method('GetInformationFieldSize', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::GetMaxAmpduLengthExponent() const [member function]
+    cls.add_method('GetMaxAmpduLengthExponent', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::GetMaxMpduLength() const [member function]
+    cls.add_method('GetMaxMpduLength', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint16_t ns3::VhtCapabilities::GetRxHighestSupportedLgiDataRate() const [member function]
+    cls.add_method('GetRxHighestSupportedLgiDataRate', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::GetRxLdpc() const [member function]
+    cls.add_method('GetRxLdpc', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint16_t ns3::VhtCapabilities::GetRxMcsMap() const [member function]
+    cls.add_method('GetRxMcsMap', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::GetRxStbc() const [member function]
+    cls.add_method('GetRxStbc', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint16_t ns3::VhtCapabilities::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::GetShortGuardIntervalFor160Mhz() const [member function]
+    cls.add_method('GetShortGuardIntervalFor160Mhz', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::GetShortGuardIntervalFor80Mhz() const [member function]
+    cls.add_method('GetShortGuardIntervalFor80Mhz', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::GetSupportedChannelWidthSet() const [member function]
+    cls.add_method('GetSupportedChannelWidthSet', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint64_t ns3::VhtCapabilities::GetSupportedMcsAndNssSet() const [member function]
+    cls.add_method('GetSupportedMcsAndNssSet', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint16_t ns3::VhtCapabilities::GetTxHighestSupportedLgiDataRate() const [member function]
+    cls.add_method('GetTxHighestSupportedLgiDataRate', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint16_t ns3::VhtCapabilities::GetTxMcsMap() const [member function]
+    cls.add_method('GetTxMcsMap', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::GetTxStbc() const [member function]
+    cls.add_method('GetTxStbc', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint32_t ns3::VhtCapabilities::GetVhtCapabilitiesInfo() const [member function]
+    cls.add_method('GetVhtCapabilitiesInfo', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): bool ns3::VhtCapabilities::IsSupportedMcs(uint8_t mcs, uint8_t Nss) const [member function]
+    cls.add_method('IsSupportedMcs', 
+                   'bool', 
+                   [param('uint8_t', 'mcs'), param('uint8_t', 'Nss')], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): bool ns3::VhtCapabilities::IsSupportedRxMcs(uint8_t mcs) const [member function]
+    cls.add_method('IsSupportedRxMcs', 
+                   'bool', 
+                   [param('uint8_t', 'mcs')], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): bool ns3::VhtCapabilities::IsSupportedTxMcs(uint8_t mcs) const [member function]
+    cls.add_method('IsSupportedTxMcs', 
+                   'bool', 
+                   [param('uint8_t', 'mcs')], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): ns3::Buffer::Iterator ns3::VhtCapabilities::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'ns3::Buffer::Iterator', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SerializeInformationField(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('SerializeInformationField', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetMaxAmpduLengthExponent(uint8_t exponent) [member function]
+    cls.add_method('SetMaxAmpduLengthExponent', 
+                   'void', 
+                   [param('uint8_t', 'exponent')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetMaxMpduLength(uint8_t length) [member function]
+    cls.add_method('SetMaxMpduLength', 
+                   'void', 
+                   [param('uint8_t', 'length')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetRxHighestSupportedLgiDataRate(uint16_t supporteddatarate) [member function]
+    cls.add_method('SetRxHighestSupportedLgiDataRate', 
+                   'void', 
+                   [param('uint16_t', 'supporteddatarate')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetRxLdpc(uint8_t rxldpc) [member function]
+    cls.add_method('SetRxLdpc', 
+                   'void', 
+                   [param('uint8_t', 'rxldpc')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetRxMcsMap(uint16_t map) [member function]
+    cls.add_method('SetRxMcsMap', 
+                   'void', 
+                   [param('uint16_t', 'map')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetRxMcsMap(uint8_t mcs, uint8_t nss) [member function]
+    cls.add_method('SetRxMcsMap', 
+                   'void', 
+                   [param('uint8_t', 'mcs'), param('uint8_t', 'nss')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetRxStbc(uint8_t rxstbc) [member function]
+    cls.add_method('SetRxStbc', 
+                   'void', 
+                   [param('uint8_t', 'rxstbc')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetShortGuardIntervalFor160Mhz(uint8_t shortguardinterval) [member function]
+    cls.add_method('SetShortGuardIntervalFor160Mhz', 
+                   'void', 
+                   [param('uint8_t', 'shortguardinterval')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetShortGuardIntervalFor80Mhz(uint8_t shortguardinterval) [member function]
+    cls.add_method('SetShortGuardIntervalFor80Mhz', 
+                   'void', 
+                   [param('uint8_t', 'shortguardinterval')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetSupportedChannelWidthSet(uint8_t channelwidthset) [member function]
+    cls.add_method('SetSupportedChannelWidthSet', 
+                   'void', 
+                   [param('uint8_t', 'channelwidthset')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetSupportedMcsAndNssSet(uint64_t ctrl) [member function]
+    cls.add_method('SetSupportedMcsAndNssSet', 
+                   'void', 
+                   [param('uint64_t', 'ctrl')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetTxHighestSupportedLgiDataRate(uint16_t supporteddatarate) [member function]
+    cls.add_method('SetTxHighestSupportedLgiDataRate', 
+                   'void', 
+                   [param('uint16_t', 'supporteddatarate')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetTxMcsMap(uint16_t map) [member function]
+    cls.add_method('SetTxMcsMap', 
+                   'void', 
+                   [param('uint16_t', 'map')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetTxMcsMap(uint8_t mcs, uint8_t nss) [member function]
+    cls.add_method('SetTxMcsMap', 
+                   'void', 
+                   [param('uint8_t', 'mcs'), param('uint8_t', 'nss')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetTxStbc(uint8_t txstbc) [member function]
+    cls.add_method('SetTxStbc', 
+                   'void', 
+                   [param('uint8_t', 'txstbc')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetVhtCapabilitiesInfo(uint32_t ctrl) [member function]
+    cls.add_method('SetVhtCapabilitiesInfo', 
+                   'void', 
+                   [param('uint32_t', 'ctrl')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetVhtSupported(uint8_t vhtsupported) [member function]
+    cls.add_method('SetVhtSupported', 
+                   'void', 
+                   [param('uint8_t', 'vhtsupported')])
+    return
+
+def register_Ns3VhtCapabilitiesChecker_methods(root_module, cls):
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilitiesChecker::VhtCapabilitiesChecker() [constructor]
+    cls.add_constructor([])
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilitiesChecker::VhtCapabilitiesChecker(ns3::VhtCapabilitiesChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::VhtCapabilitiesChecker const &', 'arg0')])
+    return
+
+def register_Ns3VhtCapabilitiesValue_methods(root_module, cls):
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilitiesValue::VhtCapabilitiesValue() [constructor]
+    cls.add_constructor([])
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilitiesValue::VhtCapabilitiesValue(ns3::VhtCapabilitiesValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::VhtCapabilitiesValue const &', 'arg0')])
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilitiesValue::VhtCapabilitiesValue(ns3::VhtCapabilities const & value) [constructor]
+    cls.add_constructor([param('ns3::VhtCapabilities const &', 'value')])
+    ## vht-capabilities.h (module 'wifi'): ns3::Ptr<ns3::AttributeValue> ns3::VhtCapabilitiesValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## vht-capabilities.h (module 'wifi'): bool ns3::VhtCapabilitiesValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilities ns3::VhtCapabilitiesValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::VhtCapabilities', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): std::string ns3::VhtCapabilitiesValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilitiesValue::Set(ns3::VhtCapabilities const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::VhtCapabilities const &', 'value')])
+    return
+
 def register_Ns3WifiModeChecker_methods(root_module, cls):
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeChecker::WifiModeChecker() [constructor]
     cls.add_constructor([])
@@ -13307,6 +13858,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     register_functions_ns3_dsr(module.get_submodule('dsr'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
@@ -13321,6 +13873,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def register_functions_ns3_dsr(module, root_module):
     return
 
diff -Naur ns-3.23/src/dsr/bindings/modulegen__gcc_LP64.py ns-3.24/src/dsr/bindings/modulegen__gcc_LP64.py
--- ns-3.23/src/dsr/bindings/modulegen__gcc_LP64.py	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/dsr/bindings/modulegen__gcc_LP64.py	2015-09-15 11:18:44.000000000 -0700
@@ -23,11 +23,11 @@
     ## wifi-mac-header.h (module 'wifi'): ns3::WifiMacType [enumeration]
     module.add_enum('WifiMacType', ['WIFI_MAC_CTL_RTS', 'WIFI_MAC_CTL_CTS', 'WIFI_MAC_CTL_ACK', 'WIFI_MAC_CTL_BACKREQ', 'WIFI_MAC_CTL_BACKRESP', 'WIFI_MAC_CTL_CTLWRAPPER', 'WIFI_MAC_MGT_BEACON', 'WIFI_MAC_MGT_ASSOCIATION_REQUEST', 'WIFI_MAC_MGT_ASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_DISASSOCIATION', 'WIFI_MAC_MGT_REASSOCIATION_REQUEST', 'WIFI_MAC_MGT_REASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_PROBE_REQUEST', 'WIFI_MAC_MGT_PROBE_RESPONSE', 'WIFI_MAC_MGT_AUTHENTICATION', 'WIFI_MAC_MGT_DEAUTHENTICATION', 'WIFI_MAC_MGT_ACTION', 'WIFI_MAC_MGT_ACTION_NO_ACK', 'WIFI_MAC_MGT_MULTIHOP_ACTION', 'WIFI_MAC_DATA', 'WIFI_MAC_DATA_CFACK', 'WIFI_MAC_DATA_CFPOLL', 'WIFI_MAC_DATA_CFACK_CFPOLL', 'WIFI_MAC_DATA_NULL', 'WIFI_MAC_DATA_NULL_CFACK', 'WIFI_MAC_DATA_NULL_CFPOLL', 'WIFI_MAC_DATA_NULL_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA', 'WIFI_MAC_QOSDATA_CFACK', 'WIFI_MAC_QOSDATA_CFPOLL', 'WIFI_MAC_QOSDATA_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA_NULL', 'WIFI_MAC_QOSDATA_NULL_CFPOLL', 'WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL'], import_from_module='ns.wifi')
     ## wifi-preamble.h (module 'wifi'): ns3::WifiPreamble [enumeration]
-    module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF', 'WIFI_PREAMBLE_NONE'], import_from_module='ns.wifi')
+    module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF', 'WIFI_PREAMBLE_VHT', 'WIFI_PREAMBLE_NONE'], import_from_module='ns.wifi')
     ## wifi-mode.h (module 'wifi'): ns3::WifiModulationClass [enumeration]
-    module.add_enum('WifiModulationClass', ['WIFI_MOD_CLASS_UNKNOWN', 'WIFI_MOD_CLASS_IR', 'WIFI_MOD_CLASS_FHSS', 'WIFI_MOD_CLASS_DSSS', 'WIFI_MOD_CLASS_ERP_PBCC', 'WIFI_MOD_CLASS_DSSS_OFDM', 'WIFI_MOD_CLASS_ERP_OFDM', 'WIFI_MOD_CLASS_OFDM', 'WIFI_MOD_CLASS_HT'], import_from_module='ns.wifi')
+    module.add_enum('WifiModulationClass', ['WIFI_MOD_CLASS_UNKNOWN', 'WIFI_MOD_CLASS_IR', 'WIFI_MOD_CLASS_FHSS', 'WIFI_MOD_CLASS_DSSS', 'WIFI_MOD_CLASS_HR_DSSS', 'WIFI_MOD_CLASS_ERP_PBCC', 'WIFI_MOD_CLASS_DSSS_OFDM', 'WIFI_MOD_CLASS_ERP_OFDM', 'WIFI_MOD_CLASS_OFDM', 'WIFI_MOD_CLASS_HT', 'WIFI_MOD_CLASS_VHT'], import_from_module='ns.wifi')
     ## wifi-phy-standard.h (module 'wifi'): ns3::WifiPhyStandard [enumeration]
-    module.add_enum('WifiPhyStandard', ['WIFI_PHY_STANDARD_80211a', 'WIFI_PHY_STANDARD_80211b', 'WIFI_PHY_STANDARD_80211g', 'WIFI_PHY_STANDARD_80211_10MHZ', 'WIFI_PHY_STANDARD_80211_5MHZ', 'WIFI_PHY_STANDARD_holland', 'WIFI_PHY_STANDARD_80211n_2_4GHZ', 'WIFI_PHY_STANDARD_80211n_5GHZ'], import_from_module='ns.wifi')
+    module.add_enum('WifiPhyStandard', ['WIFI_PHY_STANDARD_80211a', 'WIFI_PHY_STANDARD_80211b', 'WIFI_PHY_STANDARD_80211g', 'WIFI_PHY_STANDARD_80211_10MHZ', 'WIFI_PHY_STANDARD_80211_5MHZ', 'WIFI_PHY_STANDARD_holland', 'WIFI_PHY_STANDARD_80211n_2_4GHZ', 'WIFI_PHY_STANDARD_80211n_5GHZ', 'WIFI_PHY_STANDARD_80211ac'], import_from_module='ns.wifi')
     ## qos-utils.h (module 'wifi'): ns3::AcIndex [enumeration]
     module.add_enum('AcIndex', ['AC_BE', 'AC_BK', 'AC_VI', 'AC_VO', 'AC_BE_NQOS', 'AC_UNDEF'], import_from_module='ns.wifi')
     ## wifi-mode.h (module 'wifi'): ns3::WifiCodeRate [enumeration]
@@ -130,6 +130,8 @@
     root_module['ns3::Mac48Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## node-container.h (module 'network'): ns3::NodeContainer [class]
     module.add_class('NodeContainer', import_from_module='ns.network')
+    ## non-copyable.h (module 'core'): ns3::NonCopyable [class]
+    module.add_class('NonCopyable', destructor_visibility='protected', import_from_module='ns.core')
     ## object-base.h (module 'core'): ns3::ObjectBase [class]
     module.add_class('ObjectBase', allow_subclassing=True, import_from_module='ns.core')
     ## object.h (module 'core'): ns3::ObjectDeleter [struct]
@@ -204,6 +206,10 @@
     module.add_class('int64x64_t', import_from_module='ns.core')
     ## int64x64-double.h (module 'core'): ns3::int64x64_t::impl_type [enumeration]
     module.add_enum('impl_type', ['int128_impl', 'cairo_impl', 'ld_impl'], outer_class=root_module['ns3::int64x64_t'], import_from_module='ns.core')
+    ## wifi-phy.h (module 'wifi'): ns3::mpduInfo [struct]
+    module.add_class('mpduInfo', import_from_module='ns.wifi')
+    ## wifi-phy.h (module 'wifi'): ns3::signalNoiseDbm [struct]
+    module.add_class('signalNoiseDbm', import_from_module='ns.wifi')
     ## chunk.h (module 'network'): ns3::Chunk [class]
     module.add_class('Chunk', import_from_module='ns.network', parent=root_module['ns3::ObjectBase'])
     ## header.h (module 'network'): ns3::Header [class]
@@ -442,6 +448,12 @@
     module.add_class('UdpL4Protocol', import_from_module='ns.internet', parent=root_module['ns3::IpL4Protocol'])
     ## uinteger.h (module 'core'): ns3::UintegerValue [class]
     module.add_class('UintegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilities [class]
+    module.add_class('VhtCapabilities', import_from_module='ns.wifi', parent=root_module['ns3::WifiInformationElement'])
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilitiesChecker [class]
+    module.add_class('VhtCapabilitiesChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilitiesValue [class]
+    module.add_class('VhtCapabilitiesValue', import_from_module='ns.wifi', parent=root_module['ns3::AttributeValue'])
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeChecker [class]
     module.add_class('WifiModeChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeValue [class]
@@ -453,24 +465,26 @@
     ## icmpv4-l4-protocol.h (module 'internet'): ns3::Icmpv4L4Protocol [class]
     module.add_class('Icmpv4L4Protocol', import_from_module='ns.internet', parent=root_module['ns3::IpL4Protocol'])
     module.add_container('ns3::WifiModeList', 'ns3::WifiMode', container_type=u'vector')
-    module.add_container('ns3::WifiMcsList', 'unsigned char', container_type=u'vector')
     module.add_container('std::list< ns3::Ptr< ns3::Packet > >', 'ns3::Ptr< ns3::Packet >', container_type=u'list')
     module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type=u'map')
-    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >', u'ns3::WifiMcsListIterator')
-    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >*', u'ns3::WifiMcsListIterator*')
-    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >&', u'ns3::WifiMcsListIterator&')
-    typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >', u'ns3::WifiMcsList')
-    typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >*', u'ns3::WifiMcsList*')
-    typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >&', u'ns3::WifiMcsList&')
+    typehandlers.add_type_alias(u'ns3::SequenceNumber< short unsigned int, short int >', u'ns3::SequenceNumber16')
+    typehandlers.add_type_alias(u'ns3::SequenceNumber< short unsigned int, short int >*', u'ns3::SequenceNumber16*')
+    typehandlers.add_type_alias(u'ns3::SequenceNumber< short unsigned int, short int >&', u'ns3::SequenceNumber16&')
+    typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned int, int >', u'ns3::SequenceNumber32')
+    typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned int, int >*', u'ns3::SequenceNumber32*')
+    typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned int, int >&', u'ns3::SequenceNumber32&')
     typehandlers.add_type_alias(u'uint8_t', u'ns3::WifiInformationElementId')
     typehandlers.add_type_alias(u'uint8_t*', u'ns3::WifiInformationElementId*')
     typehandlers.add_type_alias(u'uint8_t&', u'ns3::WifiInformationElementId&')
-    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >', u'ns3::WifiModeListIterator')
-    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >*', u'ns3::WifiModeListIterator*')
-    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >&', u'ns3::WifiModeListIterator&')
+    typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >', u'ns3::SequenceNumber8')
+    typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >*', u'ns3::SequenceNumber8*')
+    typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >&', u'ns3::SequenceNumber8&')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >', u'ns3::WifiModeList')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >*', u'ns3::WifiModeList*')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >&', u'ns3::WifiModeList&')
+    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >', u'ns3::WifiModeListIterator')
+    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >*', u'ns3::WifiModeListIterator*')
+    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >&', u'ns3::WifiModeListIterator&')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -484,6 +498,12 @@
     register_types_ns3_Hash(nested_module)
     
     
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
+    
     ## Register a nested module for the namespace dsr
     
     nested_module = module.add_cpp_namespace('dsr')
@@ -530,6 +550,16 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *', u'ns3::TracedValueCallback::SequenceNumber32')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) **', u'ns3::TracedValueCallback::SequenceNumber32*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *&', u'ns3::TracedValueCallback::SequenceNumber32&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_types_ns3_dsr(module):
     root_module = module.get_root()
     
@@ -688,6 +718,7 @@
     register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
     register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
     register_Ns3NodeContainer_methods(root_module, root_module['ns3::NodeContainer'])
+    register_Ns3NonCopyable_methods(root_module, root_module['ns3::NonCopyable'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
     register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
     register_Ns3ObjectFactory_methods(root_module, root_module['ns3::ObjectFactory'])
@@ -718,6 +749,8 @@
     register_Ns3WifiTxVector_methods(root_module, root_module['ns3::WifiTxVector'])
     register_Ns3Empty_methods(root_module, root_module['ns3::empty'])
     register_Ns3Int64x64_t_methods(root_module, root_module['ns3::int64x64_t'])
+    register_Ns3MpduInfo_methods(root_module, root_module['ns3::mpduInfo'])
+    register_Ns3SignalNoiseDbm_methods(root_module, root_module['ns3::signalNoiseDbm'])
     register_Ns3Chunk_methods(root_module, root_module['ns3::Chunk'])
     register_Ns3Header_methods(root_module, root_module['ns3::Header'])
     register_Ns3Icmpv4DestinationUnreachable_methods(root_module, root_module['ns3::Icmpv4DestinationUnreachable'])
@@ -821,6 +854,9 @@
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
     register_Ns3UdpL4Protocol_methods(root_module, root_module['ns3::UdpL4Protocol'])
     register_Ns3UintegerValue_methods(root_module, root_module['ns3::UintegerValue'])
+    register_Ns3VhtCapabilities_methods(root_module, root_module['ns3::VhtCapabilities'])
+    register_Ns3VhtCapabilitiesChecker_methods(root_module, root_module['ns3::VhtCapabilitiesChecker'])
+    register_Ns3VhtCapabilitiesValue_methods(root_module, root_module['ns3::VhtCapabilitiesValue'])
     register_Ns3WifiModeChecker_methods(root_module, root_module['ns3::WifiModeChecker'])
     register_Ns3WifiModeValue_methods(root_module, root_module['ns3::WifiModeValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
@@ -1001,17 +1037,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -1033,11 +1069,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -1047,16 +1078,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -1294,14 +1315,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -1362,11 +1387,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3DsrHelper_methods(root_module, cls):
@@ -2310,6 +2330,12 @@
                    is_const=True)
     return
 
+def register_Ns3NonCopyable_methods(root_module, cls):
+    ## non-copyable.h (module 'core'): ns3::NonCopyable::NonCopyable() [constructor]
+    cls.add_constructor([], 
+                        visibility='protected')
+    return
+
 def register_Ns3ObjectBase_methods(root_module, cls):
     ## object-base.h (module 'core'): ns3::ObjectBase::ObjectBase() [constructor]
     cls.add_constructor([])
@@ -2603,7 +2629,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -2695,10 +2721,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -3133,24 +3159,24 @@
     cls.add_constructor([])
     ## wifi-mode.h (module 'wifi'): ns3::WifiMode::WifiMode(std::string name) [constructor]
     cls.add_constructor([param('std::string', 'name')])
-    ## wifi-mode.h (module 'wifi'): uint32_t ns3::WifiMode::GetBandwidth() const [member function]
-    cls.add_method('GetBandwidth', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## wifi-mode.h (module 'wifi'): ns3::WifiCodeRate ns3::WifiMode::GetCodeRate() const [member function]
+    ## wifi-mode.h (module 'wifi'): ns3::WifiCodeRate ns3::WifiMode::GetCodeRate(uint8_t nss) const [member function]
     cls.add_method('GetCodeRate', 
                    'ns3::WifiCodeRate', 
-                   [], 
+                   [param('uint8_t', 'nss')], 
                    is_const=True)
-    ## wifi-mode.h (module 'wifi'): uint8_t ns3::WifiMode::GetConstellationSize() const [member function]
+    ## wifi-mode.h (module 'wifi'): uint16_t ns3::WifiMode::GetConstellationSize(uint8_t nss) const [member function]
     cls.add_method('GetConstellationSize', 
-                   'uint8_t', 
-                   [], 
+                   'uint16_t', 
+                   [param('uint8_t', 'nss')], 
                    is_const=True)
-    ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetDataRate() const [member function]
+    ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetDataRate(uint32_t channelWidth, bool isShortGuardInterval, uint8_t nss) const [member function]
     cls.add_method('GetDataRate', 
                    'uint64_t', 
+                   [param('uint32_t', 'channelWidth'), param('bool', 'isShortGuardInterval'), param('uint8_t', 'nss')], 
+                   is_const=True)
+    ## wifi-mode.h (module 'wifi'): uint8_t ns3::WifiMode::GetMcsValue() const [member function]
+    cls.add_method('GetMcsValue', 
+                   'uint8_t', 
                    [], 
                    is_const=True)
     ## wifi-mode.h (module 'wifi'): ns3::WifiModulationClass ns3::WifiMode::GetModulationClass() const [member function]
@@ -3158,10 +3184,10 @@
                    'ns3::WifiModulationClass', 
                    [], 
                    is_const=True)
-    ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetPhyRate() const [member function]
+    ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetPhyRate(uint32_t channelWidth, bool isShortGuardInterval, uint8_t nss) const [member function]
     cls.add_method('GetPhyRate', 
                    'uint64_t', 
-                   [], 
+                   [param('uint32_t', 'channelWidth'), param('bool', 'isShortGuardInterval'), param('uint8_t', 'nss')], 
                    is_const=True)
     ## wifi-mode.h (module 'wifi'): uint32_t ns3::WifiMode::GetUid() const [member function]
     cls.add_method('GetUid', 
@@ -3183,10 +3209,15 @@
 def register_Ns3WifiModeFactory_methods(root_module, cls):
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeFactory::WifiModeFactory(ns3::WifiModeFactory const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::WifiModeFactory const &', 'arg0')])
-    ## wifi-mode.h (module 'wifi'): static ns3::WifiMode ns3::WifiModeFactory::CreateWifiMode(std::string uniqueName, ns3::WifiModulationClass modClass, bool isMandatory, uint32_t bandwidth, uint32_t dataRate, ns3::WifiCodeRate codingRate, uint8_t constellationSize) [member function]
+    ## wifi-mode.h (module 'wifi'): static ns3::WifiMode ns3::WifiModeFactory::CreateWifiMcs(std::string uniqueName, uint8_t mcsValue, ns3::WifiModulationClass modClass) [member function]
+    cls.add_method('CreateWifiMcs', 
+                   'ns3::WifiMode', 
+                   [param('std::string', 'uniqueName'), param('uint8_t', 'mcsValue'), param('ns3::WifiModulationClass', 'modClass')], 
+                   is_static=True)
+    ## wifi-mode.h (module 'wifi'): static ns3::WifiMode ns3::WifiModeFactory::CreateWifiMode(std::string uniqueName, ns3::WifiModulationClass modClass, bool isMandatory, ns3::WifiCodeRate codingRate, uint16_t constellationSize) [member function]
     cls.add_method('CreateWifiMode', 
                    'ns3::WifiMode', 
-                   [param('std::string', 'uniqueName'), param('ns3::WifiModulationClass', 'modClass'), param('bool', 'isMandatory'), param('uint32_t', 'bandwidth'), param('uint32_t', 'dataRate'), param('ns3::WifiCodeRate', 'codingRate'), param('uint8_t', 'constellationSize')], 
+                   [param('std::string', 'uniqueName'), param('ns3::WifiModulationClass', 'modClass'), param('bool', 'isMandatory'), param('ns3::WifiCodeRate', 'codingRate'), param('uint16_t', 'constellationSize')], 
                    is_static=True)
     return
 
@@ -3279,6 +3310,10 @@
     cls.add_constructor([param('ns3::WifiRemoteStationState const &', 'arg0')])
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_address [variable]
     cls.add_instance_attribute('m_address', 'ns3::Mac48Address', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_aggregation [variable]
+    cls.add_instance_attribute('m_aggregation', 'bool', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_channelWidth [variable]
+    cls.add_instance_attribute('m_channelWidth', 'uint32_t', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_greenfield [variable]
     cls.add_instance_attribute('m_greenfield', 'bool', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_info [variable]
@@ -3286,7 +3321,7 @@
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_ness [variable]
     cls.add_instance_attribute('m_ness', 'uint32_t', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_operationalMcsSet [variable]
-    cls.add_instance_attribute('m_operationalMcsSet', 'ns3::WifiMcsList', is_const=False)
+    cls.add_instance_attribute('m_operationalMcsSet', 'ns3::WifiModeList', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_operationalRateSet [variable]
     cls.add_instance_attribute('m_operationalRateSet', 'ns3::WifiModeList', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_rx [variable]
@@ -3305,8 +3340,13 @@
     cls.add_constructor([param('ns3::WifiTxVector const &', 'arg0')])
     ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector() [constructor]
     cls.add_constructor([])
-    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiMode mode, uint8_t powerLevel, uint8_t retries, bool shortGuardInterval, uint8_t nss, uint8_t ness, bool stbc) [constructor]
-    cls.add_constructor([param('ns3::WifiMode', 'mode'), param('uint8_t', 'powerLevel'), param('uint8_t', 'retries'), param('bool', 'shortGuardInterval'), param('uint8_t', 'nss'), param('uint8_t', 'ness'), param('bool', 'stbc')])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiMode mode, uint8_t powerLevel, uint8_t retries, bool shortGuardInterval, uint8_t nss, uint8_t ness, uint32_t channelWidth, bool aggregation, bool stbc) [constructor]
+    cls.add_constructor([param('ns3::WifiMode', 'mode'), param('uint8_t', 'powerLevel'), param('uint8_t', 'retries'), param('bool', 'shortGuardInterval'), param('uint8_t', 'nss'), param('uint8_t', 'ness'), param('uint32_t', 'channelWidth'), param('bool', 'aggregation'), param('bool', 'stbc')])
+    ## wifi-tx-vector.h (module 'wifi'): uint32_t ns3::WifiTxVector::GetChannelWidth() const [member function]
+    cls.add_method('GetChannelWidth', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## wifi-tx-vector.h (module 'wifi'): ns3::WifiMode ns3::WifiTxVector::GetMode() const [member function]
     cls.add_method('GetMode', 
                    'ns3::WifiMode', 
@@ -3332,6 +3372,11 @@
                    'uint8_t', 
                    [], 
                    is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): bool ns3::WifiTxVector::IsAggregation() const [member function]
+    cls.add_method('IsAggregation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## wifi-tx-vector.h (module 'wifi'): bool ns3::WifiTxVector::IsShortGuardInterval() const [member function]
     cls.add_method('IsShortGuardInterval', 
                    'bool', 
@@ -3342,6 +3387,14 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetAggregation(bool aggregation) [member function]
+    cls.add_method('SetAggregation', 
+                   'void', 
+                   [param('bool', 'aggregation')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetChannelWidth(uint32_t channelWidth) [member function]
+    cls.add_method('SetChannelWidth', 
+                   'void', 
+                   [param('uint32_t', 'channelWidth')])
     ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetMode(ns3::WifiMode mode) [member function]
     cls.add_method('SetMode', 
                    'void', 
@@ -3446,6 +3499,28 @@
     cls.add_static_attribute('implementation', 'ns3::int64x64_t::impl_type const', is_const=True)
     return
 
+def register_Ns3MpduInfo_methods(root_module, cls):
+    ## wifi-phy.h (module 'wifi'): ns3::mpduInfo::mpduInfo() [constructor]
+    cls.add_constructor([])
+    ## wifi-phy.h (module 'wifi'): ns3::mpduInfo::mpduInfo(ns3::mpduInfo const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::mpduInfo const &', 'arg0')])
+    ## wifi-phy.h (module 'wifi'): ns3::mpduInfo::packetType [variable]
+    cls.add_instance_attribute('packetType', 'uint8_t', is_const=False)
+    ## wifi-phy.h (module 'wifi'): ns3::mpduInfo::referenceNumber [variable]
+    cls.add_instance_attribute('referenceNumber', 'uint32_t', is_const=False)
+    return
+
+def register_Ns3SignalNoiseDbm_methods(root_module, cls):
+    ## wifi-phy.h (module 'wifi'): ns3::signalNoiseDbm::signalNoiseDbm() [constructor]
+    cls.add_constructor([])
+    ## wifi-phy.h (module 'wifi'): ns3::signalNoiseDbm::signalNoiseDbm(ns3::signalNoiseDbm const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::signalNoiseDbm const &', 'arg0')])
+    ## wifi-phy.h (module 'wifi'): ns3::signalNoiseDbm::noise [variable]
+    cls.add_instance_attribute('noise', 'double', is_const=False)
+    ## wifi-phy.h (module 'wifi'): ns3::signalNoiseDbm::signal [variable]
+    cls.add_instance_attribute('signal', 'double', is_const=False)
+    return
+
 def register_Ns3Chunk_methods(root_module, cls):
     ## chunk.h (module 'network'): ns3::Chunk::Chunk() [constructor]
     cls.add_constructor([])
@@ -5986,6 +6061,10 @@
     cls.add_method('SetQosEosp', 
                    'void', 
                    [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosMeshControlPresent() [member function]
+    cls.add_method('SetQosMeshControlPresent', 
+                   'void', 
+                   [])
     ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosNoAck() [member function]
     cls.add_method('SetQosNoAck', 
                    'void', 
@@ -5998,6 +6077,10 @@
     cls.add_method('SetQosNoEosp', 
                    'void', 
                    [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosNoMeshControlPresent() [member function]
+    cls.add_method('SetQosNoMeshControlPresent', 
+                   'void', 
+                   [])
     ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosNormalAck() [member function]
     cls.add_method('SetQosNormalAck', 
                    'void', 
@@ -6042,19 +6125,19 @@
                    'int64_t', 
                    [param('int64_t', 'stream')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculatePlcpDuration(ns3::WifiTxVector txvector, ns3::WifiPreamble preamble) [member function]
-    cls.add_method('CalculatePlcpDuration', 
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculatePlcpPreambleAndHeaderDuration(ns3::WifiTxVector txVector, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('CalculatePlcpPreambleAndHeaderDuration', 
                    'ns3::Time', 
-                   [param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble')])
+                   [param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble')])
     ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::CalculateSnr(ns3::WifiMode txMode, double ber) const [member function]
     cls.add_method('CalculateSnr', 
                    'double', 
                    [param('ns3::WifiMode', 'txMode'), param('double', 'ber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
     cls.add_method('CalculateTxDuration', 
                    'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('ConfigureStandard', 
                    'void', 
@@ -6070,11 +6153,6 @@
                    'ns3::Ptr< ns3::WifiChannel >', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetChannelBonding() const [member function]
-    cls.add_method('GetChannelBonding', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint16_t ns3::WifiPhy::GetChannelNumber() const [member function]
     cls.add_method('GetChannelNumber', 
                    'uint16_t', 
@@ -6085,6 +6163,11 @@
                    'ns3::Time', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetChannelWidth() const [member function]
+    cls.add_method('GetChannelWidth', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetDelayUntilIdle() [member function]
     cls.add_method('GetDelayUntilIdle', 
                    'ns3::Time', 
@@ -6165,328 +6248,328 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetLastRxStartTime() const [member function]
-    cls.add_method('GetLastRxStartTime', 
-                   'ns3::Time', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetLdpc() const [member function]
-    cls.add_method('GetLdpc', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetMFPlcpHeaderMode(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
-    cls.add_method('GetMFPlcpHeaderMode', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs0() [member function]
+    cls.add_method('GetHtMcs0', 
                    'ns3::WifiMode', 
-                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetMcs(uint8_t mcs) const [member function]
-    cls.add_method('GetMcs', 
-                   'uint8_t', 
-                   [param('uint8_t', 'mcs')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::WifiModeList ns3::WifiPhy::GetMembershipSelectorModes(uint32_t selector) [member function]
-    cls.add_method('GetMembershipSelectorModes', 
-                   'ns3::WifiModeList', 
-                   [param('uint32_t', 'selector')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::GetMode(uint32_t mode) const [member function]
-    cls.add_method('GetMode', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs1() [member function]
+    cls.add_method('GetHtMcs1', 
                    'ns3::WifiMode', 
-                   [param('uint32_t', 'mode')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNBssMembershipSelectors() const [member function]
-    cls.add_method('GetNBssMembershipSelectors', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetNMcs() const [member function]
-    cls.add_method('GetNMcs', 
-                   'uint8_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNModes() const [member function]
-    cls.add_method('GetNModes', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNTxPower() const [member function]
-    cls.add_method('GetNTxPower', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfReceiveAntennas() const [member function]
-    cls.add_method('GetNumberOfReceiveAntennas', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfTransmitAntennas() const [member function]
-    cls.add_method('GetNumberOfTransmitAntennas', 
-                   'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate108MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate108MbpsBW40MHz', 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs10() [member function]
+    cls.add_method('GetHtMcs10', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate120MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate120MbpsBW40MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs11() [member function]
+    cls.add_method('GetHtMcs11', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate121_5MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate121_5MbpsBW40MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs12() [member function]
+    cls.add_method('GetHtMcs12', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12Mbps() [member function]
-    cls.add_method('GetOfdmRate12Mbps', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs13() [member function]
+    cls.add_method('GetHtMcs13', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate12MbpsBW10MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs14() [member function]
+    cls.add_method('GetHtMcs14', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate12MbpsBW5MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs15() [member function]
+    cls.add_method('GetHtMcs15', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate135MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate135MbpsBW40MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs16() [member function]
+    cls.add_method('GetHtMcs16', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate135MbpsBW40MHzShGi() [member function]
-    cls.add_method('GetOfdmRate135MbpsBW40MHzShGi', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs17() [member function]
+    cls.add_method('GetHtMcs17', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate13MbpsBW20MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs18() [member function]
+    cls.add_method('GetHtMcs18', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13_5MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate13_5MbpsBW40MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs19() [member function]
+    cls.add_method('GetHtMcs19', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13_5MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate13_5MbpsBW5MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs2() [member function]
+    cls.add_method('GetHtMcs2', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate14_4MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate14_4MbpsBW20MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs20() [member function]
+    cls.add_method('GetHtMcs20', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate150MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate150MbpsBW40MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs21() [member function]
+    cls.add_method('GetHtMcs21', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate15MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate15MbpsBW40MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs22() [member function]
+    cls.add_method('GetHtMcs22', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate18Mbps() [member function]
-    cls.add_method('GetOfdmRate18Mbps', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs23() [member function]
+    cls.add_method('GetHtMcs23', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate18MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate18MbpsBW10MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs24() [member function]
+    cls.add_method('GetHtMcs24', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate19_5MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate19_5MbpsBW20MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs25() [member function]
+    cls.add_method('GetHtMcs25', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate1_5MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate1_5MbpsBW5MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs26() [member function]
+    cls.add_method('GetHtMcs26', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate21_7MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate21_7MbpsBW20MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs27() [member function]
+    cls.add_method('GetHtMcs27', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate24Mbps() [member function]
-    cls.add_method('GetOfdmRate24Mbps', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs28() [member function]
+    cls.add_method('GetHtMcs28', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate24MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate24MbpsBW10MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs29() [member function]
+    cls.add_method('GetHtMcs29', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate26MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate26MbpsBW20MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs3() [member function]
+    cls.add_method('GetHtMcs3', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate27MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate27MbpsBW10MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs30() [member function]
+    cls.add_method('GetHtMcs30', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate27MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate27MbpsBW40MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs31() [member function]
+    cls.add_method('GetHtMcs31', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate28_9MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate28_9MbpsBW20MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs4() [member function]
+    cls.add_method('GetHtMcs4', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate2_25MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate2_25MbpsBW5MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs5() [member function]
+    cls.add_method('GetHtMcs5', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate30MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate30MbpsBW40MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs6() [member function]
+    cls.add_method('GetHtMcs6', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate36Mbps() [member function]
-    cls.add_method('GetOfdmRate36Mbps', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs7() [member function]
+    cls.add_method('GetHtMcs7', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate39MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate39MbpsBW20MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs8() [member function]
+    cls.add_method('GetHtMcs8', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate3MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate3MbpsBW10MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs9() [member function]
+    cls.add_method('GetHtMcs9', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate3MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate3MbpsBW5MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtPlcpHeaderMode(ns3::WifiMode payloadMode) [member function]
+    cls.add_method('GetHtPlcpHeaderMode', 
                    'ns3::WifiMode', 
-                   [], 
+                   [param('ns3::WifiMode', 'payloadMode')], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate40_5MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate40_5MbpsBW40MHz', 
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetLastRxStartTime() const [member function]
+    cls.add_method('GetLastRxStartTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetLdpc() const [member function]
+    cls.add_method('GetLdpc', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::GetMcs(uint8_t mcs) const [member function]
+    cls.add_method('GetMcs', 
                    'ns3::WifiMode', 
+                   [param('uint8_t', 'mcs')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::WifiModeList ns3::WifiPhy::GetMembershipSelectorModes(uint32_t selector) [member function]
+    cls.add_method('GetMembershipSelectorModes', 
+                   'ns3::WifiModeList', 
+                   [param('uint32_t', 'selector')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::GetMode(uint32_t mode) const [member function]
+    cls.add_method('GetMode', 
+                   'ns3::WifiMode', 
+                   [param('uint32_t', 'mode')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNBssMembershipSelectors() const [member function]
+    cls.add_method('GetNBssMembershipSelectors', 
+                   'uint32_t', 
                    [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate43_3MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate43_3MbpsBW20MHz', 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetNMcs() const [member function]
+    cls.add_method('GetNMcs', 
+                   'uint8_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNModes() const [member function]
+    cls.add_method('GetNModes', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNTxPower() const [member function]
+    cls.add_method('GetNTxPower', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfReceiveAntennas() const [member function]
+    cls.add_method('GetNumberOfReceiveAntennas', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfTransmitAntennas() const [member function]
+    cls.add_method('GetNumberOfTransmitAntennas', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12Mbps() [member function]
+    cls.add_method('GetOfdmRate12Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate45MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate45MbpsBW40MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12MbpsBW10MHz() [member function]
+    cls.add_method('GetOfdmRate12MbpsBW10MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate48Mbps() [member function]
-    cls.add_method('GetOfdmRate48Mbps', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12MbpsBW5MHz() [member function]
+    cls.add_method('GetOfdmRate12MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate4_5MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate4_5MbpsBW10MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13_5MbpsBW5MHz() [member function]
+    cls.add_method('GetOfdmRate13_5MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate4_5MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate4_5MbpsBW5MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate18Mbps() [member function]
+    cls.add_method('GetOfdmRate18Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate52MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate52MbpsBW20MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate18MbpsBW10MHz() [member function]
+    cls.add_method('GetOfdmRate18MbpsBW10MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate54Mbps() [member function]
-    cls.add_method('GetOfdmRate54Mbps', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate1_5MbpsBW5MHz() [member function]
+    cls.add_method('GetOfdmRate1_5MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate54MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate54MbpsBW40MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate24Mbps() [member function]
+    cls.add_method('GetOfdmRate24Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate57_8MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate57_8MbpsBW20MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate24MbpsBW10MHz() [member function]
+    cls.add_method('GetOfdmRate24MbpsBW10MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate58_5MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate58_5MbpsBW20MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate27MbpsBW10MHz() [member function]
+    cls.add_method('GetOfdmRate27MbpsBW10MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate60MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate60MbpsBW40MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate2_25MbpsBW5MHz() [member function]
+    cls.add_method('GetOfdmRate2_25MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate65MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate65MbpsBW20MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate36Mbps() [member function]
+    cls.add_method('GetOfdmRate36Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate65MbpsBW20MHzShGi() [member function]
-    cls.add_method('GetOfdmRate65MbpsBW20MHzShGi', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate3MbpsBW10MHz() [member function]
+    cls.add_method('GetOfdmRate3MbpsBW10MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6Mbps() [member function]
-    cls.add_method('GetOfdmRate6Mbps', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate3MbpsBW5MHz() [member function]
+    cls.add_method('GetOfdmRate3MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate6MbpsBW10MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate48Mbps() [member function]
+    cls.add_method('GetOfdmRate48Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate6MbpsBW5MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate4_5MbpsBW10MHz() [member function]
+    cls.add_method('GetOfdmRate4_5MbpsBW10MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6_5MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate6_5MbpsBW20MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate4_5MbpsBW5MHz() [member function]
+    cls.add_method('GetOfdmRate4_5MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate72_2MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate72_2MbpsBW20MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate54Mbps() [member function]
+    cls.add_method('GetOfdmRate54Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate7_2MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate7_2MbpsBW20MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6Mbps() [member function]
+    cls.add_method('GetOfdmRate6Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate81MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate81MbpsBW40MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6MbpsBW10MHz() [member function]
+    cls.add_method('GetOfdmRate6MbpsBW10MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate90MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate90MbpsBW40MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6MbpsBW5MHz() [member function]
+    cls.add_method('GetOfdmRate6MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
@@ -6505,34 +6588,49 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetPayloadDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetPayloadDuration(uint32_t size, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
     cls.add_method('GetPayloadDuration', 
                    'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
-    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHeaderDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHeaderDuration(ns3::WifiTxVector txVector, ns3::WifiPreamble preamble) [member function]
     cls.add_method('GetPlcpHeaderDuration', 
                    'ns3::Time', 
-                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   [param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetPlcpHeaderMode(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetPlcpHeaderMode(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble, ns3::WifiTxVector txVector) [member function]
     cls.add_method('GetPlcpHeaderMode', 
                    'ns3::WifiMode', 
-                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txVector')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHtSigHeaderDuration(ns3::WifiPreamble preamble) [member function]
     cls.add_method('GetPlcpHtSigHeaderDuration', 
                    'ns3::Time', 
                    [param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHtTrainingSymbolDuration(ns3::WifiPreamble preamble, ns3::WifiTxVector txvector) [member function]
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHtTrainingSymbolDuration(ns3::WifiPreamble preamble, ns3::WifiTxVector txVector) [member function]
     cls.add_method('GetPlcpHtTrainingSymbolDuration', 
                    'ns3::Time', 
-                   [param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txvector')], 
+                   [param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txVector')], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpPreambleDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpPreambleDuration(ns3::WifiTxVector txVector, ns3::WifiPreamble preamble) [member function]
     cls.add_method('GetPlcpPreambleDuration', 
                    'ns3::Time', 
-                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   [param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpVhtSigA1Duration(ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpVhtSigA1Duration', 
+                   'ns3::Time', 
+                   [param('ns3::WifiPreamble', 'preamble')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpVhtSigA2Duration(ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpVhtSigA2Duration', 
+                   'ns3::Time', 
+                   [param('ns3::WifiPreamble', 'preamble')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpVhtSigBDuration(ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpVhtSigBDuration', 
+                   'ns3::Time', 
+                   [param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetStateDuration() [member function]
     cls.add_method('GetStateDuration', 
@@ -6553,12 +6651,67 @@
     cls.add_method('GetTxPowerStart', 
                    'double', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::TypeId ns3::WifiPhy::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::TypeId ns3::WifiPhy::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs0() [member function]
+    cls.add_method('GetVhtMcs0', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs1() [member function]
+    cls.add_method('GetVhtMcs1', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs2() [member function]
+    cls.add_method('GetVhtMcs2', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs3() [member function]
+    cls.add_method('GetVhtMcs3', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs4() [member function]
+    cls.add_method('GetVhtMcs4', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs5() [member function]
+    cls.add_method('GetVhtMcs5', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs6() [member function]
+    cls.add_method('GetVhtMcs6', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs7() [member function]
+    cls.add_method('GetVhtMcs7', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs8() [member function]
+    cls.add_method('GetVhtMcs8', 
+                   'ns3::WifiMode', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs9() [member function]
+    cls.add_method('GetVhtMcs9', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtPlcpHeaderMode(ns3::WifiMode payloadMode) [member function]
+    cls.add_method('GetVhtPlcpHeaderMode', 
+                   'ns3::WifiMode', 
+                   [param('ns3::WifiMode', 'payloadMode')], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsModeSupported(ns3::WifiMode mode) const [member function]
     cls.add_method('IsModeSupported', 
                    'bool', 
@@ -6599,19 +6752,14 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::McsToWifiMode(uint8_t mcs) [member function]
-    cls.add_method('McsToWifiMode', 
-                   'ns3::WifiMode', 
-                   [param('uint8_t', 'mcs')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffRx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble, double signalDbm, double noiseDbm) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffRx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, ns3::WifiPreamble preamble, ns3::WifiTxVector txVector, ns3::mpduInfo aMpdu, ns3::signalNoiseDbm signalNoise) [member function]
     cls.add_method('NotifyMonitorSniffRx', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('bool', 'isShortPreamble'), param('double', 'signalDbm'), param('double', 'noiseDbm')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffTx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble, uint8_t txPower) [member function]
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txVector'), param('ns3::mpduInfo', 'aMpdu'), param('ns3::signalNoiseDbm', 'signalNoise')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffTx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, ns3::WifiPreamble preamble, ns3::WifiTxVector txVector, ns3::mpduInfo aMpdu) [member function]
     cls.add_method('NotifyMonitorSniffTx', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('bool', 'isShortPreamble'), param('uint8_t', 'txPower')])
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txVector'), param('ns3::mpduInfo', 'aMpdu')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyRxBegin(ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('NotifyRxBegin', 
                    'void', 
@@ -6646,21 +6794,21 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, uint8_t packetType) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, uint8_t packetType, uint32_t mpduReferenceNumber) [member function]
     cls.add_method('SendPacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'packetType')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelBonding(bool channelbonding) [member function]
-    cls.add_method('SetChannelBonding', 
-                   'void', 
-                   [param('bool', 'channelbonding')], 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'packetType'), param('uint32_t', 'mpduReferenceNumber')], 
                    is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelNumber(uint16_t id) [member function]
     cls.add_method('SetChannelNumber', 
                    'void', 
                    [param('uint16_t', 'id')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelWidth(uint32_t channelwidth) [member function]
+    cls.add_method('SetChannelWidth', 
+                   'void', 
+                   [param('uint32_t', 'channelwidth')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetFrequency(uint32_t freq) [member function]
     cls.add_method('SetFrequency', 
                    'void', 
@@ -6716,11 +6864,6 @@
                    'void', 
                    [param('ns3::WifiPhyListener *', 'listener')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::WifiModeToMcs(ns3::WifiMode mode) [member function]
-    cls.add_method('WifiModeToMcs', 
-                   'uint32_t', 
-                   [param('ns3::WifiMode', 'mode')], 
-                   is_pure_virtual=True, is_virtual=True)
     return
 
 def register_Ns3WifiRemoteStationManager_methods(root_module, cls):
@@ -6732,10 +6875,10 @@
     cls.add_method('AddAllSupportedModes', 
                    'void', 
                    [param('ns3::Mac48Address', 'address')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddBasicMcs(uint8_t mcs) [member function]
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddBasicMcs(ns3::WifiMode mcs) [member function]
     cls.add_method('AddBasicMcs', 
                    'void', 
-                   [param('uint8_t', 'mcs')])
+                   [param('ns3::WifiMode', 'mcs')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddBasicMode(ns3::WifiMode mode) [member function]
     cls.add_method('AddBasicMode', 
                    'void', 
@@ -6744,10 +6887,14 @@
     cls.add_method('AddStationHtCapabilities', 
                    'void', 
                    [param('ns3::Mac48Address', 'from'), param('ns3::HtCapabilities', 'htcapabilities')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddSupportedMcs(ns3::Mac48Address address, uint8_t mcs) [member function]
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddStationVhtCapabilities(ns3::Mac48Address from, ns3::VhtCapabilities vhtcapabilities) [member function]
+    cls.add_method('AddStationVhtCapabilities', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'from'), param('ns3::VhtCapabilities', 'vhtcapabilities')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddSupportedMcs(ns3::Mac48Address address, ns3::WifiMode mcs) [member function]
     cls.add_method('AddSupportedMcs', 
                    'void', 
-                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'mcs')])
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'mcs')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddSupportedMode(ns3::Mac48Address address, ns3::WifiMode mode) [member function]
     cls.add_method('AddSupportedMode', 
                    'void', 
@@ -6760,9 +6907,9 @@
     cls.add_method('GetAckTxVector', 
                    'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'dataMode')])
-    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetBasicMcs(uint32_t i) const [member function]
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetBasicMcs(uint32_t i) const [member function]
     cls.add_method('GetBasicMcs', 
-                   'uint8_t', 
+                   'ns3::WifiMode', 
                    [param('uint32_t', 'i')], 
                    is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetBasicMode(uint32_t i) const [member function]
@@ -6786,9 +6933,9 @@
     cls.add_method('GetDataTxVector', 
                    'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint32_t', 'fullPacketSize')])
-    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetDefaultMcs() const [member function]
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetDefaultMcs() const [member function]
     cls.add_method('GetDefaultMcs', 
-                   'uint8_t', 
+                   'ns3::WifiMode', 
                    [], 
                    is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetDefaultMode() const [member function]
@@ -6871,6 +7018,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::HasVhtSupported() const [member function]
+    cls.add_method('HasVhtSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::IsAssociated(ns3::Mac48Address address) const [member function]
     cls.add_method('IsAssociated', 
                    'bool', 
@@ -6990,6 +7142,10 @@
     cls.add_method('SetRtsCtsThreshold', 
                    'void', 
                    [param('uint32_t', 'threshold')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetVhtSupported(bool enable) [member function]
+    cls.add_method('SetVhtSupported', 
+                   'void', 
+                   [param('bool', 'enable')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetupMac(ns3::Ptr<ns3::WifiMac> mac) [member function]
     cls.add_method('SetupMac', 
                    'void', 
@@ -7000,11 +7156,25 @@
                    'void', 
                    [param('ns3::Ptr< ns3::WifiPhy >', 'phy')], 
                    is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::UpdateFragmentationThreshold() [member function]
+    cls.add_method('UpdateFragmentationThreshold', 
+                   'void', 
+                   [])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetAggregation(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetAggregation', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetChannelWidth(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetChannelWidth', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetGreenfield(ns3::WifiRemoteStation const * station) const [member function]
     cls.add_method('GetGreenfield', 
                    'bool', 
@@ -7020,9 +7190,9 @@
                    'ns3::Ptr< ns3::WifiMac >', 
                    [], 
                    is_const=True, visibility='protected')
-    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetMcsSupported(ns3::WifiRemoteStation const * station, uint32_t i) const [member function]
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetMcsSupported(ns3::WifiRemoteStation const * station, uint32_t i) const [member function]
     cls.add_method('GetMcsSupported', 
-                   'uint8_t', 
+                   'ns3::WifiMode', 
                    [param('ns3::WifiRemoteStation const *', 'station'), param('uint32_t', 'i')], 
                    is_const=True, visibility='protected')
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNMcsSupported(ns3::WifiRemoteStation const * station) const [member function]
@@ -7080,6 +7250,11 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::DoGetAckTxChannelWidth(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetAckTxChannelWidth', 
+                   'uint32_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetAckTxGuardInterval(ns3::Mac48Address address, ns3::WifiMode ackMode) [member function]
     cls.add_method('DoGetAckTxGuardInterval', 
                    'bool', 
@@ -7105,6 +7280,11 @@
                    'bool', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ackMode')], 
                    visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::DoGetBlockAckTxChannelWidth(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetBlockAckTxChannelWidth', 
+                   'uint32_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetBlockAckTxGuardInterval(ns3::Mac48Address address, ns3::WifiMode blockAckMode) [member function]
     cls.add_method('DoGetBlockAckTxGuardInterval', 
                    'bool', 
@@ -7130,6 +7310,11 @@
                    'bool', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'blockAckMode')], 
                    visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::DoGetCtsTxChannelWidth(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetCtsTxChannelWidth', 
+                   'uint32_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetCtsTxGuardInterval(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
     cls.add_method('DoGetCtsTxGuardInterval', 
                    'bool', 
@@ -7347,6 +7532,10 @@
     cls.add_method('PrintArpCache', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')])
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Remove(ns3::ArpCache::Entry * entry) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::ArpCache::Entry *', 'entry')])
     ## arp-cache.h (module 'internet'): void ns3::ArpCache::SetAliveTimeout(ns3::Time aliveTimeout) [member function]
     cls.add_method('SetAliveTimeout', 
                    'void', 
@@ -7383,6 +7572,10 @@
     cls.add_constructor([param('ns3::ArpCache::Entry const &', 'arg0')])
     ## arp-cache.h (module 'internet'): ns3::ArpCache::Entry::Entry(ns3::ArpCache * arp) [constructor]
     cls.add_constructor([param('ns3::ArpCache *', 'arp')])
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::ClearPendingPacket() [member function]
+    cls.add_method('ClearPendingPacket', 
+                   'void', 
+                   [])
     ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::ClearRetries() [member function]
     cls.add_method('ClearRetries', 
                    'void', 
@@ -7423,6 +7616,10 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## arp-cache.h (module 'internet'): bool ns3::ArpCache::Entry::IsPermanent() [member function]
+    cls.add_method('IsPermanent', 
+                   'bool', 
+                   [])
     ## arp-cache.h (module 'internet'): bool ns3::ArpCache::Entry::IsWaitReply() [member function]
     cls.add_method('IsWaitReply', 
                    'bool', 
@@ -7435,6 +7632,10 @@
     cls.add_method('MarkDead', 
                    'void', 
                    [])
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::MarkPermanent() [member function]
+    cls.add_method('MarkPermanent', 
+                   'void', 
+                   [])
     ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::MarkWaitReply(ns3::Ptr<ns3::Packet> waiting) [member function]
     cls.add_method('MarkWaitReply', 
                    'void', 
@@ -7443,6 +7644,10 @@
     cls.add_method('SetIpv4Address', 
                    'void', 
                    [param('ns3::Ipv4Address', 'destination')])
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::SetMacAddresss(ns3::Address macAddress) [member function]
+    cls.add_method('SetMacAddresss', 
+                   'void', 
+                   [param('ns3::Address', 'macAddress')])
     ## arp-cache.h (module 'internet'): bool ns3::ArpCache::Entry::UpdateWaitReply(ns3::Ptr<ns3::Packet> waiting) [member function]
     cls.add_method('UpdateWaitReply', 
                    'bool', 
@@ -7552,11 +7757,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -7666,10 +7881,10 @@
                    'double', 
                    [], 
                    is_virtual=True)
-    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
     cls.add_method('Interpolate', 
                    'double', 
-                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
                    visibility='private', is_virtual=True)
     ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
     cls.add_method('Validate', 
@@ -7937,6 +8152,16 @@
                    'uint8_t', 
                    [], 
                    is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetAntennaSelectionCapabilities() const [member function]
+    cls.add_method('GetAntennaSelectionCapabilities', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint16_t ns3::HtCapabilities::GetExtendedHtCapabilities() const [member function]
+    cls.add_method('GetExtendedHtCapabilities', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
     ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetGreenfield() const [member function]
     cls.add_method('GetGreenfield', 
                    'uint8_t', 
@@ -7952,11 +8177,31 @@
                    'uint8_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetLSigProtectionSupport() const [member function]
+    cls.add_method('GetLSigProtectionSupport', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetLdpc() const [member function]
     cls.add_method('GetLdpc', 
                    'uint8_t', 
                    [], 
                    is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetMaxAmpduLength() const [member function]
+    cls.add_method('GetMaxAmpduLength', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetMaxAmsduLength() const [member function]
+    cls.add_method('GetMaxAmsduLength', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint16_t ns3::HtCapabilities::GetRxHighestSupportedDataRate() const [member function]
+    cls.add_method('GetRxHighestSupportedDataRate', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
     ## ht-capabilities.h (module 'wifi'): uint8_t * ns3::HtCapabilities::GetRxMcsBitmask() [member function]
     cls.add_method('GetRxMcsBitmask', 
                    'uint8_t *', 
@@ -7971,6 +8216,11 @@
                    'uint8_t', 
                    [], 
                    is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetShortGuardInterval40() const [member function]
+    cls.add_method('GetShortGuardInterval40', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetSupportedChannelWidth() const [member function]
     cls.add_method('GetSupportedChannelWidth', 
                    'uint8_t', 
@@ -7986,6 +8236,21 @@
                    'uint64_t', 
                    [], 
                    is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint32_t ns3::HtCapabilities::GetTxBfCapabilities() const [member function]
+    cls.add_method('GetTxBfCapabilities', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetTxMaxNSpatialStreams() const [member function]
+    cls.add_method('GetTxMaxNSpatialStreams', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetTxMcsSetDefined() const [member function]
+    cls.add_method('GetTxMcsSetDefined', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## ht-capabilities.h (module 'wifi'): bool ns3::HtCapabilities::IsSupportedMcs(uint8_t mcs) [member function]
     cls.add_method('IsSupportedMcs', 
                    'bool', 
@@ -8004,6 +8269,14 @@
     cls.add_method('SetAmpduParameters', 
                    'void', 
                    [param('uint8_t', 'ctrl')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetAntennaSelectionCapabilities(uint8_t ctrl) [member function]
+    cls.add_method('SetAntennaSelectionCapabilities', 
+                   'void', 
+                   [param('uint8_t', 'ctrl')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetExtendedHtCapabilities(uint16_t ctrl) [member function]
+    cls.add_method('SetExtendedHtCapabilities', 
+                   'void', 
+                   [param('uint16_t', 'ctrl')])
     ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetGreenfield(uint8_t greenfield) [member function]
     cls.add_method('SetGreenfield', 
                    'void', 
@@ -8016,10 +8289,26 @@
     cls.add_method('SetHtSupported', 
                    'void', 
                    [param('uint8_t', 'htsupported')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetLSigProtectionSupport(uint8_t lsigprotection) [member function]
+    cls.add_method('SetLSigProtectionSupport', 
+                   'void', 
+                   [param('uint8_t', 'lsigprotection')])
     ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetLdpc(uint8_t ldpc) [member function]
     cls.add_method('SetLdpc', 
                    'void', 
                    [param('uint8_t', 'ldpc')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetMaxAmpduLength(uint8_t maxampdulength) [member function]
+    cls.add_method('SetMaxAmpduLength', 
+                   'void', 
+                   [param('uint8_t', 'maxampdulength')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetMaxAmsduLength(uint8_t maxamsdulength) [member function]
+    cls.add_method('SetMaxAmsduLength', 
+                   'void', 
+                   [param('uint8_t', 'maxamsdulength')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetRxHighestSupportedDataRate(uint16_t maxsupportedrate) [member function]
+    cls.add_method('SetRxHighestSupportedDataRate', 
+                   'void', 
+                   [param('uint16_t', 'maxsupportedrate')])
     ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetRxMcsBitmask(uint8_t index) [member function]
     cls.add_method('SetRxMcsBitmask', 
                    'void', 
@@ -8028,6 +8317,10 @@
     cls.add_method('SetShortGuardInterval20', 
                    'void', 
                    [param('uint8_t', 'shortguardinterval')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetShortGuardInterval40(uint8_t shortguardinterval) [member function]
+    cls.add_method('SetShortGuardInterval40', 
+                   'void', 
+                   [param('uint8_t', 'shortguardinterval')])
     ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetSupportedChannelWidth(uint8_t supportedchannelwidth) [member function]
     cls.add_method('SetSupportedChannelWidth', 
                    'void', 
@@ -8036,6 +8329,18 @@
     cls.add_method('SetSupportedMcsSet', 
                    'void', 
                    [param('uint64_t', 'ctrl1'), param('uint64_t', 'ctrl2')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetTxBfCapabilities(uint32_t ctrl) [member function]
+    cls.add_method('SetTxBfCapabilities', 
+                   'void', 
+                   [param('uint32_t', 'ctrl')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetTxMaxNSpatialStreams(uint8_t maxtxspatialstreams) [member function]
+    cls.add_method('SetTxMaxNSpatialStreams', 
+                   'void', 
+                   [param('uint8_t', 'maxtxspatialstreams')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetTxMcsSetDefined(uint8_t txmcssetdefined) [member function]
+    cls.add_method('SetTxMcsSetDefined', 
+                   'void', 
+                   [param('uint8_t', 'txmcssetdefined')])
     return
 
 def register_Ns3HtCapabilitiesChecker_methods(root_module, cls):
@@ -9845,11 +10150,6 @@
     cls.add_method('SetNode', 
                    'void', 
                    [param('ns3::Ptr< ns3::Node >', 'node')])
-    ## tcp-l4-protocol.h (module 'internet'): int ns3::TcpL4Protocol::GetProtocolNumber() const [member function]
-    cls.add_method('GetProtocolNumber', 
-                   'int', 
-                   [], 
-                   is_const=True, is_virtual=True)
     ## tcp-l4-protocol.h (module 'internet'): ns3::Ptr<ns3::Socket> ns3::TcpL4Protocol::CreateSocket() [member function]
     cls.add_method('CreateSocket', 
                    'ns3::Ptr< ns3::Socket >', 
@@ -9898,6 +10198,19 @@
     cls.add_method('Allocate6', 
                    'ns3::Ipv6EndPoint *', 
                    [param('ns3::Ipv6Address', 'localAddress'), param('uint16_t', 'localPort'), param('ns3::Ipv6Address', 'peerAddress'), param('uint16_t', 'peerPort')])
+    ## tcp-l4-protocol.h (module 'internet'): void ns3::TcpL4Protocol::SendPacket(ns3::Ptr<ns3::Packet> pkt, ns3::TcpHeader const & outgoing, ns3::Address const & saddr, ns3::Address const & daddr, ns3::Ptr<ns3::NetDevice> oif=0) const [member function]
+    cls.add_method('SendPacket', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'pkt'), param('ns3::TcpHeader const &', 'outgoing'), param('ns3::Address const &', 'saddr'), param('ns3::Address const &', 'daddr'), param('ns3::Ptr< ns3::NetDevice >', 'oif', default_value='0')], 
+                   is_const=True)
+    ## tcp-l4-protocol.h (module 'internet'): void ns3::TcpL4Protocol::AddSocket(ns3::Ptr<ns3::TcpSocketBase> socket) [member function]
+    cls.add_method('AddSocket', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TcpSocketBase >', 'socket')])
+    ## tcp-l4-protocol.h (module 'internet'): bool ns3::TcpL4Protocol::RemoveSocket(ns3::Ptr<ns3::TcpSocketBase> socket) [member function]
+    cls.add_method('RemoveSocket', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::TcpSocketBase >', 'socket')])
     ## tcp-l4-protocol.h (module 'internet'): void ns3::TcpL4Protocol::DeAllocate(ns3::Ipv4EndPoint * endPoint) [member function]
     cls.add_method('DeAllocate', 
                    'void', 
@@ -9906,23 +10219,15 @@
     cls.add_method('DeAllocate', 
                    'void', 
                    [param('ns3::Ipv6EndPoint *', 'endPoint')])
-    ## tcp-l4-protocol.h (module 'internet'): void ns3::TcpL4Protocol::Send(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address saddr, ns3::Ipv4Address daddr, uint16_t sport, uint16_t dport, ns3::Ptr<ns3::NetDevice> oif=0) [member function]
-    cls.add_method('Send', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'saddr'), param('ns3::Ipv4Address', 'daddr'), param('uint16_t', 'sport'), param('uint16_t', 'dport'), param('ns3::Ptr< ns3::NetDevice >', 'oif', default_value='0')])
-    ## tcp-l4-protocol.h (module 'internet'): void ns3::TcpL4Protocol::Send(ns3::Ptr<ns3::Packet> packet, ns3::Ipv6Address saddr, ns3::Ipv6Address daddr, uint16_t sport, uint16_t dport, ns3::Ptr<ns3::NetDevice> oif=0) [member function]
-    cls.add_method('Send', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv6Address', 'saddr'), param('ns3::Ipv6Address', 'daddr'), param('uint16_t', 'sport'), param('uint16_t', 'dport'), param('ns3::Ptr< ns3::NetDevice >', 'oif', default_value='0')])
-    ## tcp-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::TcpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, ns3::Ptr<ns3::Ipv4Interface> incomingInterface) [member function]
+    ## tcp-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::TcpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & incomingIpHeader, ns3::Ptr<ns3::Ipv4Interface> incomingInterface) [member function]
     cls.add_method('Receive', 
                    'ns3::IpL4Protocol::RxStatus', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::Ipv4Interface >', 'incomingInterface')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'incomingIpHeader'), param('ns3::Ptr< ns3::Ipv4Interface >', 'incomingInterface')], 
                    is_virtual=True)
-    ## tcp-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::TcpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & header, ns3::Ptr<ns3::Ipv6Interface> incomingInterface) [member function]
+    ## tcp-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::TcpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & incomingIpHeader, ns3::Ptr<ns3::Ipv6Interface> incomingInterface) [member function]
     cls.add_method('Receive', 
                    'ns3::IpL4Protocol::RxStatus', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Header const &', 'header'), param('ns3::Ptr< ns3::Ipv6Interface >', 'incomingInterface')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Header const &', 'incomingIpHeader'), param('ns3::Ptr< ns3::Ipv6Interface >', 'incomingInterface')], 
                    is_virtual=True)
     ## tcp-l4-protocol.h (module 'internet'): void ns3::TcpL4Protocol::ReceiveIcmp(ns3::Ipv4Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo, ns3::Ipv4Address payloadSource, ns3::Ipv4Address payloadDestination, uint8_t const * payload) [member function]
     cls.add_method('ReceiveIcmp', 
@@ -9944,6 +10249,11 @@
                    'void', 
                    [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::Ipv6Address, ns3::Ipv6Address, unsigned char, ns3::Ptr< ns3::Ipv6Route >, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
                    is_virtual=True)
+    ## tcp-l4-protocol.h (module 'internet'): int ns3::TcpL4Protocol::GetProtocolNumber() const [member function]
+    cls.add_method('GetProtocolNumber', 
+                   'int', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## tcp-l4-protocol.h (module 'internet'): ns3::Callback<void, ns3::Ptr<ns3::Packet>, ns3::Ipv4Address, ns3::Ipv4Address, unsigned char, ns3::Ptr<ns3::Ipv4Route>, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::TcpL4Protocol::GetDownTarget() const [member function]
     cls.add_method('GetDownTarget', 
                    'ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::Ipv4Address, ns3::Ipv4Address, unsigned char, ns3::Ptr< ns3::Ipv4Route >, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
@@ -9964,6 +10274,16 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
+    ## tcp-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::TcpL4Protocol::PacketReceived(ns3::Ptr<ns3::Packet> packet, ns3::TcpHeader & incomingTcpHeader, ns3::Address const & source, ns3::Address const & destination) [member function]
+    cls.add_method('PacketReceived', 
+                   'ns3::IpL4Protocol::RxStatus', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::TcpHeader &', 'incomingTcpHeader'), param('ns3::Address const &', 'source'), param('ns3::Address const &', 'destination')], 
+                   visibility='protected')
+    ## tcp-l4-protocol.h (module 'internet'): void ns3::TcpL4Protocol::NoEndPointsFound(ns3::TcpHeader const & incomingHeader, ns3::Address const & incomingSAddr, ns3::Address const & incomingDAddr) [member function]
+    cls.add_method('NoEndPointsFound', 
+                   'void', 
+                   [param('ns3::TcpHeader const &', 'incomingHeader'), param('ns3::Address const &', 'incomingSAddr'), param('ns3::Address const &', 'incomingDAddr')], 
+                   visibility='protected')
     return
 
 def register_Ns3TimeValue_methods(root_module, cls):
@@ -10211,6 +10531,237 @@
                    [param('uint64_t const &', 'value')])
     return
 
+def register_Ns3VhtCapabilities_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilities::VhtCapabilities(ns3::VhtCapabilities const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::VhtCapabilities const &', 'arg0')])
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilities::VhtCapabilities() [constructor]
+    cls.add_constructor([])
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::DeserializeInformationField(ns3::Buffer::Iterator start, uint8_t length) [member function]
+    cls.add_method('DeserializeInformationField', 
+                   'uint8_t', 
+                   [param('ns3::Buffer::Iterator', 'start'), param('uint8_t', 'length')], 
+                   is_virtual=True)
+    ## vht-capabilities.h (module 'wifi'): ns3::WifiInformationElementId ns3::VhtCapabilities::ElementId() const [member function]
+    cls.add_method('ElementId', 
+                   'ns3::WifiInformationElementId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::GetInformationFieldSize() const [member function]
+    cls.add_method('GetInformationFieldSize', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::GetMaxAmpduLengthExponent() const [member function]
+    cls.add_method('GetMaxAmpduLengthExponent', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::GetMaxMpduLength() const [member function]
+    cls.add_method('GetMaxMpduLength', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint16_t ns3::VhtCapabilities::GetRxHighestSupportedLgiDataRate() const [member function]
+    cls.add_method('GetRxHighestSupportedLgiDataRate', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::GetRxLdpc() const [member function]
+    cls.add_method('GetRxLdpc', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint16_t ns3::VhtCapabilities::GetRxMcsMap() const [member function]
+    cls.add_method('GetRxMcsMap', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::GetRxStbc() const [member function]
+    cls.add_method('GetRxStbc', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint16_t ns3::VhtCapabilities::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::GetShortGuardIntervalFor160Mhz() const [member function]
+    cls.add_method('GetShortGuardIntervalFor160Mhz', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::GetShortGuardIntervalFor80Mhz() const [member function]
+    cls.add_method('GetShortGuardIntervalFor80Mhz', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::GetSupportedChannelWidthSet() const [member function]
+    cls.add_method('GetSupportedChannelWidthSet', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint64_t ns3::VhtCapabilities::GetSupportedMcsAndNssSet() const [member function]
+    cls.add_method('GetSupportedMcsAndNssSet', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint16_t ns3::VhtCapabilities::GetTxHighestSupportedLgiDataRate() const [member function]
+    cls.add_method('GetTxHighestSupportedLgiDataRate', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint16_t ns3::VhtCapabilities::GetTxMcsMap() const [member function]
+    cls.add_method('GetTxMcsMap', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::GetTxStbc() const [member function]
+    cls.add_method('GetTxStbc', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint32_t ns3::VhtCapabilities::GetVhtCapabilitiesInfo() const [member function]
+    cls.add_method('GetVhtCapabilitiesInfo', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): bool ns3::VhtCapabilities::IsSupportedMcs(uint8_t mcs, uint8_t Nss) const [member function]
+    cls.add_method('IsSupportedMcs', 
+                   'bool', 
+                   [param('uint8_t', 'mcs'), param('uint8_t', 'Nss')], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): bool ns3::VhtCapabilities::IsSupportedRxMcs(uint8_t mcs) const [member function]
+    cls.add_method('IsSupportedRxMcs', 
+                   'bool', 
+                   [param('uint8_t', 'mcs')], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): bool ns3::VhtCapabilities::IsSupportedTxMcs(uint8_t mcs) const [member function]
+    cls.add_method('IsSupportedTxMcs', 
+                   'bool', 
+                   [param('uint8_t', 'mcs')], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): ns3::Buffer::Iterator ns3::VhtCapabilities::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'ns3::Buffer::Iterator', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SerializeInformationField(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('SerializeInformationField', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetMaxAmpduLengthExponent(uint8_t exponent) [member function]
+    cls.add_method('SetMaxAmpduLengthExponent', 
+                   'void', 
+                   [param('uint8_t', 'exponent')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetMaxMpduLength(uint8_t length) [member function]
+    cls.add_method('SetMaxMpduLength', 
+                   'void', 
+                   [param('uint8_t', 'length')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetRxHighestSupportedLgiDataRate(uint16_t supporteddatarate) [member function]
+    cls.add_method('SetRxHighestSupportedLgiDataRate', 
+                   'void', 
+                   [param('uint16_t', 'supporteddatarate')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetRxLdpc(uint8_t rxldpc) [member function]
+    cls.add_method('SetRxLdpc', 
+                   'void', 
+                   [param('uint8_t', 'rxldpc')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetRxMcsMap(uint16_t map) [member function]
+    cls.add_method('SetRxMcsMap', 
+                   'void', 
+                   [param('uint16_t', 'map')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetRxMcsMap(uint8_t mcs, uint8_t nss) [member function]
+    cls.add_method('SetRxMcsMap', 
+                   'void', 
+                   [param('uint8_t', 'mcs'), param('uint8_t', 'nss')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetRxStbc(uint8_t rxstbc) [member function]
+    cls.add_method('SetRxStbc', 
+                   'void', 
+                   [param('uint8_t', 'rxstbc')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetShortGuardIntervalFor160Mhz(uint8_t shortguardinterval) [member function]
+    cls.add_method('SetShortGuardIntervalFor160Mhz', 
+                   'void', 
+                   [param('uint8_t', 'shortguardinterval')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetShortGuardIntervalFor80Mhz(uint8_t shortguardinterval) [member function]
+    cls.add_method('SetShortGuardIntervalFor80Mhz', 
+                   'void', 
+                   [param('uint8_t', 'shortguardinterval')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetSupportedChannelWidthSet(uint8_t channelwidthset) [member function]
+    cls.add_method('SetSupportedChannelWidthSet', 
+                   'void', 
+                   [param('uint8_t', 'channelwidthset')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetSupportedMcsAndNssSet(uint64_t ctrl) [member function]
+    cls.add_method('SetSupportedMcsAndNssSet', 
+                   'void', 
+                   [param('uint64_t', 'ctrl')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetTxHighestSupportedLgiDataRate(uint16_t supporteddatarate) [member function]
+    cls.add_method('SetTxHighestSupportedLgiDataRate', 
+                   'void', 
+                   [param('uint16_t', 'supporteddatarate')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetTxMcsMap(uint16_t map) [member function]
+    cls.add_method('SetTxMcsMap', 
+                   'void', 
+                   [param('uint16_t', 'map')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetTxMcsMap(uint8_t mcs, uint8_t nss) [member function]
+    cls.add_method('SetTxMcsMap', 
+                   'void', 
+                   [param('uint8_t', 'mcs'), param('uint8_t', 'nss')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetTxStbc(uint8_t txstbc) [member function]
+    cls.add_method('SetTxStbc', 
+                   'void', 
+                   [param('uint8_t', 'txstbc')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetVhtCapabilitiesInfo(uint32_t ctrl) [member function]
+    cls.add_method('SetVhtCapabilitiesInfo', 
+                   'void', 
+                   [param('uint32_t', 'ctrl')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetVhtSupported(uint8_t vhtsupported) [member function]
+    cls.add_method('SetVhtSupported', 
+                   'void', 
+                   [param('uint8_t', 'vhtsupported')])
+    return
+
+def register_Ns3VhtCapabilitiesChecker_methods(root_module, cls):
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilitiesChecker::VhtCapabilitiesChecker() [constructor]
+    cls.add_constructor([])
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilitiesChecker::VhtCapabilitiesChecker(ns3::VhtCapabilitiesChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::VhtCapabilitiesChecker const &', 'arg0')])
+    return
+
+def register_Ns3VhtCapabilitiesValue_methods(root_module, cls):
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilitiesValue::VhtCapabilitiesValue() [constructor]
+    cls.add_constructor([])
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilitiesValue::VhtCapabilitiesValue(ns3::VhtCapabilitiesValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::VhtCapabilitiesValue const &', 'arg0')])
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilitiesValue::VhtCapabilitiesValue(ns3::VhtCapabilities const & value) [constructor]
+    cls.add_constructor([param('ns3::VhtCapabilities const &', 'value')])
+    ## vht-capabilities.h (module 'wifi'): ns3::Ptr<ns3::AttributeValue> ns3::VhtCapabilitiesValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## vht-capabilities.h (module 'wifi'): bool ns3::VhtCapabilitiesValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilities ns3::VhtCapabilitiesValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::VhtCapabilities', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): std::string ns3::VhtCapabilitiesValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilitiesValue::Set(ns3::VhtCapabilities const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::VhtCapabilities const &', 'value')])
+    return
+
 def register_Ns3WifiModeChecker_methods(root_module, cls):
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeChecker::WifiModeChecker() [constructor]
     cls.add_constructor([])
@@ -13307,6 +13858,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     register_functions_ns3_dsr(module.get_submodule('dsr'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
@@ -13321,6 +13873,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def register_functions_ns3_dsr(module, root_module):
     return
 
diff -Naur ns-3.23/src/dsr/model/dsr-options.cc ns-3.24/src/dsr/model/dsr-options.cc
--- ns-3.23/src/dsr/model/dsr-options.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/dsr/model/dsr-options.cc	2015-09-15 11:18:44.000000000 -0700
@@ -84,7 +84,7 @@
     .AddTraceSource ("Rx",
                      "Receive DSR packet.",
                      MakeTraceSourceAccessor (&DsrOptions::m_rxPacketTrace),
-                     "ns3::Packet::TracedCallback")
+                     "ns3::dsr::DsrOptionSRHeader::TracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.23/src/dsr/model/dsr-rcache.cc ns-3.24/src/dsr/model/dsr-rcache.cc
--- ns-3.23/src/dsr/model/dsr-rcache.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/dsr/model/dsr-rcache.cc	2015-09-15 11:18:44.000000000 -0700
@@ -1222,7 +1222,7 @@
        i != m_arp.end (); ++i)
     {
       ArpCache::Entry * entry = (*i)->Lookup (addr);
-      if (entry != 0 && entry->IsAlive () && !entry->IsExpired ())
+      if (entry != 0 && (entry->IsAlive () || entry->IsPermanent ()) && !entry->IsExpired ())
         {
           hwaddr = Mac48Address::ConvertFrom (entry->GetMacAddress ());
           break;
diff -Naur ns-3.23/src/dsr/model/dsr-routing.cc ns-3.24/src/dsr/model/dsr-routing.cc
--- ns-3.23/src/dsr/model/dsr-routing.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/dsr/model/dsr-routing.cc	2015-09-15 11:18:44.000000000 -0700
@@ -343,7 +343,7 @@
     .AddTraceSource ("Tx",
                      "Send DSR packet.",
                      MakeTraceSourceAccessor (&DsrRouting::m_txPacketTrace),
-                     "ns3::DsrOptionSRHeader::TracedCallback")
+                     "ns3::dsr::DsrOptionSRHeader::TracedCallback")
     .AddTraceSource ("Drop",
                      "Drop DSR packet",
                      MakeTraceSourceAccessor (&DsrRouting::m_dropTrace),
@@ -416,7 +416,7 @@
             }
         }
     }
-  Object::NotifyNewAggregate ();
+  IpL4Protocol::NotifyNewAggregate ();
   Simulator::ScheduleNow (&DsrRouting::Start, this);
 }
 
diff -Naur ns-3.23/src/energy/bindings/callbacks_list.py ns-3.24/src/energy/bindings/callbacks_list.py
--- ns-3.23/src/energy/bindings/callbacks_list.py	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/energy/bindings/callbacks_list.py	2015-09-15 11:18:44.000000000 -0700
@@ -1,6 +1,3 @@
 callback_classes = [
-    ['void', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
-    ['void', 'double', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
-    ['void', 'int', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::NetDevice>', 'ns3::Ptr<ns3::Packet const>', 'unsigned short', 'ns3::Address const&', 'ns3::Address const&', 'ns3::NetDevice::PacketType', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
 ]
diff -Naur ns-3.23/src/energy/bindings/modulegen__gcc_ILP32.py ns-3.24/src/energy/bindings/modulegen__gcc_ILP32.py
--- ns-3.23/src/energy/bindings/modulegen__gcc_ILP32.py	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/energy/bindings/modulegen__gcc_ILP32.py	2015-09-15 11:18:44.000000000 -0700
@@ -20,14 +20,6 @@
 def register_types(module):
     root_module = module.get_root()
     
-    ## wifi-mode.h (module 'wifi'): ns3::WifiCodeRate [enumeration]
-    module.add_enum('WifiCodeRate', ['WIFI_CODE_RATE_UNDEFINED', 'WIFI_CODE_RATE_3_4', 'WIFI_CODE_RATE_2_3', 'WIFI_CODE_RATE_1_2', 'WIFI_CODE_RATE_5_6'], import_from_module='ns.wifi')
-    ## wifi-preamble.h (module 'wifi'): ns3::WifiPreamble [enumeration]
-    module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF', 'WIFI_PREAMBLE_NONE'], import_from_module='ns.wifi')
-    ## wifi-phy-standard.h (module 'wifi'): ns3::WifiPhyStandard [enumeration]
-    module.add_enum('WifiPhyStandard', ['WIFI_PHY_STANDARD_80211a', 'WIFI_PHY_STANDARD_80211b', 'WIFI_PHY_STANDARD_80211g', 'WIFI_PHY_STANDARD_80211_10MHZ', 'WIFI_PHY_STANDARD_80211_5MHZ', 'WIFI_PHY_STANDARD_holland', 'WIFI_PHY_STANDARD_80211n_2_4GHZ', 'WIFI_PHY_STANDARD_80211n_5GHZ'], import_from_module='ns.wifi')
-    ## wifi-mode.h (module 'wifi'): ns3::WifiModulationClass [enumeration]
-    module.add_enum('WifiModulationClass', ['WIFI_MOD_CLASS_UNKNOWN', 'WIFI_MOD_CLASS_IR', 'WIFI_MOD_CLASS_FHSS', 'WIFI_MOD_CLASS_DSSS', 'WIFI_MOD_CLASS_ERP_PBCC', 'WIFI_MOD_CLASS_DSSS_OFDM', 'WIFI_MOD_CLASS_ERP_OFDM', 'WIFI_MOD_CLASS_OFDM', 'WIFI_MOD_CLASS_HT'], import_from_module='ns.wifi')
     ## address.h (module 'network'): ns3::Address [class]
     module.add_class('Address', import_from_module='ns.network')
     ## address.h (module 'network'): ns3::Address::MaxSize_e [enumeration]
@@ -36,20 +28,6 @@
     module.add_class('AttributeConstructionList', import_from_module='ns.core')
     ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item [struct]
     module.add_class('Item', import_from_module='ns.core', outer_class=root_module['ns3::AttributeConstructionList'])
-    ## buffer.h (module 'network'): ns3::Buffer [class]
-    module.add_class('Buffer', import_from_module='ns.network')
-    ## buffer.h (module 'network'): ns3::Buffer::Iterator [class]
-    module.add_class('Iterator', import_from_module='ns.network', outer_class=root_module['ns3::Buffer'])
-    ## packet.h (module 'network'): ns3::ByteTagIterator [class]
-    module.add_class('ByteTagIterator', import_from_module='ns.network')
-    ## packet.h (module 'network'): ns3::ByteTagIterator::Item [class]
-    module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::ByteTagIterator'])
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList [class]
-    module.add_class('ByteTagList', import_from_module='ns.network')
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator [class]
-    module.add_class('Iterator', import_from_module='ns.network', outer_class=root_module['ns3::ByteTagList'])
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item [struct]
-    module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::ByteTagList::Iterator'])
     ## callback.h (module 'core'): ns3::CallbackBase [class]
     module.add_class('CallbackBase', import_from_module='ns.core')
     ## device-energy-model-container.h (module 'energy'): ns3::DeviceEnergyModelContainer [class]
@@ -86,30 +64,10 @@
     module.add_class('ObjectDeleter', import_from_module='ns.core')
     ## object-factory.h (module 'core'): ns3::ObjectFactory [class]
     module.add_class('ObjectFactory', import_from_module='ns.core')
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata [class]
-    module.add_class('PacketMetadata', import_from_module='ns.network')
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item [struct]
-    module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::PacketMetadata'])
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item [enumeration]
-    module.add_enum('', ['PAYLOAD', 'HEADER', 'TRAILER'], outer_class=root_module['ns3::PacketMetadata::Item'], import_from_module='ns.network')
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::ItemIterator [class]
-    module.add_class('ItemIterator', import_from_module='ns.network', outer_class=root_module['ns3::PacketMetadata'])
-    ## packet.h (module 'network'): ns3::PacketTagIterator [class]
-    module.add_class('PacketTagIterator', import_from_module='ns.network')
-    ## packet.h (module 'network'): ns3::PacketTagIterator::Item [class]
-    module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagIterator'])
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList [class]
-    module.add_class('PacketTagList', import_from_module='ns.network')
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
-    module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
-    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## rv-battery-model-helper.h (module 'energy'): ns3::RvBatteryModelHelper [class]
     module.add_class('RvBatteryModelHelper', parent=root_module['ns3::EnergySourceHelper'])
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
-    ## tag.h (module 'network'): ns3::Tag [class]
-    module.add_class('Tag', import_from_module='ns.network', parent=root_module['ns3::ObjectBase'])
     ## tag-buffer.h (module 'network'): ns3::TagBuffer [class]
     module.add_class('TagBuffer', import_from_module='ns.network')
     ## nstime.h (module 'core'): ns3::TimeWithUnit [class]
@@ -124,18 +82,6 @@
     module.add_class('AttributeInformation', import_from_module='ns.core', outer_class=root_module['ns3::TypeId'])
     ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation [struct]
     module.add_class('TraceSourceInformation', import_from_module='ns.core', outer_class=root_module['ns3::TypeId'])
-    ## wifi-mode.h (module 'wifi'): ns3::WifiMode [class]
-    module.add_class('WifiMode', import_from_module='ns.wifi')
-    ## wifi-mode.h (module 'wifi'): ns3::WifiModeFactory [class]
-    module.add_class('WifiModeFactory', import_from_module='ns.wifi')
-    ## wifi-phy.h (module 'wifi'): ns3::WifiPhyListener [class]
-    module.add_class('WifiPhyListener', allow_subclassing=True, import_from_module='ns.wifi')
-    ## wifi-radio-energy-model-helper.h (module 'energy'): ns3::WifiRadioEnergyModelHelper [class]
-    module.add_class('WifiRadioEnergyModelHelper', parent=root_module['ns3::DeviceEnergyModelHelper'])
-    ## wifi-radio-energy-model.h (module 'energy'): ns3::WifiRadioEnergyModelPhyListener [class]
-    module.add_class('WifiRadioEnergyModelPhyListener', parent=root_module['ns3::WifiPhyListener'])
-    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector [class]
-    module.add_class('WifiTxVector', import_from_module='ns.wifi')
     ## empty.h (module 'core'): ns3::empty [class]
     module.add_class('empty', import_from_module='ns.core')
     ## int64x64-double.h (module 'core'): ns3::int64x64_t [class]
@@ -146,10 +92,6 @@
     module.add_class('BasicEnergyHarvesterHelper', parent=root_module['ns3::EnergyHarvesterHelper'])
     ## basic-energy-source-helper.h (module 'energy'): ns3::BasicEnergySourceHelper [class]
     module.add_class('BasicEnergySourceHelper', parent=root_module['ns3::EnergySourceHelper'])
-    ## chunk.h (module 'network'): ns3::Chunk [class]
-    module.add_class('Chunk', import_from_module='ns.network', parent=root_module['ns3::ObjectBase'])
-    ## header.h (module 'network'): ns3::Header [class]
-    module.add_class('Header', import_from_module='ns.network', parent=root_module['ns3::Chunk'])
     ## object.h (module 'core'): ns3::Object [class]
     module.add_class('Object', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
     ## object.h (module 'core'): ns3::Object::AggregateIterator [class]
@@ -170,10 +112,6 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
-    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > [class]
-    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Packet', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Packet>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TraceSourceAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TraceSourceAccessor>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## nstime.h (module 'core'): ns3::Time [class]
@@ -188,20 +126,12 @@
     module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['ns3::Time'])
     ## traced-value.h (module 'core'): ns3::TracedValue<ns3::Time> [class]
     root_module['ns3::TracedValue< ns3::Time >'].implicitly_converts_to(root_module['ns3::Time'])
-    ## trailer.h (module 'network'): ns3::Trailer [class]
-    module.add_class('Trailer', import_from_module='ns.network', parent=root_module['ns3::Chunk'])
     ## random-variable-stream.h (module 'core'): ns3::TriangularRandomVariable [class]
     module.add_class('TriangularRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## random-variable-stream.h (module 'core'): ns3::UniformRandomVariable [class]
     module.add_class('UniformRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## random-variable-stream.h (module 'core'): ns3::WeibullRandomVariable [class]
     module.add_class('WeibullRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
-    ## wifi-phy.h (module 'wifi'): ns3::WifiPhy [class]
-    module.add_class('WifiPhy', import_from_module='ns.wifi', parent=root_module['ns3::Object'])
-    ## wifi-phy.h (module 'wifi'): ns3::WifiPhy::State [enumeration]
-    module.add_enum('State', ['IDLE', 'CCA_BUSY', 'TX', 'RX', 'SWITCHING', 'SLEEP'], outer_class=root_module['ns3::WifiPhy'], import_from_module='ns.wifi')
-    ## wifi-tx-current-model.h (module 'energy'): ns3::WifiTxCurrentModel [class]
-    module.add_class('WifiTxCurrentModel', parent=root_module['ns3::Object'])
     ## random-variable-stream.h (module 'core'): ns3::ZetaRandomVariable [class]
     module.add_class('ZetaRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## random-variable-stream.h (module 'core'): ns3::ZipfRandomVariable [class]
@@ -274,16 +204,12 @@
     module.add_class('Ipv6PrefixValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## li-ion-energy-source.h (module 'energy'): ns3::LiIonEnergySource [class]
     module.add_class('LiIonEnergySource', parent=root_module['ns3::EnergySource'])
-    ## wifi-tx-current-model.h (module 'energy'): ns3::LinearWifiTxCurrentModel [class]
-    module.add_class('LinearWifiTxCurrentModel', parent=root_module['ns3::WifiTxCurrentModel'])
     ## random-variable-stream.h (module 'core'): ns3::LogNormalRandomVariable [class]
     module.add_class('LogNormalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
     module.add_class('NetDevice', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice::PacketType [enumeration]
     module.add_enum('PacketType', ['PACKET_HOST', 'NS3_PACKET_HOST', 'PACKET_BROADCAST', 'NS3_PACKET_BROADCAST', 'PACKET_MULTICAST', 'NS3_PACKET_MULTICAST', 'PACKET_OTHERHOST', 'NS3_PACKET_OTHERHOST'], outer_class=root_module['ns3::NetDevice'], import_from_module='ns.network')
-    ## nix-vector.h (module 'network'): ns3::NixVector [class]
-    module.add_class('NixVector', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     ## node.h (module 'network'): ns3::Node [class]
     module.add_class('Node', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## random-variable-stream.h (module 'core'): ns3::NormalRandomVariable [class]
@@ -292,8 +218,6 @@
     module.add_class('ObjectFactoryChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## object-factory.h (module 'core'): ns3::ObjectFactoryValue [class]
     module.add_class('ObjectFactoryValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
-    ## packet.h (module 'network'): ns3::Packet [class]
-    module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable [class]
     module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## rv-battery-model.h (module 'energy'): ns3::RvBatteryModel [class]
@@ -308,12 +232,6 @@
     module.add_class('TypeIdValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## uinteger.h (module 'core'): ns3::UintegerValue [class]
     module.add_class('UintegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
-    ## wifi-mode.h (module 'wifi'): ns3::WifiModeChecker [class]
-    module.add_class('WifiModeChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
-    ## wifi-mode.h (module 'wifi'): ns3::WifiModeValue [class]
-    module.add_class('WifiModeValue', import_from_module='ns.wifi', parent=root_module['ns3::AttributeValue'])
-    ## wifi-radio-energy-model.h (module 'energy'): ns3::WifiRadioEnergyModel [class]
-    module.add_class('WifiRadioEnergyModel', parent=root_module['ns3::DeviceEnergyModel'])
     ## address.h (module 'network'): ns3::AddressChecker [class]
     module.add_class('AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## address.h (module 'network'): ns3::AddressValue [class]
@@ -322,19 +240,6 @@
     module.add_class('BasicEnergyHarvester', parent=root_module['ns3::EnergyHarvester'])
     ## basic-energy-source.h (module 'energy'): ns3::BasicEnergySource [class]
     module.add_class('BasicEnergySource', parent=root_module['ns3::EnergySource'])
-    module.add_container('ns3::WifiModeList', 'ns3::WifiMode', container_type=u'vector')
-    typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >', u'ns3::WifiMcsList')
-    typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >*', u'ns3::WifiMcsList*')
-    typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >&', u'ns3::WifiMcsList&')
-    typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >', u'ns3::WifiModeList')
-    typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >*', u'ns3::WifiModeList*')
-    typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >&', u'ns3::WifiModeList&')
-    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >', u'ns3::WifiModeListIterator')
-    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >*', u'ns3::WifiModeListIterator*')
-    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >&', u'ns3::WifiModeListIterator&')
-    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >', u'ns3::WifiMcsListIterator')
-    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >*', u'ns3::WifiMcsListIterator*')
-    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >&', u'ns3::WifiMcsListIterator&')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -348,6 +253,12 @@
     register_types_ns3_Hash(nested_module)
     
     
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
+    
     ## Register a nested module for the namespace internal
     
     nested_module = module.add_cpp_namespace('internal')
@@ -388,6 +299,37 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *', u'ns3::TracedValueCallback::Bool')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) **', u'ns3::TracedValueCallback::Bool*')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *&', u'ns3::TracedValueCallback::Bool&')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *', u'ns3::TracedValueCallback::Double')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) **', u'ns3::TracedValueCallback::Double*')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *&', u'ns3::TracedValueCallback::Double&')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *', u'ns3::TracedValueCallback::Int8')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) **', u'ns3::TracedValueCallback::Int8*')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *&', u'ns3::TracedValueCallback::Int8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *', u'ns3::TracedValueCallback::Uint8')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) **', u'ns3::TracedValueCallback::Uint8*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *&', u'ns3::TracedValueCallback::Uint8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *', u'ns3::TracedValueCallback::Uint32')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) **', u'ns3::TracedValueCallback::Uint32*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *&', u'ns3::TracedValueCallback::Uint32&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *', u'ns3::TracedValueCallback::Int16')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) **', u'ns3::TracedValueCallback::Int16*')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *&', u'ns3::TracedValueCallback::Int16&')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *', u'ns3::TracedValueCallback::Int32')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) **', u'ns3::TracedValueCallback::Int32*')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *&', u'ns3::TracedValueCallback::Int32&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *', u'ns3::TracedValueCallback::Uint16')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) **', u'ns3::TracedValueCallback::Uint16*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *&', u'ns3::TracedValueCallback::Uint16&')
+
 def register_types_ns3_internal(module):
     root_module = module.get_root()
     
@@ -396,13 +338,6 @@
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
     register_Ns3AttributeConstructionListItem_methods(root_module, root_module['ns3::AttributeConstructionList::Item'])
-    register_Ns3Buffer_methods(root_module, root_module['ns3::Buffer'])
-    register_Ns3BufferIterator_methods(root_module, root_module['ns3::Buffer::Iterator'])
-    register_Ns3ByteTagIterator_methods(root_module, root_module['ns3::ByteTagIterator'])
-    register_Ns3ByteTagIteratorItem_methods(root_module, root_module['ns3::ByteTagIterator::Item'])
-    register_Ns3ByteTagList_methods(root_module, root_module['ns3::ByteTagList'])
-    register_Ns3ByteTagListIterator_methods(root_module, root_module['ns3::ByteTagList::Iterator'])
-    register_Ns3ByteTagListIteratorItem_methods(root_module, root_module['ns3::ByteTagList::Iterator::Item'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3DeviceEnergyModelContainer_methods(root_module, root_module['ns3::DeviceEnergyModelContainer'])
     register_Ns3DeviceEnergyModelHelper_methods(root_module, root_module['ns3::DeviceEnergyModelHelper'])
@@ -419,34 +354,18 @@
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
     register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
     register_Ns3ObjectFactory_methods(root_module, root_module['ns3::ObjectFactory'])
-    register_Ns3PacketMetadata_methods(root_module, root_module['ns3::PacketMetadata'])
-    register_Ns3PacketMetadataItem_methods(root_module, root_module['ns3::PacketMetadata::Item'])
-    register_Ns3PacketMetadataItemIterator_methods(root_module, root_module['ns3::PacketMetadata::ItemIterator'])
-    register_Ns3PacketTagIterator_methods(root_module, root_module['ns3::PacketTagIterator'])
-    register_Ns3PacketTagIteratorItem_methods(root_module, root_module['ns3::PacketTagIterator::Item'])
-    register_Ns3PacketTagList_methods(root_module, root_module['ns3::PacketTagList'])
-    register_Ns3PacketTagListTagData_methods(root_module, root_module['ns3::PacketTagList::TagData'])
     register_Ns3RvBatteryModelHelper_methods(root_module, root_module['ns3::RvBatteryModelHelper'])
     register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
-    register_Ns3Tag_methods(root_module, root_module['ns3::Tag'])
     register_Ns3TagBuffer_methods(root_module, root_module['ns3::TagBuffer'])
     register_Ns3TimeWithUnit_methods(root_module, root_module['ns3::TimeWithUnit'])
     register_Ns3TracedValue__Double_methods(root_module, root_module['ns3::TracedValue< double >'])
     register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
     register_Ns3TypeIdAttributeInformation_methods(root_module, root_module['ns3::TypeId::AttributeInformation'])
     register_Ns3TypeIdTraceSourceInformation_methods(root_module, root_module['ns3::TypeId::TraceSourceInformation'])
-    register_Ns3WifiMode_methods(root_module, root_module['ns3::WifiMode'])
-    register_Ns3WifiModeFactory_methods(root_module, root_module['ns3::WifiModeFactory'])
-    register_Ns3WifiPhyListener_methods(root_module, root_module['ns3::WifiPhyListener'])
-    register_Ns3WifiRadioEnergyModelHelper_methods(root_module, root_module['ns3::WifiRadioEnergyModelHelper'])
-    register_Ns3WifiRadioEnergyModelPhyListener_methods(root_module, root_module['ns3::WifiRadioEnergyModelPhyListener'])
-    register_Ns3WifiTxVector_methods(root_module, root_module['ns3::WifiTxVector'])
     register_Ns3Empty_methods(root_module, root_module['ns3::empty'])
     register_Ns3Int64x64_t_methods(root_module, root_module['ns3::int64x64_t'])
     register_Ns3BasicEnergyHarvesterHelper_methods(root_module, root_module['ns3::BasicEnergyHarvesterHelper'])
     register_Ns3BasicEnergySourceHelper_methods(root_module, root_module['ns3::BasicEnergySourceHelper'])
-    register_Ns3Chunk_methods(root_module, root_module['ns3::Chunk'])
-    register_Ns3Header_methods(root_module, root_module['ns3::Header'])
     register_Ns3Object_methods(root_module, root_module['ns3::Object'])
     register_Ns3ObjectAggregateIterator_methods(root_module, root_module['ns3::Object::AggregateIterator'])
     register_Ns3RandomVariableStream_methods(root_module, root_module['ns3::RandomVariableStream'])
@@ -457,18 +376,13 @@
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
     register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
-    register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
-    register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3Time_methods(root_module, root_module['ns3::Time'])
     register_Ns3TraceSourceAccessor_methods(root_module, root_module['ns3::TraceSourceAccessor'])
     register_Ns3TracedValue__Ns3Time_methods(root_module, root_module['ns3::TracedValue< ns3::Time >'])
-    register_Ns3Trailer_methods(root_module, root_module['ns3::Trailer'])
     register_Ns3TriangularRandomVariable_methods(root_module, root_module['ns3::TriangularRandomVariable'])
     register_Ns3UniformRandomVariable_methods(root_module, root_module['ns3::UniformRandomVariable'])
     register_Ns3WeibullRandomVariable_methods(root_module, root_module['ns3::WeibullRandomVariable'])
-    register_Ns3WifiPhy_methods(root_module, root_module['ns3::WifiPhy'])
-    register_Ns3WifiTxCurrentModel_methods(root_module, root_module['ns3::WifiTxCurrentModel'])
     register_Ns3ZetaRandomVariable_methods(root_module, root_module['ns3::ZetaRandomVariable'])
     register_Ns3ZipfRandomVariable_methods(root_module, root_module['ns3::ZipfRandomVariable'])
     register_Ns3AttributeAccessor_methods(root_module, root_module['ns3::AttributeAccessor'])
@@ -505,15 +419,12 @@
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
     register_Ns3LiIonEnergySource_methods(root_module, root_module['ns3::LiIonEnergySource'])
-    register_Ns3LinearWifiTxCurrentModel_methods(root_module, root_module['ns3::LinearWifiTxCurrentModel'])
     register_Ns3LogNormalRandomVariable_methods(root_module, root_module['ns3::LogNormalRandomVariable'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
-    register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
     register_Ns3NormalRandomVariable_methods(root_module, root_module['ns3::NormalRandomVariable'])
     register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
-    register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
     register_Ns3RvBatteryModel_methods(root_module, root_module['ns3::RvBatteryModel'])
     register_Ns3SimpleDeviceEnergyModel_methods(root_module, root_module['ns3::SimpleDeviceEnergyModel'])
@@ -521,9 +432,6 @@
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
     register_Ns3UintegerValue_methods(root_module, root_module['ns3::UintegerValue'])
-    register_Ns3WifiModeChecker_methods(root_module, root_module['ns3::WifiModeChecker'])
-    register_Ns3WifiModeValue_methods(root_module, root_module['ns3::WifiModeValue'])
-    register_Ns3WifiRadioEnergyModel_methods(root_module, root_module['ns3::WifiRadioEnergyModel'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3BasicEnergyHarvester_methods(root_module, root_module['ns3::BasicEnergyHarvester'])
@@ -644,363 +552,6 @@
     cls.add_instance_attribute('value', 'ns3::Ptr< ns3::AttributeValue >', is_const=False)
     return
 
-def register_Ns3Buffer_methods(root_module, cls):
-    ## buffer.h (module 'network'): ns3::Buffer::Buffer() [constructor]
-    cls.add_constructor([])
-    ## buffer.h (module 'network'): ns3::Buffer::Buffer(uint32_t dataSize) [constructor]
-    cls.add_constructor([param('uint32_t', 'dataSize')])
-    ## buffer.h (module 'network'): ns3::Buffer::Buffer(uint32_t dataSize, bool initialize) [constructor]
-    cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
-    ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
-    cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
-    cls.add_method('AddAtEnd', 
-                   'bool', 
-                   [param('uint32_t', 'end')])
-    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
-    cls.add_method('AddAtEnd', 
-                   'void', 
-                   [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
-    cls.add_method('AddAtStart', 
-                   'bool', 
-                   [param('uint32_t', 'start')])
-    ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
-    cls.add_method('Begin', 
-                   'ns3::Buffer::Iterator', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): void ns3::Buffer::CopyData(std::ostream * os, uint32_t size) const [member function]
-    cls.add_method('CopyData', 
-                   'void', 
-                   [param('std::ostream *', 'os'), param('uint32_t', 'size')], 
-                   is_const=True)
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::CopyData(uint8_t * buffer, uint32_t size) const [member function]
-    cls.add_method('CopyData', 
-                   'uint32_t', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')], 
-                   is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFragment(uint32_t start, uint32_t length) const [member function]
-    cls.add_method('CreateFragment', 
-                   'ns3::Buffer', 
-                   [param('uint32_t', 'start'), param('uint32_t', 'length')], 
-                   is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::End() const [member function]
-    cls.add_method('End', 
-                   'ns3::Buffer::Iterator', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSize() const [member function]
-    cls.add_method('GetSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): uint8_t const * ns3::Buffer::PeekData() const [member function]
-    cls.add_method('PeekData', 
-                   'uint8_t const *', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): void ns3::Buffer::RemoveAtEnd(uint32_t end) [member function]
-    cls.add_method('RemoveAtEnd', 
-                   'void', 
-                   [param('uint32_t', 'end')])
-    ## buffer.h (module 'network'): void ns3::Buffer::RemoveAtStart(uint32_t start) [member function]
-    cls.add_method('RemoveAtStart', 
-                   'void', 
-                   [param('uint32_t', 'start')])
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
-    cls.add_method('Serialize', 
-                   'uint32_t', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'maxSize')], 
-                   is_const=True)
-    return
-
-def register_Ns3BufferIterator_methods(root_module, cls):
-    ## buffer.h (module 'network'): ns3::Buffer::Iterator::Iterator(ns3::Buffer::Iterator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Buffer::Iterator const &', 'arg0')])
-    ## buffer.h (module 'network'): ns3::Buffer::Iterator::Iterator() [constructor]
-    cls.add_constructor([])
-    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::CalculateIpChecksum(uint16_t size) [member function]
-    cls.add_method('CalculateIpChecksum', 
-                   'uint16_t', 
-                   [param('uint16_t', 'size')])
-    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::CalculateIpChecksum(uint16_t size, uint32_t initialChecksum) [member function]
-    cls.add_method('CalculateIpChecksum', 
-                   'uint16_t', 
-                   [param('uint16_t', 'size'), param('uint32_t', 'initialChecksum')])
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetDistanceFrom(ns3::Buffer::Iterator const & o) const [member function]
-    cls.add_method('GetDistanceFrom', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator const &', 'o')], 
-                   is_const=True)
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
-    cls.add_method('GetSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): bool ns3::Buffer::Iterator::IsEnd() const [member function]
-    cls.add_method('IsEnd', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): bool ns3::Buffer::Iterator::IsStart() const [member function]
-    cls.add_method('IsStart', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Next() [member function]
-    cls.add_method('Next', 
-                   'void', 
-                   [])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Next(uint32_t delta) [member function]
-    cls.add_method('Next', 
-                   'void', 
-                   [param('uint32_t', 'delta')])
-    ## buffer.h (module 'network'): uint8_t ns3::Buffer::Iterator::PeekU8() [member function]
-    cls.add_method('PeekU8', 
-                   'uint8_t', 
-                   [])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Prev() [member function]
-    cls.add_method('Prev', 
-                   'void', 
-                   [])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Prev(uint32_t delta) [member function]
-    cls.add_method('Prev', 
-                   'void', 
-                   [param('uint32_t', 'delta')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Read(uint8_t * buffer, uint32_t size) [member function]
-    cls.add_method('Read', 
-                   'void', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Read(ns3::Buffer::Iterator start, uint32_t size) [member function]
-    cls.add_method('Read', 
-                   'void', 
-                   [param('ns3::Buffer::Iterator', 'start'), param('uint32_t', 'size')])
-    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::ReadLsbtohU16() [member function]
-    cls.add_method('ReadLsbtohU16', 
-                   'uint16_t', 
-                   [])
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::ReadLsbtohU32() [member function]
-    cls.add_method('ReadLsbtohU32', 
-                   'uint32_t', 
-                   [])
-    ## buffer.h (module 'network'): uint64_t ns3::Buffer::Iterator::ReadLsbtohU64() [member function]
-    cls.add_method('ReadLsbtohU64', 
-                   'uint64_t', 
-                   [])
-    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::ReadNtohU16() [member function]
-    cls.add_method('ReadNtohU16', 
-                   'uint16_t', 
-                   [])
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::ReadNtohU32() [member function]
-    cls.add_method('ReadNtohU32', 
-                   'uint32_t', 
-                   [])
-    ## buffer.h (module 'network'): uint64_t ns3::Buffer::Iterator::ReadNtohU64() [member function]
-    cls.add_method('ReadNtohU64', 
-                   'uint64_t', 
-                   [])
-    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::ReadU16() [member function]
-    cls.add_method('ReadU16', 
-                   'uint16_t', 
-                   [])
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::ReadU32() [member function]
-    cls.add_method('ReadU32', 
-                   'uint32_t', 
-                   [])
-    ## buffer.h (module 'network'): uint64_t ns3::Buffer::Iterator::ReadU64() [member function]
-    cls.add_method('ReadU64', 
-                   'uint64_t', 
-                   [])
-    ## buffer.h (module 'network'): uint8_t ns3::Buffer::Iterator::ReadU8() [member function]
-    cls.add_method('ReadU8', 
-                   'uint8_t', 
-                   [])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Write(uint8_t const * buffer, uint32_t size) [member function]
-    cls.add_method('Write', 
-                   'void', 
-                   [param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Write(ns3::Buffer::Iterator start, ns3::Buffer::Iterator end) [member function]
-    cls.add_method('Write', 
-                   'void', 
-                   [param('ns3::Buffer::Iterator', 'start'), param('ns3::Buffer::Iterator', 'end')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtolsbU16(uint16_t data) [member function]
-    cls.add_method('WriteHtolsbU16', 
-                   'void', 
-                   [param('uint16_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtolsbU32(uint32_t data) [member function]
-    cls.add_method('WriteHtolsbU32', 
-                   'void', 
-                   [param('uint32_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtolsbU64(uint64_t data) [member function]
-    cls.add_method('WriteHtolsbU64', 
-                   'void', 
-                   [param('uint64_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtonU16(uint16_t data) [member function]
-    cls.add_method('WriteHtonU16', 
-                   'void', 
-                   [param('uint16_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtonU32(uint32_t data) [member function]
-    cls.add_method('WriteHtonU32', 
-                   'void', 
-                   [param('uint32_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtonU64(uint64_t data) [member function]
-    cls.add_method('WriteHtonU64', 
-                   'void', 
-                   [param('uint64_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU16(uint16_t data) [member function]
-    cls.add_method('WriteU16', 
-                   'void', 
-                   [param('uint16_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU32(uint32_t data) [member function]
-    cls.add_method('WriteU32', 
-                   'void', 
-                   [param('uint32_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU64(uint64_t data) [member function]
-    cls.add_method('WriteU64', 
-                   'void', 
-                   [param('uint64_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU8(uint8_t data) [member function]
-    cls.add_method('WriteU8', 
-                   'void', 
-                   [param('uint8_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU8(uint8_t data, uint32_t len) [member function]
-    cls.add_method('WriteU8', 
-                   'void', 
-                   [param('uint8_t', 'data'), param('uint32_t', 'len')])
-    return
-
-def register_Ns3ByteTagIterator_methods(root_module, cls):
-    ## packet.h (module 'network'): ns3::ByteTagIterator::ByteTagIterator(ns3::ByteTagIterator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ByteTagIterator const &', 'arg0')])
-    ## packet.h (module 'network'): bool ns3::ByteTagIterator::HasNext() const [member function]
-    cls.add_method('HasNext', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::ByteTagIterator::Item ns3::ByteTagIterator::Next() [member function]
-    cls.add_method('Next', 
-                   'ns3::ByteTagIterator::Item', 
-                   [])
-    return
-
-def register_Ns3ByteTagIteratorItem_methods(root_module, cls):
-    ## packet.h (module 'network'): ns3::ByteTagIterator::Item::Item(ns3::ByteTagIterator::Item const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ByteTagIterator::Item const &', 'arg0')])
-    ## packet.h (module 'network'): uint32_t ns3::ByteTagIterator::Item::GetEnd() const [member function]
-    cls.add_method('GetEnd', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint32_t ns3::ByteTagIterator::Item::GetStart() const [member function]
-    cls.add_method('GetStart', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::ByteTagIterator::Item::GetTag(ns3::Tag & tag) const [member function]
-    cls.add_method('GetTag', 
-                   'void', 
-                   [param('ns3::Tag &', 'tag')], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::TypeId ns3::ByteTagIterator::Item::GetTypeId() const [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True)
-    return
-
-def register_Ns3ByteTagList_methods(root_module, cls):
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::ByteTagList() [constructor]
-    cls.add_constructor([])
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::ByteTagList(ns3::ByteTagList const & o) [copy constructor]
-    cls.add_constructor([param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): ns3::TagBuffer ns3::ByteTagList::Add(ns3::TypeId tid, uint32_t bufferSize, int32_t start, int32_t end) [member function]
-    cls.add_method('Add', 
-                   'ns3::TagBuffer', 
-                   [param('ns3::TypeId', 'tid'), param('uint32_t', 'bufferSize'), param('int32_t', 'start'), param('int32_t', 'end')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Add(ns3::ByteTagList const & o) [member function]
-    cls.add_method('Add', 
-                   'void', 
-                   [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
-    cls.add_method('AddAtEnd', 
-                   'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
-    cls.add_method('AddAtStart', 
-                   'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
-    cls.add_method('Begin', 
-                   'ns3::ByteTagList::Iterator', 
-                   [param('int32_t', 'offsetStart'), param('int32_t', 'offsetEnd')], 
-                   is_const=True)
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::RemoveAll() [member function]
-    cls.add_method('RemoveAll', 
-                   'void', 
-                   [])
-    return
-
-def register_Ns3ByteTagListIterator_methods(root_module, cls):
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Iterator(ns3::ByteTagList::Iterator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ByteTagList::Iterator const &', 'arg0')])
-    ## byte-tag-list.h (module 'network'): uint32_t ns3::ByteTagList::Iterator::GetOffsetStart() const [member function]
-    cls.add_method('GetOffsetStart', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## byte-tag-list.h (module 'network'): bool ns3::ByteTagList::Iterator::HasNext() const [member function]
-    cls.add_method('HasNext', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item ns3::ByteTagList::Iterator::Next() [member function]
-    cls.add_method('Next', 
-                   'ns3::ByteTagList::Iterator::Item', 
-                   [])
-    return
-
-def register_Ns3ByteTagListIteratorItem_methods(root_module, cls):
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::Item(ns3::ByteTagList::Iterator::Item const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ByteTagList::Iterator::Item const &', 'arg0')])
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::Item(ns3::TagBuffer buf) [constructor]
-    cls.add_constructor([param('ns3::TagBuffer', 'buf')])
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::buf [variable]
-    cls.add_instance_attribute('buf', 'ns3::TagBuffer', is_const=False)
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::end [variable]
-    cls.add_instance_attribute('end', 'int32_t', is_const=False)
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::size [variable]
-    cls.add_instance_attribute('size', 'uint32_t', is_const=False)
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::start [variable]
-    cls.add_instance_attribute('start', 'int32_t', is_const=False)
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::tid [variable]
-    cls.add_instance_attribute('tid', 'ns3::TypeId', is_const=False)
-    return
-
 def register_Ns3CallbackBase_methods(root_module, cls):
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::CallbackBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackBase const &', 'arg0')])
@@ -1014,11 +565,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3DeviceEnergyModelContainer_methods(root_module, cls):
@@ -1886,197 +1432,6 @@
                    [param('std::string', 'tid')])
     return
 
-def register_Ns3PacketMetadata_methods(root_module, cls):
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::PacketMetadata(uint64_t uid, uint32_t size) [constructor]
-    cls.add_constructor([param('uint64_t', 'uid'), param('uint32_t', 'size')])
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::PacketMetadata(ns3::PacketMetadata const & o) [copy constructor]
-    cls.add_constructor([param('ns3::PacketMetadata const &', 'o')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::AddAtEnd(ns3::PacketMetadata const & o) [member function]
-    cls.add_method('AddAtEnd', 
-                   'void', 
-                   [param('ns3::PacketMetadata const &', 'o')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::AddHeader(ns3::Header const & header, uint32_t size) [member function]
-    cls.add_method('AddHeader', 
-                   'void', 
-                   [param('ns3::Header const &', 'header'), param('uint32_t', 'size')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::AddPaddingAtEnd(uint32_t end) [member function]
-    cls.add_method('AddPaddingAtEnd', 
-                   'void', 
-                   [param('uint32_t', 'end')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::AddTrailer(ns3::Trailer const & trailer, uint32_t size) [member function]
-    cls.add_method('AddTrailer', 
-                   'void', 
-                   [param('ns3::Trailer const &', 'trailer'), param('uint32_t', 'size')])
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::ItemIterator ns3::PacketMetadata::BeginItem(ns3::Buffer buffer) const [member function]
-    cls.add_method('BeginItem', 
-                   'ns3::PacketMetadata::ItemIterator', 
-                   [param('ns3::Buffer', 'buffer')], 
-                   is_const=True)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata ns3::PacketMetadata::CreateFragment(uint32_t start, uint32_t end) const [member function]
-    cls.add_method('CreateFragment', 
-                   'ns3::PacketMetadata', 
-                   [param('uint32_t', 'start'), param('uint32_t', 'end')], 
-                   is_const=True)
-    ## packet-metadata.h (module 'network'): uint32_t ns3::PacketMetadata::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## packet-metadata.h (module 'network'): static void ns3::PacketMetadata::Enable() [member function]
-    cls.add_method('Enable', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    ## packet-metadata.h (module 'network'): static void ns3::PacketMetadata::EnableChecking() [member function]
-    cls.add_method('EnableChecking', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    ## packet-metadata.h (module 'network'): uint32_t ns3::PacketMetadata::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## packet-metadata.h (module 'network'): uint64_t ns3::PacketMetadata::GetUid() const [member function]
-    cls.add_method('GetUid', 
-                   'uint64_t', 
-                   [], 
-                   is_const=True)
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::RemoveAtEnd(uint32_t end) [member function]
-    cls.add_method('RemoveAtEnd', 
-                   'void', 
-                   [param('uint32_t', 'end')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::RemoveAtStart(uint32_t start) [member function]
-    cls.add_method('RemoveAtStart', 
-                   'void', 
-                   [param('uint32_t', 'start')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::RemoveHeader(ns3::Header const & header, uint32_t size) [member function]
-    cls.add_method('RemoveHeader', 
-                   'void', 
-                   [param('ns3::Header const &', 'header'), param('uint32_t', 'size')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::RemoveTrailer(ns3::Trailer const & trailer, uint32_t size) [member function]
-    cls.add_method('RemoveTrailer', 
-                   'void', 
-                   [param('ns3::Trailer const &', 'trailer'), param('uint32_t', 'size')])
-    ## packet-metadata.h (module 'network'): uint32_t ns3::PacketMetadata::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
-    cls.add_method('Serialize', 
-                   'uint32_t', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'maxSize')], 
-                   is_const=True)
-    return
-
-def register_Ns3PacketMetadataItem_methods(root_module, cls):
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::Item() [constructor]
-    cls.add_constructor([])
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::Item(ns3::PacketMetadata::Item const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PacketMetadata::Item const &', 'arg0')])
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::current [variable]
-    cls.add_instance_attribute('current', 'ns3::Buffer::Iterator', is_const=False)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::currentSize [variable]
-    cls.add_instance_attribute('currentSize', 'uint32_t', is_const=False)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::currentTrimedFromEnd [variable]
-    cls.add_instance_attribute('currentTrimedFromEnd', 'uint32_t', is_const=False)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::currentTrimedFromStart [variable]
-    cls.add_instance_attribute('currentTrimedFromStart', 'uint32_t', is_const=False)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::isFragment [variable]
-    cls.add_instance_attribute('isFragment', 'bool', is_const=False)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::tid [variable]
-    cls.add_instance_attribute('tid', 'ns3::TypeId', is_const=False)
-    return
-
-def register_Ns3PacketMetadataItemIterator_methods(root_module, cls):
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::ItemIterator::ItemIterator(ns3::PacketMetadata::ItemIterator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PacketMetadata::ItemIterator const &', 'arg0')])
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::ItemIterator::ItemIterator(ns3::PacketMetadata const * metadata, ns3::Buffer buffer) [constructor]
-    cls.add_constructor([param('ns3::PacketMetadata const *', 'metadata'), param('ns3::Buffer', 'buffer')])
-    ## packet-metadata.h (module 'network'): bool ns3::PacketMetadata::ItemIterator::HasNext() const [member function]
-    cls.add_method('HasNext', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item ns3::PacketMetadata::ItemIterator::Next() [member function]
-    cls.add_method('Next', 
-                   'ns3::PacketMetadata::Item', 
-                   [])
-    return
-
-def register_Ns3PacketTagIterator_methods(root_module, cls):
-    ## packet.h (module 'network'): ns3::PacketTagIterator::PacketTagIterator(ns3::PacketTagIterator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PacketTagIterator const &', 'arg0')])
-    ## packet.h (module 'network'): bool ns3::PacketTagIterator::HasNext() const [member function]
-    cls.add_method('HasNext', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::PacketTagIterator::Item ns3::PacketTagIterator::Next() [member function]
-    cls.add_method('Next', 
-                   'ns3::PacketTagIterator::Item', 
-                   [])
-    return
-
-def register_Ns3PacketTagIteratorItem_methods(root_module, cls):
-    ## packet.h (module 'network'): ns3::PacketTagIterator::Item::Item(ns3::PacketTagIterator::Item const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PacketTagIterator::Item const &', 'arg0')])
-    ## packet.h (module 'network'): void ns3::PacketTagIterator::Item::GetTag(ns3::Tag & tag) const [member function]
-    cls.add_method('GetTag', 
-                   'void', 
-                   [param('ns3::Tag &', 'tag')], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::TypeId ns3::PacketTagIterator::Item::GetTypeId() const [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True)
-    return
-
-def register_Ns3PacketTagList_methods(root_module, cls):
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::PacketTagList() [constructor]
-    cls.add_constructor([])
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::PacketTagList(ns3::PacketTagList const & o) [copy constructor]
-    cls.add_constructor([param('ns3::PacketTagList const &', 'o')])
-    ## packet-tag-list.h (module 'network'): void ns3::PacketTagList::Add(ns3::Tag const & tag) const [member function]
-    cls.add_method('Add', 
-                   'void', 
-                   [param('ns3::Tag const &', 'tag')], 
-                   is_const=True)
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData const * ns3::PacketTagList::Head() const [member function]
-    cls.add_method('Head', 
-                   'ns3::PacketTagList::TagData const *', 
-                   [], 
-                   is_const=True)
-    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Peek(ns3::Tag & tag) const [member function]
-    cls.add_method('Peek', 
-                   'bool', 
-                   [param('ns3::Tag &', 'tag')], 
-                   is_const=True)
-    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Remove(ns3::Tag & tag) [member function]
-    cls.add_method('Remove', 
-                   'bool', 
-                   [param('ns3::Tag &', 'tag')])
-    ## packet-tag-list.h (module 'network'): void ns3::PacketTagList::RemoveAll() [member function]
-    cls.add_method('RemoveAll', 
-                   'void', 
-                   [])
-    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
-    cls.add_method('Replace', 
-                   'bool', 
-                   [param('ns3::Tag &', 'tag')])
-    return
-
-def register_Ns3PacketTagListTagData_methods(root_module, cls):
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData() [constructor]
-    cls.add_constructor([])
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData(ns3::PacketTagList::TagData const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PacketTagList::TagData const &', 'arg0')])
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
-    cls.add_instance_attribute('count', 'uint32_t', is_const=False)
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
-    cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
-    cls.add_instance_attribute('tid', 'ns3::TypeId', is_const=False)
-    return
-
 def register_Ns3RvBatteryModelHelper_methods(root_module, cls):
     ## rv-battery-model-helper.h (module 'energy'): ns3::RvBatteryModelHelper::RvBatteryModelHelper(ns3::RvBatteryModelHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::RvBatteryModelHelper const &', 'arg0')])
@@ -2106,45 +1461,13 @@
                    is_static=True)
     return
 
-def register_Ns3Tag_methods(root_module, cls):
-    ## tag.h (module 'network'): ns3::Tag::Tag() [constructor]
-    cls.add_constructor([])
-    ## tag.h (module 'network'): ns3::Tag::Tag(ns3::Tag const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Tag const &', 'arg0')])
-    ## tag.h (module 'network'): void ns3::Tag::Deserialize(ns3::TagBuffer i) [member function]
-    cls.add_method('Deserialize', 
-                   'void', 
-                   [param('ns3::TagBuffer', 'i')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## tag.h (module 'network'): uint32_t ns3::Tag::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## tag.h (module 'network'): static ns3::TypeId ns3::Tag::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## tag.h (module 'network'): void ns3::Tag::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## tag.h (module 'network'): void ns3::Tag::Serialize(ns3::TagBuffer i) const [member function]
-    cls.add_method('Serialize', 
-                   'void', 
-                   [param('ns3::TagBuffer', 'i')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    return
-
-def register_Ns3TagBuffer_methods(root_module, cls):
-    ## tag-buffer.h (module 'network'): ns3::TagBuffer::TagBuffer(ns3::TagBuffer const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TagBuffer const &', 'arg0')])
-    ## tag-buffer.h (module 'network'): ns3::TagBuffer::TagBuffer(uint8_t * start, uint8_t * end) [constructor]
-    cls.add_constructor([param('uint8_t *', 'start'), param('uint8_t *', 'end')])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::CopyFrom(ns3::TagBuffer o) [member function]
-    cls.add_method('CopyFrom', 
+def register_Ns3TagBuffer_methods(root_module, cls):
+    ## tag-buffer.h (module 'network'): ns3::TagBuffer::TagBuffer(ns3::TagBuffer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::TagBuffer const &', 'arg0')])
+    ## tag-buffer.h (module 'network'): ns3::TagBuffer::TagBuffer(uint8_t * start, uint8_t * end) [constructor]
+    cls.add_constructor([param('uint8_t *', 'start'), param('uint8_t *', 'end')])
+    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::CopyFrom(ns3::TagBuffer o) [member function]
+    cls.add_method('CopyFrom', 
                    'void', 
                    [param('ns3::TagBuffer', 'o')])
     ## tag-buffer.h (module 'network'): void ns3::TagBuffer::Read(uint8_t * buffer, uint32_t size) [member function]
@@ -2448,276 +1771,6 @@
     cls.add_instance_attribute('name', 'std::string', is_const=False)
     return
 
-def register_Ns3WifiMode_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    cls.add_binary_comparison_operator('==')
-    ## wifi-mode.h (module 'wifi'): ns3::WifiMode::WifiMode(ns3::WifiMode const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiMode const &', 'arg0')])
-    ## wifi-mode.h (module 'wifi'): ns3::WifiMode::WifiMode() [constructor]
-    cls.add_constructor([])
-    ## wifi-mode.h (module 'wifi'): ns3::WifiMode::WifiMode(std::string name) [constructor]
-    cls.add_constructor([param('std::string', 'name')])
-    ## wifi-mode.h (module 'wifi'): uint32_t ns3::WifiMode::GetBandwidth() const [member function]
-    cls.add_method('GetBandwidth', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## wifi-mode.h (module 'wifi'): ns3::WifiCodeRate ns3::WifiMode::GetCodeRate() const [member function]
-    cls.add_method('GetCodeRate', 
-                   'ns3::WifiCodeRate', 
-                   [], 
-                   is_const=True)
-    ## wifi-mode.h (module 'wifi'): uint8_t ns3::WifiMode::GetConstellationSize() const [member function]
-    cls.add_method('GetConstellationSize', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetDataRate() const [member function]
-    cls.add_method('GetDataRate', 
-                   'uint64_t', 
-                   [], 
-                   is_const=True)
-    ## wifi-mode.h (module 'wifi'): ns3::WifiModulationClass ns3::WifiMode::GetModulationClass() const [member function]
-    cls.add_method('GetModulationClass', 
-                   'ns3::WifiModulationClass', 
-                   [], 
-                   is_const=True)
-    ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetPhyRate() const [member function]
-    cls.add_method('GetPhyRate', 
-                   'uint64_t', 
-                   [], 
-                   is_const=True)
-    ## wifi-mode.h (module 'wifi'): uint32_t ns3::WifiMode::GetUid() const [member function]
-    cls.add_method('GetUid', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## wifi-mode.h (module 'wifi'): std::string ns3::WifiMode::GetUniqueName() const [member function]
-    cls.add_method('GetUniqueName', 
-                   'std::string', 
-                   [], 
-                   is_const=True)
-    ## wifi-mode.h (module 'wifi'): bool ns3::WifiMode::IsMandatory() const [member function]
-    cls.add_method('IsMandatory', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    return
-
-def register_Ns3WifiModeFactory_methods(root_module, cls):
-    ## wifi-mode.h (module 'wifi'): ns3::WifiModeFactory::WifiModeFactory(ns3::WifiModeFactory const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiModeFactory const &', 'arg0')])
-    ## wifi-mode.h (module 'wifi'): static ns3::WifiMode ns3::WifiModeFactory::CreateWifiMode(std::string uniqueName, ns3::WifiModulationClass modClass, bool isMandatory, uint32_t bandwidth, uint32_t dataRate, ns3::WifiCodeRate codingRate, uint8_t constellationSize) [member function]
-    cls.add_method('CreateWifiMode', 
-                   'ns3::WifiMode', 
-                   [param('std::string', 'uniqueName'), param('ns3::WifiModulationClass', 'modClass'), param('bool', 'isMandatory'), param('uint32_t', 'bandwidth'), param('uint32_t', 'dataRate'), param('ns3::WifiCodeRate', 'codingRate'), param('uint8_t', 'constellationSize')], 
-                   is_static=True)
-    return
-
-def register_Ns3WifiPhyListener_methods(root_module, cls):
-    ## wifi-phy.h (module 'wifi'): ns3::WifiPhyListener::WifiPhyListener() [constructor]
-    cls.add_constructor([])
-    ## wifi-phy.h (module 'wifi'): ns3::WifiPhyListener::WifiPhyListener(ns3::WifiPhyListener const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiPhyListener const &', 'arg0')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhyListener::NotifyMaybeCcaBusyStart(ns3::Time duration) [member function]
-    cls.add_method('NotifyMaybeCcaBusyStart', 
-                   'void', 
-                   [param('ns3::Time', 'duration')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhyListener::NotifyRxEndError() [member function]
-    cls.add_method('NotifyRxEndError', 
-                   'void', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhyListener::NotifyRxEndOk() [member function]
-    cls.add_method('NotifyRxEndOk', 
-                   'void', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhyListener::NotifyRxStart(ns3::Time duration) [member function]
-    cls.add_method('NotifyRxStart', 
-                   'void', 
-                   [param('ns3::Time', 'duration')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhyListener::NotifySleep() [member function]
-    cls.add_method('NotifySleep', 
-                   'void', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhyListener::NotifySwitchingStart(ns3::Time duration) [member function]
-    cls.add_method('NotifySwitchingStart', 
-                   'void', 
-                   [param('ns3::Time', 'duration')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhyListener::NotifyTxStart(ns3::Time duration, double txPowerDbm) [member function]
-    cls.add_method('NotifyTxStart', 
-                   'void', 
-                   [param('ns3::Time', 'duration'), param('double', 'txPowerDbm')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhyListener::NotifyWakeup() [member function]
-    cls.add_method('NotifyWakeup', 
-                   'void', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    return
-
-def register_Ns3WifiRadioEnergyModelHelper_methods(root_module, cls):
-    ## wifi-radio-energy-model-helper.h (module 'energy'): ns3::WifiRadioEnergyModelHelper::WifiRadioEnergyModelHelper(ns3::WifiRadioEnergyModelHelper const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiRadioEnergyModelHelper const &', 'arg0')])
-    ## wifi-radio-energy-model-helper.h (module 'energy'): ns3::WifiRadioEnergyModelHelper::WifiRadioEnergyModelHelper() [constructor]
-    cls.add_constructor([])
-    ## wifi-radio-energy-model-helper.h (module 'energy'): void ns3::WifiRadioEnergyModelHelper::Set(std::string name, ns3::AttributeValue const & v) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'v')], 
-                   is_virtual=True)
-    ## wifi-radio-energy-model-helper.h (module 'energy'): void ns3::WifiRadioEnergyModelHelper::SetDepletionCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
-    cls.add_method('SetDepletionCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
-    ## wifi-radio-energy-model-helper.h (module 'energy'): void ns3::WifiRadioEnergyModelHelper::SetRechargedCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
-    cls.add_method('SetRechargedCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
-    ## wifi-radio-energy-model-helper.h (module 'energy'): void ns3::WifiRadioEnergyModelHelper::SetTxCurrentModel(std::string name, std::string n0="", ns3::AttributeValue const & v0=ns3::EmptyAttributeValue(), std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue(), std::string n4="", ns3::AttributeValue const & v4=ns3::EmptyAttributeValue(), std::string n5="", ns3::AttributeValue const & v5=ns3::EmptyAttributeValue(), std::string n6="", ns3::AttributeValue const & v6=ns3::EmptyAttributeValue(), std::string n7="", ns3::AttributeValue const & v7=ns3::EmptyAttributeValue()) [member function]
-    cls.add_method('SetTxCurrentModel', 
-                   'void', 
-                   [param('std::string', 'name'), param('std::string', 'n0', default_value='""'), param('ns3::AttributeValue const &', 'v0', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n1', default_value='""'), param('ns3::AttributeValue const &', 'v1', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n2', default_value='""'), param('ns3::AttributeValue const &', 'v2', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n3', default_value='""'), param('ns3::AttributeValue const &', 'v3', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n4', default_value='""'), param('ns3::AttributeValue const &', 'v4', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n5', default_value='""'), param('ns3::AttributeValue const &', 'v5', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n6', default_value='""'), param('ns3::AttributeValue const &', 'v6', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n7', default_value='""'), param('ns3::AttributeValue const &', 'v7', default_value='ns3::EmptyAttributeValue()')])
-    ## wifi-radio-energy-model-helper.h (module 'energy'): ns3::Ptr<ns3::DeviceEnergyModel> ns3::WifiRadioEnergyModelHelper::DoInstall(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::EnergySource> source) const [member function]
-    cls.add_method('DoInstall', 
-                   'ns3::Ptr< ns3::DeviceEnergyModel >', 
-                   [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::EnergySource >', 'source')], 
-                   is_const=True, visibility='private', is_virtual=True)
-    return
-
-def register_Ns3WifiRadioEnergyModelPhyListener_methods(root_module, cls):
-    ## wifi-radio-energy-model.h (module 'energy'): ns3::WifiRadioEnergyModelPhyListener::WifiRadioEnergyModelPhyListener(ns3::WifiRadioEnergyModelPhyListener const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiRadioEnergyModelPhyListener const &', 'arg0')])
-    ## wifi-radio-energy-model.h (module 'energy'): ns3::WifiRadioEnergyModelPhyListener::WifiRadioEnergyModelPhyListener() [constructor]
-    cls.add_constructor([])
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModelPhyListener::NotifyMaybeCcaBusyStart(ns3::Time duration) [member function]
-    cls.add_method('NotifyMaybeCcaBusyStart', 
-                   'void', 
-                   [param('ns3::Time', 'duration')], 
-                   is_virtual=True)
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModelPhyListener::NotifyRxEndError() [member function]
-    cls.add_method('NotifyRxEndError', 
-                   'void', 
-                   [], 
-                   is_virtual=True)
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModelPhyListener::NotifyRxEndOk() [member function]
-    cls.add_method('NotifyRxEndOk', 
-                   'void', 
-                   [], 
-                   is_virtual=True)
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModelPhyListener::NotifyRxStart(ns3::Time duration) [member function]
-    cls.add_method('NotifyRxStart', 
-                   'void', 
-                   [param('ns3::Time', 'duration')], 
-                   is_virtual=True)
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModelPhyListener::NotifySleep() [member function]
-    cls.add_method('NotifySleep', 
-                   'void', 
-                   [], 
-                   is_virtual=True)
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModelPhyListener::NotifySwitchingStart(ns3::Time duration) [member function]
-    cls.add_method('NotifySwitchingStart', 
-                   'void', 
-                   [param('ns3::Time', 'duration')], 
-                   is_virtual=True)
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModelPhyListener::NotifyTxStart(ns3::Time duration, double txPowerDbm) [member function]
-    cls.add_method('NotifyTxStart', 
-                   'void', 
-                   [param('ns3::Time', 'duration'), param('double', 'txPowerDbm')], 
-                   is_virtual=True)
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModelPhyListener::NotifyWakeup() [member function]
-    cls.add_method('NotifyWakeup', 
-                   'void', 
-                   [], 
-                   is_virtual=True)
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModelPhyListener::SetChangeStateCallback(ns3::Callback<void, int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
-    cls.add_method('SetChangeStateCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModelPhyListener::SetUpdateTxCurrentCallback(ns3::Callback<void, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
-    cls.add_method('SetUpdateTxCurrentCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
-    return
-
-def register_Ns3WifiTxVector_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiTxVector const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiTxVector const &', 'arg0')])
-    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector() [constructor]
-    cls.add_constructor([])
-    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiMode mode, uint8_t powerLevel, uint8_t retries, bool shortGuardInterval, uint8_t nss, uint8_t ness, bool stbc) [constructor]
-    cls.add_constructor([param('ns3::WifiMode', 'mode'), param('uint8_t', 'powerLevel'), param('uint8_t', 'retries'), param('bool', 'shortGuardInterval'), param('uint8_t', 'nss'), param('uint8_t', 'ness'), param('bool', 'stbc')])
-    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiMode ns3::WifiTxVector::GetMode() const [member function]
-    cls.add_method('GetMode', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_const=True)
-    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetNess() const [member function]
-    cls.add_method('GetNess', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetNss() const [member function]
-    cls.add_method('GetNss', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetRetries() const [member function]
-    cls.add_method('GetRetries', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetTxPowerLevel() const [member function]
-    cls.add_method('GetTxPowerLevel', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## wifi-tx-vector.h (module 'wifi'): bool ns3::WifiTxVector::IsShortGuardInterval() const [member function]
-    cls.add_method('IsShortGuardInterval', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-tx-vector.h (module 'wifi'): bool ns3::WifiTxVector::IsStbc() const [member function]
-    cls.add_method('IsStbc', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetMode(ns3::WifiMode mode) [member function]
-    cls.add_method('SetMode', 
-                   'void', 
-                   [param('ns3::WifiMode', 'mode')])
-    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetNess(uint8_t ness) [member function]
-    cls.add_method('SetNess', 
-                   'void', 
-                   [param('uint8_t', 'ness')])
-    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetNss(uint8_t nss) [member function]
-    cls.add_method('SetNss', 
-                   'void', 
-                   [param('uint8_t', 'nss')])
-    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetRetries(uint8_t retries) [member function]
-    cls.add_method('SetRetries', 
-                   'void', 
-                   [param('uint8_t', 'retries')])
-    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetShortGuardInterval(bool guardinterval) [member function]
-    cls.add_method('SetShortGuardInterval', 
-                   'void', 
-                   [param('bool', 'guardinterval')])
-    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetStbc(bool stbc) [member function]
-    cls.add_method('SetStbc', 
-                   'void', 
-                   [param('bool', 'stbc')])
-    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetTxPowerLevel(uint8_t powerlevel) [member function]
-    cls.add_method('SetTxPowerLevel', 
-                   'void', 
-                   [param('uint8_t', 'powerlevel')])
-    return
-
 def register_Ns3Empty_methods(root_module, cls):
     ## empty.h (module 'core'): ns3::empty::empty() [constructor]
     cls.add_constructor([])
@@ -2826,61 +1879,6 @@
                    is_const=True, visibility='private', is_virtual=True)
     return
 
-def register_Ns3Chunk_methods(root_module, cls):
-    ## chunk.h (module 'network'): ns3::Chunk::Chunk() [constructor]
-    cls.add_constructor([])
-    ## chunk.h (module 'network'): ns3::Chunk::Chunk(ns3::Chunk const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Chunk const &', 'arg0')])
-    ## chunk.h (module 'network'): uint32_t ns3::Chunk::Deserialize(ns3::Buffer::Iterator start) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## chunk.h (module 'network'): static ns3::TypeId ns3::Chunk::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## chunk.h (module 'network'): void ns3::Chunk::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    return
-
-def register_Ns3Header_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## header.h (module 'network'): ns3::Header::Header() [constructor]
-    cls.add_constructor([])
-    ## header.h (module 'network'): ns3::Header::Header(ns3::Header const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Header const &', 'arg0')])
-    ## header.h (module 'network'): uint32_t ns3::Header::Deserialize(ns3::Buffer::Iterator start) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## header.h (module 'network'): uint32_t ns3::Header::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## header.h (module 'network'): static ns3::TypeId ns3::Header::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## header.h (module 'network'): void ns3::Header::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## header.h (module 'network'): void ns3::Header::Serialize(ns3::Buffer::Iterator start) const [member function]
-    cls.add_method('Serialize', 
-                   'void', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    return
-
 def register_Ns3Object_methods(root_module, cls):
     ## object.h (module 'core'): ns3::Object::Object() [constructor]
     cls.add_constructor([])
@@ -3102,30 +2100,6 @@
                    is_static=True)
     return
 
-def register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
-    cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter< ns3::NixVector > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::Cleanup() [member function]
-    cls.add_method('Cleanup', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    return
-
-def register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >::SimpleRefCount() [constructor]
-    cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter< ns3::Packet > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >::Cleanup() [member function]
-    cls.add_method('Cleanup', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    return
-
 def register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -3397,39 +2371,6 @@
                    [param('ns3::Time const &', 'v')])
     return
 
-def register_Ns3Trailer_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## trailer.h (module 'network'): ns3::Trailer::Trailer() [constructor]
-    cls.add_constructor([])
-    ## trailer.h (module 'network'): ns3::Trailer::Trailer(ns3::Trailer const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Trailer const &', 'arg0')])
-    ## trailer.h (module 'network'): uint32_t ns3::Trailer::Deserialize(ns3::Buffer::Iterator end) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'end')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## trailer.h (module 'network'): uint32_t ns3::Trailer::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## trailer.h (module 'network'): static ns3::TypeId ns3::Trailer::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## trailer.h (module 'network'): void ns3::Trailer::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## trailer.h (module 'network'): void ns3::Trailer::Serialize(ns3::Buffer::Iterator start) const [member function]
-    cls.add_method('Serialize', 
-                   'void', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    return
-
 def register_Ns3TriangularRandomVariable_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::TriangularRandomVariable::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -3507,764 +2448,51 @@
     ## random-variable-stream.h (module 'core'): uint32_t ns3::UniformRandomVariable::GetInteger() [member function]
     cls.add_method('GetInteger', 
                    'uint32_t', 
-                   [], 
-                   is_virtual=True)
-    return
-
-def register_Ns3WeibullRandomVariable_methods(root_module, cls):
-    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::WeibullRandomVariable::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## random-variable-stream.h (module 'core'): ns3::WeibullRandomVariable::WeibullRandomVariable() [constructor]
-    cls.add_constructor([])
-    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetScale() const [member function]
-    cls.add_method('GetScale', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetShape() const [member function]
-    cls.add_method('GetShape', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetBound() const [member function]
-    cls.add_method('GetBound', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetValue(double scale, double shape, double bound) [member function]
-    cls.add_method('GetValue', 
-                   'double', 
-                   [param('double', 'scale'), param('double', 'shape'), param('double', 'bound')])
-    ## random-variable-stream.h (module 'core'): uint32_t ns3::WeibullRandomVariable::GetInteger(uint32_t scale, uint32_t shape, uint32_t bound) [member function]
-    cls.add_method('GetInteger', 
-                   'uint32_t', 
-                   [param('uint32_t', 'scale'), param('uint32_t', 'shape'), param('uint32_t', 'bound')])
-    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetValue() [member function]
-    cls.add_method('GetValue', 
-                   'double', 
-                   [], 
-                   is_virtual=True)
-    ## random-variable-stream.h (module 'core'): uint32_t ns3::WeibullRandomVariable::GetInteger() [member function]
-    cls.add_method('GetInteger', 
-                   'uint32_t', 
-                   [], 
-                   is_virtual=True)
-    return
-
-def register_Ns3WifiPhy_methods(root_module, cls):
-    ## wifi-phy.h (module 'wifi'): ns3::WifiPhy::WifiPhy(ns3::WifiPhy const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiPhy const &', 'arg0')])
-    ## wifi-phy.h (module 'wifi'): ns3::WifiPhy::WifiPhy() [constructor]
-    cls.add_constructor([])
-    ## wifi-phy.h (module 'wifi'): int64_t ns3::WifiPhy::AssignStreams(int64_t stream) [member function]
-    cls.add_method('AssignStreams', 
-                   'int64_t', 
-                   [param('int64_t', 'stream')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculatePlcpDuration(ns3::WifiTxVector txvector, ns3::WifiPreamble preamble) [member function]
-    cls.add_method('CalculatePlcpDuration', 
-                   'ns3::Time', 
-                   [param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble')])
-    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::CalculateSnr(ns3::WifiMode txMode, double ber) const [member function]
-    cls.add_method('CalculateSnr', 
-                   'double', 
-                   [param('ns3::WifiMode', 'txMode'), param('double', 'ber')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
-    cls.add_method('CalculateTxDuration', 
-                   'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
-    cls.add_method('ConfigureStandard', 
-                   'void', 
-                   [param('ns3::WifiPhyStandard', 'standard')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetBssMembershipSelector(uint32_t selector) const [member function]
-    cls.add_method('GetBssMembershipSelector', 
-                   'uint32_t', 
-                   [param('uint32_t', 'selector')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::WifiChannel> ns3::WifiPhy::GetChannel() const [member function]
-    cls.add_method('GetChannel', 
-                   'ns3::Ptr< ns3::WifiChannel >', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetChannelBonding() const [member function]
-    cls.add_method('GetChannelBonding', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): uint16_t ns3::WifiPhy::GetChannelNumber() const [member function]
-    cls.add_method('GetChannelNumber', 
-                   'uint16_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetChannelSwitchDelay() const [member function]
-    cls.add_method('GetChannelSwitchDelay', 
-                   'ns3::Time', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetDelayUntilIdle() [member function]
-    cls.add_method('GetDelayUntilIdle', 
-                   'ns3::Time', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetDsssRate11Mbps() [member function]
-    cls.add_method('GetDsssRate11Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetDsssRate1Mbps() [member function]
-    cls.add_method('GetDsssRate1Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetDsssRate2Mbps() [member function]
-    cls.add_method('GetDsssRate2Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetDsssRate5_5Mbps() [member function]
-    cls.add_method('GetDsssRate5_5Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate12Mbps() [member function]
-    cls.add_method('GetErpOfdmRate12Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate18Mbps() [member function]
-    cls.add_method('GetErpOfdmRate18Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate24Mbps() [member function]
-    cls.add_method('GetErpOfdmRate24Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate36Mbps() [member function]
-    cls.add_method('GetErpOfdmRate36Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate48Mbps() [member function]
-    cls.add_method('GetErpOfdmRate48Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate54Mbps() [member function]
-    cls.add_method('GetErpOfdmRate54Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate6Mbps() [member function]
-    cls.add_method('GetErpOfdmRate6Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate9Mbps() [member function]
-    cls.add_method('GetErpOfdmRate9Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetFrequency() const [member function]
-    cls.add_method('GetFrequency', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetGreenfield() const [member function]
-    cls.add_method('GetGreenfield', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetGuardInterval() const [member function]
-    cls.add_method('GetGuardInterval', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetLastRxStartTime() const [member function]
-    cls.add_method('GetLastRxStartTime', 
-                   'ns3::Time', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetLdpc() const [member function]
-    cls.add_method('GetLdpc', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetMFPlcpHeaderMode(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
-    cls.add_method('GetMFPlcpHeaderMode', 
-                   'ns3::WifiMode', 
-                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetMcs(uint8_t mcs) const [member function]
-    cls.add_method('GetMcs', 
-                   'uint8_t', 
-                   [param('uint8_t', 'mcs')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::WifiModeList ns3::WifiPhy::GetMembershipSelectorModes(uint32_t selector) [member function]
-    cls.add_method('GetMembershipSelectorModes', 
-                   'ns3::WifiModeList', 
-                   [param('uint32_t', 'selector')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::GetMode(uint32_t mode) const [member function]
-    cls.add_method('GetMode', 
-                   'ns3::WifiMode', 
-                   [param('uint32_t', 'mode')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNBssMembershipSelectors() const [member function]
-    cls.add_method('GetNBssMembershipSelectors', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetNMcs() const [member function]
-    cls.add_method('GetNMcs', 
-                   'uint8_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNModes() const [member function]
-    cls.add_method('GetNModes', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNTxPower() const [member function]
-    cls.add_method('GetNTxPower', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfReceiveAntennas() const [member function]
-    cls.add_method('GetNumberOfReceiveAntennas', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfTransmitAntennas() const [member function]
-    cls.add_method('GetNumberOfTransmitAntennas', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate108MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate108MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate120MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate120MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate121_5MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate121_5MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12Mbps() [member function]
-    cls.add_method('GetOfdmRate12Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate12MbpsBW10MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate12MbpsBW5MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate135MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate135MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate135MbpsBW40MHzShGi() [member function]
-    cls.add_method('GetOfdmRate135MbpsBW40MHzShGi', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate13MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13_5MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate13_5MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13_5MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate13_5MbpsBW5MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate14_4MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate14_4MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate150MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate150MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate15MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate15MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate18Mbps() [member function]
-    cls.add_method('GetOfdmRate18Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate18MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate18MbpsBW10MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate19_5MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate19_5MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate1_5MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate1_5MbpsBW5MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate21_7MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate21_7MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate24Mbps() [member function]
-    cls.add_method('GetOfdmRate24Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate24MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate24MbpsBW10MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate26MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate26MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate27MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate27MbpsBW10MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate27MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate27MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate28_9MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate28_9MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate2_25MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate2_25MbpsBW5MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate30MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate30MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate36Mbps() [member function]
-    cls.add_method('GetOfdmRate36Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate39MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate39MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate3MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate3MbpsBW10MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate3MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate3MbpsBW5MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate40_5MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate40_5MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate43_3MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate43_3MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate45MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate45MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate48Mbps() [member function]
-    cls.add_method('GetOfdmRate48Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate4_5MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate4_5MbpsBW10MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate4_5MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate4_5MbpsBW5MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate52MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate52MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate54Mbps() [member function]
-    cls.add_method('GetOfdmRate54Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate54MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate54MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate57_8MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate57_8MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate58_5MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate58_5MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate60MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate60MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate65MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate65MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate65MbpsBW20MHzShGi() [member function]
-    cls.add_method('GetOfdmRate65MbpsBW20MHzShGi', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6Mbps() [member function]
-    cls.add_method('GetOfdmRate6Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate6MbpsBW10MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate6MbpsBW5MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6_5MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate6_5MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate72_2MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate72_2MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate7_2MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate7_2MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate81MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate81MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate90MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate90MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9Mbps() [member function]
-    cls.add_method('GetOfdmRate9Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate9MbpsBW10MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate9MbpsBW5MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetPayloadDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
-    cls.add_method('GetPayloadDuration', 
-                   'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
-    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHeaderDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
-    cls.add_method('GetPlcpHeaderDuration', 
-                   'ns3::Time', 
-                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetPlcpHeaderMode(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
-    cls.add_method('GetPlcpHeaderMode', 
-                   'ns3::WifiMode', 
-                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHtSigHeaderDuration(ns3::WifiPreamble preamble) [member function]
-    cls.add_method('GetPlcpHtSigHeaderDuration', 
-                   'ns3::Time', 
-                   [param('ns3::WifiPreamble', 'preamble')], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHtTrainingSymbolDuration(ns3::WifiPreamble preamble, ns3::WifiTxVector txvector) [member function]
-    cls.add_method('GetPlcpHtTrainingSymbolDuration', 
-                   'ns3::Time', 
-                   [param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txvector')], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpPreambleDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
-    cls.add_method('GetPlcpPreambleDuration', 
-                   'ns3::Time', 
-                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetStateDuration() [member function]
-    cls.add_method('GetStateDuration', 
-                   'ns3::Time', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetStbc() const [member function]
-    cls.add_method('GetStbc', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxPowerEnd() const [member function]
-    cls.add_method('GetTxPowerEnd', 
-                   'double', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxPowerStart() const [member function]
-    cls.add_method('GetTxPowerStart', 
-                   'double', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::TypeId ns3::WifiPhy::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsModeSupported(ns3::WifiMode mode) const [member function]
-    cls.add_method('IsModeSupported', 
-                   'bool', 
-                   [param('ns3::WifiMode', 'mode')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateBusy() [member function]
-    cls.add_method('IsStateBusy', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateCcaBusy() [member function]
-    cls.add_method('IsStateCcaBusy', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateIdle() [member function]
-    cls.add_method('IsStateIdle', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateRx() [member function]
-    cls.add_method('IsStateRx', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateSleep() [member function]
-    cls.add_method('IsStateSleep', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateSwitching() [member function]
-    cls.add_method('IsStateSwitching', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateTx() [member function]
-    cls.add_method('IsStateTx', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::McsToWifiMode(uint8_t mcs) [member function]
-    cls.add_method('McsToWifiMode', 
-                   'ns3::WifiMode', 
-                   [param('uint8_t', 'mcs')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffRx(ns3::Ptr<const ns3::Packet> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble, double signalDbm, double noiseDbm) [member function]
-    cls.add_method('NotifyMonitorSniffRx', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('bool', 'isShortPreamble'), param('double', 'signalDbm'), param('double', 'noiseDbm')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffTx(ns3::Ptr<const ns3::Packet> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble, uint8_t txPower) [member function]
-    cls.add_method('NotifyMonitorSniffTx', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('bool', 'isShortPreamble'), param('uint8_t', 'txPower')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyRxBegin(ns3::Ptr<const ns3::Packet> packet) [member function]
-    cls.add_method('NotifyRxBegin', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyRxDrop(ns3::Ptr<const ns3::Packet> packet) [member function]
-    cls.add_method('NotifyRxDrop', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyRxEnd(ns3::Ptr<const ns3::Packet> packet) [member function]
-    cls.add_method('NotifyRxEnd', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyTxBegin(ns3::Ptr<const ns3::Packet> packet) [member function]
-    cls.add_method('NotifyTxBegin', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyTxDrop(ns3::Ptr<const ns3::Packet> packet) [member function]
-    cls.add_method('NotifyTxDrop', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyTxEnd(ns3::Ptr<const ns3::Packet> packet) [member function]
-    cls.add_method('NotifyTxEnd', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::RegisterListener(ns3::WifiPhyListener * listener) [member function]
-    cls.add_method('RegisterListener', 
-                   'void', 
-                   [param('ns3::WifiPhyListener *', 'listener')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ResumeFromSleep() [member function]
-    cls.add_method('ResumeFromSleep', 
-                   'void', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<const ns3::Packet> packet, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, uint8_t packetType) [member function]
-    cls.add_method('SendPacket', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'packetType')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelBonding(bool channelbonding) [member function]
-    cls.add_method('SetChannelBonding', 
-                   'void', 
-                   [param('bool', 'channelbonding')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelNumber(uint16_t id) [member function]
-    cls.add_method('SetChannelNumber', 
-                   'void', 
-                   [param('uint16_t', 'id')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetFrequency(uint32_t freq) [member function]
-    cls.add_method('SetFrequency', 
-                   'void', 
-                   [param('uint32_t', 'freq')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGreenfield(bool greenfield) [member function]
-    cls.add_method('SetGreenfield', 
-                   'void', 
-                   [param('bool', 'greenfield')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGuardInterval(bool guardInterval) [member function]
-    cls.add_method('SetGuardInterval', 
-                   'void', 
-                   [param('bool', 'guardInterval')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetLdpc(bool ldpc) [member function]
-    cls.add_method('SetLdpc', 
-                   'void', 
-                   [param('bool', 'ldpc')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNumberOfReceiveAntennas(uint32_t rx) [member function]
-    cls.add_method('SetNumberOfReceiveAntennas', 
-                   'void', 
-                   [param('uint32_t', 'rx')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNumberOfTransmitAntennas(uint32_t tx) [member function]
-    cls.add_method('SetNumberOfTransmitAntennas', 
-                   'void', 
-                   [param('uint32_t', 'tx')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveErrorCallback(ns3::Callback<void,ns3::Ptr<const ns3::Packet>,double,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
-    cls.add_method('SetReceiveErrorCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveOkCallback(ns3::Callback<void,ns3::Ptr<ns3::Packet>,double,ns3::WifiTxVector,ns3::WifiPreamble,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
-    cls.add_method('SetReceiveOkCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::WifiTxVector, ns3::WifiPreamble, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetSleepMode() [member function]
-    cls.add_method('SetSleepMode', 
-                   'void', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetStbc(bool stbc) [member function]
-    cls.add_method('SetStbc', 
-                   'void', 
-                   [param('bool', 'stbc')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::UnregisterListener(ns3::WifiPhyListener * listener) [member function]
-    cls.add_method('UnregisterListener', 
-                   'void', 
-                   [param('ns3::WifiPhyListener *', 'listener')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::WifiModeToMcs(ns3::WifiMode mode) [member function]
-    cls.add_method('WifiModeToMcs', 
-                   'uint32_t', 
-                   [param('ns3::WifiMode', 'mode')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   [], 
+                   is_virtual=True)
     return
 
-def register_Ns3WifiTxCurrentModel_methods(root_module, cls):
-    ## wifi-tx-current-model.h (module 'energy'): ns3::WifiTxCurrentModel::WifiTxCurrentModel(ns3::WifiTxCurrentModel const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiTxCurrentModel const &', 'arg0')])
-    ## wifi-tx-current-model.h (module 'energy'): ns3::WifiTxCurrentModel::WifiTxCurrentModel() [constructor]
-    cls.add_constructor([])
-    ## wifi-tx-current-model.h (module 'energy'): double ns3::WifiTxCurrentModel::CalcTxCurrent(double txPowerDbm) const [member function]
-    cls.add_method('CalcTxCurrent', 
-                   'double', 
-                   [param('double', 'txPowerDbm')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-tx-current-model.h (module 'energy'): static double ns3::WifiTxCurrentModel::DbmToW(double dbm) [member function]
-    cls.add_method('DbmToW', 
-                   'double', 
-                   [param('double', 'dbm')], 
-                   is_static=True)
-    ## wifi-tx-current-model.h (module 'energy'): static ns3::TypeId ns3::WifiTxCurrentModel::GetTypeId() [member function]
+def register_Ns3WeibullRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::WeibullRandomVariable::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::WeibullRandomVariable::WeibullRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetScale() const [member function]
+    cls.add_method('GetScale', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetShape() const [member function]
+    cls.add_method('GetShape', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetBound() const [member function]
+    cls.add_method('GetBound', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetValue(double scale, double shape, double bound) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'scale'), param('double', 'shape'), param('double', 'bound')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::WeibullRandomVariable::GetInteger(uint32_t scale, uint32_t shape, uint32_t bound) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'scale'), param('uint32_t', 'shape'), param('uint32_t', 'bound')])
+    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::WeibullRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
     return
 
 def register_Ns3ZetaRandomVariable_methods(root_module, cls):
@@ -4482,11 +2710,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -4676,10 +2914,10 @@
                    'double', 
                    [], 
                    is_virtual=True)
-    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
     cls.add_method('Interpolate', 
                    'double', 
-                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
                    visibility='private', is_virtual=True)
     ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
     cls.add_method('Validate', 
@@ -5457,50 +3695,6 @@
                    visibility='private', is_virtual=True)
     return
 
-def register_Ns3LinearWifiTxCurrentModel_methods(root_module, cls):
-    ## wifi-tx-current-model.h (module 'energy'): ns3::LinearWifiTxCurrentModel::LinearWifiTxCurrentModel(ns3::LinearWifiTxCurrentModel const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::LinearWifiTxCurrentModel const &', 'arg0')])
-    ## wifi-tx-current-model.h (module 'energy'): ns3::LinearWifiTxCurrentModel::LinearWifiTxCurrentModel() [constructor]
-    cls.add_constructor([])
-    ## wifi-tx-current-model.h (module 'energy'): double ns3::LinearWifiTxCurrentModel::CalcTxCurrent(double txPowerDbm) const [member function]
-    cls.add_method('CalcTxCurrent', 
-                   'double', 
-                   [param('double', 'txPowerDbm')], 
-                   is_const=True, is_virtual=True)
-    ## wifi-tx-current-model.h (module 'energy'): double ns3::LinearWifiTxCurrentModel::GetEta() const [member function]
-    cls.add_method('GetEta', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## wifi-tx-current-model.h (module 'energy'): double ns3::LinearWifiTxCurrentModel::GetIdleCurrent() const [member function]
-    cls.add_method('GetIdleCurrent', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## wifi-tx-current-model.h (module 'energy'): static ns3::TypeId ns3::LinearWifiTxCurrentModel::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## wifi-tx-current-model.h (module 'energy'): double ns3::LinearWifiTxCurrentModel::GetVoltage() const [member function]
-    cls.add_method('GetVoltage', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## wifi-tx-current-model.h (module 'energy'): void ns3::LinearWifiTxCurrentModel::SetEta(double eta) [member function]
-    cls.add_method('SetEta', 
-                   'void', 
-                   [param('double', 'eta')])
-    ## wifi-tx-current-model.h (module 'energy'): void ns3::LinearWifiTxCurrentModel::SetIdleCurrent(double idleCurrent) [member function]
-    cls.add_method('SetIdleCurrent', 
-                   'void', 
-                   [param('double', 'idleCurrent')])
-    ## wifi-tx-current-model.h (module 'energy'): void ns3::LinearWifiTxCurrentModel::SetVoltage(double voltage) [member function]
-    cls.add_method('SetVoltage', 
-                   'void', 
-                   [param('double', 'voltage')])
-    return
-
 def register_Ns3LogNormalRandomVariable_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::LogNormalRandomVariable::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -5544,7 +3738,7 @@
     cls.add_constructor([])
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice(ns3::NetDevice const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDevice const &', 'arg0')])
-    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -5671,50 +3865,6 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
-def register_Ns3NixVector_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## nix-vector.h (module 'network'): ns3::NixVector::NixVector() [constructor]
-    cls.add_constructor([])
-    ## nix-vector.h (module 'network'): ns3::NixVector::NixVector(ns3::NixVector const & o) [copy constructor]
-    cls.add_constructor([param('ns3::NixVector const &', 'o')])
-    ## nix-vector.h (module 'network'): void ns3::NixVector::AddNeighborIndex(uint32_t newBits, uint32_t numberOfBits) [member function]
-    cls.add_method('AddNeighborIndex', 
-                   'void', 
-                   [param('uint32_t', 'newBits'), param('uint32_t', 'numberOfBits')])
-    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::BitCount(uint32_t numberOfNeighbors) const [member function]
-    cls.add_method('BitCount', 
-                   'uint32_t', 
-                   [param('uint32_t', 'numberOfNeighbors')], 
-                   is_const=True)
-    ## nix-vector.h (module 'network'): ns3::Ptr<ns3::NixVector> ns3::NixVector::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::NixVector >', 
-                   [], 
-                   is_const=True)
-    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::Deserialize(uint32_t const * buffer, uint32_t size) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('uint32_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::ExtractNeighborIndex(uint32_t numberOfBits) [member function]
-    cls.add_method('ExtractNeighborIndex', 
-                   'uint32_t', 
-                   [param('uint32_t', 'numberOfBits')])
-    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::GetRemainingBits() [member function]
-    cls.add_method('GetRemainingBits', 
-                   'uint32_t', 
-                   [])
-    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::Serialize(uint32_t * buffer, uint32_t maxSize) const [member function]
-    cls.add_method('Serialize', 
-                   'uint32_t', 
-                   [param('uint32_t *', 'buffer'), param('uint32_t', 'maxSize')], 
-                   is_const=True)
-    return
-
 def register_Ns3Node_methods(root_module, cls):
     ## node.h (module 'network'): ns3::Node::Node(ns3::Node const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Node const &', 'arg0')])
@@ -5883,191 +4033,6 @@
                    [param('ns3::ObjectFactory const &', 'value')])
     return
 
-def register_Ns3Packet_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## packet.h (module 'network'): ns3::Packet::Packet() [constructor]
-    cls.add_constructor([])
-    ## packet.h (module 'network'): ns3::Packet::Packet(ns3::Packet const & o) [copy constructor]
-    cls.add_constructor([param('ns3::Packet const &', 'o')])
-    ## packet.h (module 'network'): ns3::Packet::Packet(uint32_t size) [constructor]
-    cls.add_constructor([param('uint32_t', 'size')])
-    ## packet.h (module 'network'): ns3::Packet::Packet(uint8_t const * buffer, uint32_t size, bool magic) [constructor]
-    cls.add_constructor([param('uint8_t const *', 'buffer'), param('uint32_t', 'size'), param('bool', 'magic')])
-    ## packet.h (module 'network'): ns3::Packet::Packet(uint8_t const * buffer, uint32_t size) [constructor]
-    cls.add_constructor([param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## packet.h (module 'network'): void ns3::Packet::AddAtEnd(ns3::Ptr<const ns3::Packet> packet) [member function]
-    cls.add_method('AddAtEnd', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## packet.h (module 'network'): void ns3::Packet::AddByteTag(ns3::Tag const & tag) const [member function]
-    cls.add_method('AddByteTag', 
-                   'void', 
-                   [param('ns3::Tag const &', 'tag')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::AddHeader(ns3::Header const & header) [member function]
-    cls.add_method('AddHeader', 
-                   'void', 
-                   [param('ns3::Header const &', 'header')])
-    ## packet.h (module 'network'): void ns3::Packet::AddPacketTag(ns3::Tag const & tag) const [member function]
-    cls.add_method('AddPacketTag', 
-                   'void', 
-                   [param('ns3::Tag const &', 'tag')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::AddPaddingAtEnd(uint32_t size) [member function]
-    cls.add_method('AddPaddingAtEnd', 
-                   'void', 
-                   [param('uint32_t', 'size')])
-    ## packet.h (module 'network'): void ns3::Packet::AddTrailer(ns3::Trailer const & trailer) [member function]
-    cls.add_method('AddTrailer', 
-                   'void', 
-                   [param('ns3::Trailer const &', 'trailer')])
-    ## packet.h (module 'network'): ns3::PacketMetadata::ItemIterator ns3::Packet::BeginItem() const [member function]
-    cls.add_method('BeginItem', 
-                   'ns3::PacketMetadata::ItemIterator', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Packet::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::Packet >', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint32_t ns3::Packet::CopyData(uint8_t * buffer, uint32_t size) const [member function]
-    cls.add_method('CopyData', 
-                   'uint32_t', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::CopyData(std::ostream * os, uint32_t size) const [member function]
-    cls.add_method('CopyData', 
-                   'void', 
-                   [param('std::ostream *', 'os'), param('uint32_t', 'size')], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Packet::CreateFragment(uint32_t start, uint32_t length) const [member function]
-    cls.add_method('CreateFragment', 
-                   'ns3::Ptr< ns3::Packet >', 
-                   [param('uint32_t', 'start'), param('uint32_t', 'length')], 
-                   is_const=True)
-    ## packet.h (module 'network'): static void ns3::Packet::EnableChecking() [member function]
-    cls.add_method('EnableChecking', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    ## packet.h (module 'network'): static void ns3::Packet::EnablePrinting() [member function]
-    cls.add_method('EnablePrinting', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    ## packet.h (module 'network'): bool ns3::Packet::FindFirstMatchingByteTag(ns3::Tag & tag) const [member function]
-    cls.add_method('FindFirstMatchingByteTag', 
-                   'bool', 
-                   [param('ns3::Tag &', 'tag')], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::ByteTagIterator ns3::Packet::GetByteTagIterator() const [member function]
-    cls.add_method('GetByteTagIterator', 
-                   'ns3::ByteTagIterator', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::Ptr<ns3::NixVector> ns3::Packet::GetNixVector() const [member function]
-    cls.add_method('GetNixVector', 
-                   'ns3::Ptr< ns3::NixVector >', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::PacketTagIterator ns3::Packet::GetPacketTagIterator() const [member function]
-    cls.add_method('GetPacketTagIterator', 
-                   'ns3::PacketTagIterator', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint32_t ns3::Packet::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint32_t ns3::Packet::GetSize() const [member function]
-    cls.add_method('GetSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint64_t ns3::Packet::GetUid() const [member function]
-    cls.add_method('GetUid', 
-                   'uint64_t', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint32_t ns3::Packet::PeekHeader(ns3::Header & header) const [member function]
-    cls.add_method('PeekHeader', 
-                   'uint32_t', 
-                   [param('ns3::Header &', 'header')], 
-                   is_const=True)
-    ## packet.h (module 'network'): bool ns3::Packet::PeekPacketTag(ns3::Tag & tag) const [member function]
-    cls.add_method('PeekPacketTag', 
-                   'bool', 
-                   [param('ns3::Tag &', 'tag')], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint32_t ns3::Packet::PeekTrailer(ns3::Trailer & trailer) [member function]
-    cls.add_method('PeekTrailer', 
-                   'uint32_t', 
-                   [param('ns3::Trailer &', 'trailer')])
-    ## packet.h (module 'network'): void ns3::Packet::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::PrintByteTags(std::ostream & os) const [member function]
-    cls.add_method('PrintByteTags', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::PrintPacketTags(std::ostream & os) const [member function]
-    cls.add_method('PrintPacketTags', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::RemoveAllByteTags() [member function]
-    cls.add_method('RemoveAllByteTags', 
-                   'void', 
-                   [])
-    ## packet.h (module 'network'): void ns3::Packet::RemoveAllPacketTags() [member function]
-    cls.add_method('RemoveAllPacketTags', 
-                   'void', 
-                   [])
-    ## packet.h (module 'network'): void ns3::Packet::RemoveAtEnd(uint32_t size) [member function]
-    cls.add_method('RemoveAtEnd', 
-                   'void', 
-                   [param('uint32_t', 'size')])
-    ## packet.h (module 'network'): void ns3::Packet::RemoveAtStart(uint32_t size) [member function]
-    cls.add_method('RemoveAtStart', 
-                   'void', 
-                   [param('uint32_t', 'size')])
-    ## packet.h (module 'network'): uint32_t ns3::Packet::RemoveHeader(ns3::Header & header) [member function]
-    cls.add_method('RemoveHeader', 
-                   'uint32_t', 
-                   [param('ns3::Header &', 'header')])
-    ## packet.h (module 'network'): bool ns3::Packet::RemovePacketTag(ns3::Tag & tag) [member function]
-    cls.add_method('RemovePacketTag', 
-                   'bool', 
-                   [param('ns3::Tag &', 'tag')])
-    ## packet.h (module 'network'): uint32_t ns3::Packet::RemoveTrailer(ns3::Trailer & trailer) [member function]
-    cls.add_method('RemoveTrailer', 
-                   'uint32_t', 
-                   [param('ns3::Trailer &', 'trailer')])
-    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
-    cls.add_method('ReplacePacketTag', 
-                   'bool', 
-                   [param('ns3::Tag &', 'tag')])
-    ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
-    cls.add_method('Serialize', 
-                   'uint32_t', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'maxSize')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::SetNixVector(ns3::Ptr<ns3::NixVector> nixVector) [member function]
-    cls.add_method('SetNixVector', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
-    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
-    cls.add_method('ToString', 
-                   'std::string', 
-                   [], 
-                   is_const=True)
-    return
-
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::ParetoRandomVariable::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -6388,172 +4353,6 @@
                    [param('uint64_t const &', 'value')])
     return
 
-def register_Ns3WifiModeChecker_methods(root_module, cls):
-    ## wifi-mode.h (module 'wifi'): ns3::WifiModeChecker::WifiModeChecker() [constructor]
-    cls.add_constructor([])
-    ## wifi-mode.h (module 'wifi'): ns3::WifiModeChecker::WifiModeChecker(ns3::WifiModeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiModeChecker const &', 'arg0')])
-    return
-
-def register_Ns3WifiModeValue_methods(root_module, cls):
-    ## wifi-mode.h (module 'wifi'): ns3::WifiModeValue::WifiModeValue() [constructor]
-    cls.add_constructor([])
-    ## wifi-mode.h (module 'wifi'): ns3::WifiModeValue::WifiModeValue(ns3::WifiModeValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiModeValue const &', 'arg0')])
-    ## wifi-mode.h (module 'wifi'): ns3::WifiModeValue::WifiModeValue(ns3::WifiMode const & value) [constructor]
-    cls.add_constructor([param('ns3::WifiMode const &', 'value')])
-    ## wifi-mode.h (module 'wifi'): ns3::Ptr<ns3::AttributeValue> ns3::WifiModeValue::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## wifi-mode.h (module 'wifi'): bool ns3::WifiModeValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
-    cls.add_method('DeserializeFromString', 
-                   'bool', 
-                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_virtual=True)
-    ## wifi-mode.h (module 'wifi'): ns3::WifiMode ns3::WifiModeValue::Get() const [member function]
-    cls.add_method('Get', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_const=True)
-    ## wifi-mode.h (module 'wifi'): std::string ns3::WifiModeValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
-    cls.add_method('SerializeToString', 
-                   'std::string', 
-                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_const=True, is_virtual=True)
-    ## wifi-mode.h (module 'wifi'): void ns3::WifiModeValue::Set(ns3::WifiMode const & value) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('ns3::WifiMode const &', 'value')])
-    return
-
-def register_Ns3WifiRadioEnergyModel_methods(root_module, cls):
-    ## wifi-radio-energy-model.h (module 'energy'): ns3::WifiRadioEnergyModel::WifiRadioEnergyModel(ns3::WifiRadioEnergyModel const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiRadioEnergyModel const &', 'arg0')])
-    ## wifi-radio-energy-model.h (module 'energy'): ns3::WifiRadioEnergyModel::WifiRadioEnergyModel() [constructor]
-    cls.add_constructor([])
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModel::ChangeState(int newState) [member function]
-    cls.add_method('ChangeState', 
-                   'void', 
-                   [param('int', 'newState')], 
-                   is_virtual=True)
-    ## wifi-radio-energy-model.h (module 'energy'): double ns3::WifiRadioEnergyModel::GetCcaBusyCurrentA() const [member function]
-    cls.add_method('GetCcaBusyCurrentA', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## wifi-radio-energy-model.h (module 'energy'): ns3::WifiPhy::State ns3::WifiRadioEnergyModel::GetCurrentState() const [member function]
-    cls.add_method('GetCurrentState', 
-                   'ns3::WifiPhy::State', 
-                   [], 
-                   is_const=True)
-    ## wifi-radio-energy-model.h (module 'energy'): double ns3::WifiRadioEnergyModel::GetIdleCurrentA() const [member function]
-    cls.add_method('GetIdleCurrentA', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## wifi-radio-energy-model.h (module 'energy'): ns3::WifiRadioEnergyModelPhyListener * ns3::WifiRadioEnergyModel::GetPhyListener() [member function]
-    cls.add_method('GetPhyListener', 
-                   'ns3::WifiRadioEnergyModelPhyListener *', 
-                   [])
-    ## wifi-radio-energy-model.h (module 'energy'): double ns3::WifiRadioEnergyModel::GetRxCurrentA() const [member function]
-    cls.add_method('GetRxCurrentA', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## wifi-radio-energy-model.h (module 'energy'): double ns3::WifiRadioEnergyModel::GetSleepCurrentA() const [member function]
-    cls.add_method('GetSleepCurrentA', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## wifi-radio-energy-model.h (module 'energy'): double ns3::WifiRadioEnergyModel::GetSwitchingCurrentA() const [member function]
-    cls.add_method('GetSwitchingCurrentA', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## wifi-radio-energy-model.h (module 'energy'): double ns3::WifiRadioEnergyModel::GetTotalEnergyConsumption() const [member function]
-    cls.add_method('GetTotalEnergyConsumption', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## wifi-radio-energy-model.h (module 'energy'): double ns3::WifiRadioEnergyModel::GetTxCurrentA() const [member function]
-    cls.add_method('GetTxCurrentA', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## wifi-radio-energy-model.h (module 'energy'): static ns3::TypeId ns3::WifiRadioEnergyModel::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModel::HandleEnergyDepletion() [member function]
-    cls.add_method('HandleEnergyDepletion', 
-                   'void', 
-                   [], 
-                   is_virtual=True)
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModel::HandleEnergyRecharged() [member function]
-    cls.add_method('HandleEnergyRecharged', 
-                   'void', 
-                   [], 
-                   is_virtual=True)
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModel::SetCcaBusyCurrentA(double ccaBusyCurrentA) [member function]
-    cls.add_method('SetCcaBusyCurrentA', 
-                   'void', 
-                   [param('double', 'ccaBusyCurrentA')])
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModel::SetEnergyDepletionCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
-    cls.add_method('SetEnergyDepletionCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModel::SetEnergyRechargedCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
-    cls.add_method('SetEnergyRechargedCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModel::SetEnergySource(ns3::Ptr<ns3::EnergySource> source) [member function]
-    cls.add_method('SetEnergySource', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::EnergySource >', 'source')], 
-                   is_virtual=True)
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModel::SetIdleCurrentA(double idleCurrentA) [member function]
-    cls.add_method('SetIdleCurrentA', 
-                   'void', 
-                   [param('double', 'idleCurrentA')])
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModel::SetRxCurrentA(double rxCurrentA) [member function]
-    cls.add_method('SetRxCurrentA', 
-                   'void', 
-                   [param('double', 'rxCurrentA')])
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModel::SetSleepCurrentA(double sleepCurrentA) [member function]
-    cls.add_method('SetSleepCurrentA', 
-                   'void', 
-                   [param('double', 'sleepCurrentA')])
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModel::SetSwitchingCurrentA(double switchingCurrentA) [member function]
-    cls.add_method('SetSwitchingCurrentA', 
-                   'void', 
-                   [param('double', 'switchingCurrentA')])
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModel::SetTxCurrentA(double txCurrentA) [member function]
-    cls.add_method('SetTxCurrentA', 
-                   'void', 
-                   [param('double', 'txCurrentA')])
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModel::SetTxCurrentFromModel(double txPowerDbm) [member function]
-    cls.add_method('SetTxCurrentFromModel', 
-                   'void', 
-                   [param('double', 'txPowerDbm')])
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModel::SetTxCurrentModel(ns3::Ptr<ns3::WifiTxCurrentModel> model) [member function]
-    cls.add_method('SetTxCurrentModel', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::WifiTxCurrentModel >', 'model')])
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModel::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   visibility='private', is_virtual=True)
-    ## wifi-radio-energy-model.h (module 'energy'): double ns3::WifiRadioEnergyModel::DoGetCurrentA() const [member function]
-    cls.add_method('DoGetCurrentA', 
-                   'double', 
-                   [], 
-                   is_const=True, visibility='private', is_virtual=True)
-    return
-
 def register_Ns3AddressChecker_methods(root_module, cls):
     ## address.h (module 'network'): ns3::AddressChecker::AddressChecker() [constructor]
     cls.add_constructor([])
@@ -6809,6 +4608,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
@@ -6822,6 +4622,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def register_functions_ns3_internal(module, root_module):
     return
 
diff -Naur ns-3.23/src/energy/bindings/modulegen__gcc_LP64.py ns-3.24/src/energy/bindings/modulegen__gcc_LP64.py
--- ns-3.23/src/energy/bindings/modulegen__gcc_LP64.py	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/energy/bindings/modulegen__gcc_LP64.py	2015-09-15 11:18:44.000000000 -0700
@@ -20,14 +20,6 @@
 def register_types(module):
     root_module = module.get_root()
     
-    ## wifi-mode.h (module 'wifi'): ns3::WifiCodeRate [enumeration]
-    module.add_enum('WifiCodeRate', ['WIFI_CODE_RATE_UNDEFINED', 'WIFI_CODE_RATE_3_4', 'WIFI_CODE_RATE_2_3', 'WIFI_CODE_RATE_1_2', 'WIFI_CODE_RATE_5_6'], import_from_module='ns.wifi')
-    ## wifi-preamble.h (module 'wifi'): ns3::WifiPreamble [enumeration]
-    module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF', 'WIFI_PREAMBLE_NONE'], import_from_module='ns.wifi')
-    ## wifi-phy-standard.h (module 'wifi'): ns3::WifiPhyStandard [enumeration]
-    module.add_enum('WifiPhyStandard', ['WIFI_PHY_STANDARD_80211a', 'WIFI_PHY_STANDARD_80211b', 'WIFI_PHY_STANDARD_80211g', 'WIFI_PHY_STANDARD_80211_10MHZ', 'WIFI_PHY_STANDARD_80211_5MHZ', 'WIFI_PHY_STANDARD_holland', 'WIFI_PHY_STANDARD_80211n_2_4GHZ', 'WIFI_PHY_STANDARD_80211n_5GHZ'], import_from_module='ns.wifi')
-    ## wifi-mode.h (module 'wifi'): ns3::WifiModulationClass [enumeration]
-    module.add_enum('WifiModulationClass', ['WIFI_MOD_CLASS_UNKNOWN', 'WIFI_MOD_CLASS_IR', 'WIFI_MOD_CLASS_FHSS', 'WIFI_MOD_CLASS_DSSS', 'WIFI_MOD_CLASS_ERP_PBCC', 'WIFI_MOD_CLASS_DSSS_OFDM', 'WIFI_MOD_CLASS_ERP_OFDM', 'WIFI_MOD_CLASS_OFDM', 'WIFI_MOD_CLASS_HT'], import_from_module='ns.wifi')
     ## address.h (module 'network'): ns3::Address [class]
     module.add_class('Address', import_from_module='ns.network')
     ## address.h (module 'network'): ns3::Address::MaxSize_e [enumeration]
@@ -36,20 +28,6 @@
     module.add_class('AttributeConstructionList', import_from_module='ns.core')
     ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item [struct]
     module.add_class('Item', import_from_module='ns.core', outer_class=root_module['ns3::AttributeConstructionList'])
-    ## buffer.h (module 'network'): ns3::Buffer [class]
-    module.add_class('Buffer', import_from_module='ns.network')
-    ## buffer.h (module 'network'): ns3::Buffer::Iterator [class]
-    module.add_class('Iterator', import_from_module='ns.network', outer_class=root_module['ns3::Buffer'])
-    ## packet.h (module 'network'): ns3::ByteTagIterator [class]
-    module.add_class('ByteTagIterator', import_from_module='ns.network')
-    ## packet.h (module 'network'): ns3::ByteTagIterator::Item [class]
-    module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::ByteTagIterator'])
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList [class]
-    module.add_class('ByteTagList', import_from_module='ns.network')
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator [class]
-    module.add_class('Iterator', import_from_module='ns.network', outer_class=root_module['ns3::ByteTagList'])
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item [struct]
-    module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::ByteTagList::Iterator'])
     ## callback.h (module 'core'): ns3::CallbackBase [class]
     module.add_class('CallbackBase', import_from_module='ns.core')
     ## device-energy-model-container.h (module 'energy'): ns3::DeviceEnergyModelContainer [class]
@@ -86,30 +64,10 @@
     module.add_class('ObjectDeleter', import_from_module='ns.core')
     ## object-factory.h (module 'core'): ns3::ObjectFactory [class]
     module.add_class('ObjectFactory', import_from_module='ns.core')
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata [class]
-    module.add_class('PacketMetadata', import_from_module='ns.network')
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item [struct]
-    module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::PacketMetadata'])
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item [enumeration]
-    module.add_enum('', ['PAYLOAD', 'HEADER', 'TRAILER'], outer_class=root_module['ns3::PacketMetadata::Item'], import_from_module='ns.network')
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::ItemIterator [class]
-    module.add_class('ItemIterator', import_from_module='ns.network', outer_class=root_module['ns3::PacketMetadata'])
-    ## packet.h (module 'network'): ns3::PacketTagIterator [class]
-    module.add_class('PacketTagIterator', import_from_module='ns.network')
-    ## packet.h (module 'network'): ns3::PacketTagIterator::Item [class]
-    module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagIterator'])
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList [class]
-    module.add_class('PacketTagList', import_from_module='ns.network')
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
-    module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
-    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
     ## rv-battery-model-helper.h (module 'energy'): ns3::RvBatteryModelHelper [class]
     module.add_class('RvBatteryModelHelper', parent=root_module['ns3::EnergySourceHelper'])
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
-    ## tag.h (module 'network'): ns3::Tag [class]
-    module.add_class('Tag', import_from_module='ns.network', parent=root_module['ns3::ObjectBase'])
     ## tag-buffer.h (module 'network'): ns3::TagBuffer [class]
     module.add_class('TagBuffer', import_from_module='ns.network')
     ## nstime.h (module 'core'): ns3::TimeWithUnit [class]
@@ -124,18 +82,6 @@
     module.add_class('AttributeInformation', import_from_module='ns.core', outer_class=root_module['ns3::TypeId'])
     ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation [struct]
     module.add_class('TraceSourceInformation', import_from_module='ns.core', outer_class=root_module['ns3::TypeId'])
-    ## wifi-mode.h (module 'wifi'): ns3::WifiMode [class]
-    module.add_class('WifiMode', import_from_module='ns.wifi')
-    ## wifi-mode.h (module 'wifi'): ns3::WifiModeFactory [class]
-    module.add_class('WifiModeFactory', import_from_module='ns.wifi')
-    ## wifi-phy.h (module 'wifi'): ns3::WifiPhyListener [class]
-    module.add_class('WifiPhyListener', allow_subclassing=True, import_from_module='ns.wifi')
-    ## wifi-radio-energy-model-helper.h (module 'energy'): ns3::WifiRadioEnergyModelHelper [class]
-    module.add_class('WifiRadioEnergyModelHelper', parent=root_module['ns3::DeviceEnergyModelHelper'])
-    ## wifi-radio-energy-model.h (module 'energy'): ns3::WifiRadioEnergyModelPhyListener [class]
-    module.add_class('WifiRadioEnergyModelPhyListener', parent=root_module['ns3::WifiPhyListener'])
-    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector [class]
-    module.add_class('WifiTxVector', import_from_module='ns.wifi')
     ## empty.h (module 'core'): ns3::empty [class]
     module.add_class('empty', import_from_module='ns.core')
     ## int64x64-double.h (module 'core'): ns3::int64x64_t [class]
@@ -146,10 +92,6 @@
     module.add_class('BasicEnergyHarvesterHelper', parent=root_module['ns3::EnergyHarvesterHelper'])
     ## basic-energy-source-helper.h (module 'energy'): ns3::BasicEnergySourceHelper [class]
     module.add_class('BasicEnergySourceHelper', parent=root_module['ns3::EnergySourceHelper'])
-    ## chunk.h (module 'network'): ns3::Chunk [class]
-    module.add_class('Chunk', import_from_module='ns.network', parent=root_module['ns3::ObjectBase'])
-    ## header.h (module 'network'): ns3::Header [class]
-    module.add_class('Header', import_from_module='ns.network', parent=root_module['ns3::Chunk'])
     ## object.h (module 'core'): ns3::Object [class]
     module.add_class('Object', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
     ## object.h (module 'core'): ns3::Object::AggregateIterator [class]
@@ -170,10 +112,6 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Hash::Implementation', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Hash::Implementation>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
-    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > [class]
-    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Packet', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Packet>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TraceSourceAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TraceSourceAccessor>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## nstime.h (module 'core'): ns3::Time [class]
@@ -188,20 +126,12 @@
     module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['ns3::Time'])
     ## traced-value.h (module 'core'): ns3::TracedValue<ns3::Time> [class]
     root_module['ns3::TracedValue< ns3::Time >'].implicitly_converts_to(root_module['ns3::Time'])
-    ## trailer.h (module 'network'): ns3::Trailer [class]
-    module.add_class('Trailer', import_from_module='ns.network', parent=root_module['ns3::Chunk'])
     ## random-variable-stream.h (module 'core'): ns3::TriangularRandomVariable [class]
     module.add_class('TriangularRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## random-variable-stream.h (module 'core'): ns3::UniformRandomVariable [class]
     module.add_class('UniformRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## random-variable-stream.h (module 'core'): ns3::WeibullRandomVariable [class]
     module.add_class('WeibullRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
-    ## wifi-phy.h (module 'wifi'): ns3::WifiPhy [class]
-    module.add_class('WifiPhy', import_from_module='ns.wifi', parent=root_module['ns3::Object'])
-    ## wifi-phy.h (module 'wifi'): ns3::WifiPhy::State [enumeration]
-    module.add_enum('State', ['IDLE', 'CCA_BUSY', 'TX', 'RX', 'SWITCHING', 'SLEEP'], outer_class=root_module['ns3::WifiPhy'], import_from_module='ns.wifi')
-    ## wifi-tx-current-model.h (module 'energy'): ns3::WifiTxCurrentModel [class]
-    module.add_class('WifiTxCurrentModel', parent=root_module['ns3::Object'])
     ## random-variable-stream.h (module 'core'): ns3::ZetaRandomVariable [class]
     module.add_class('ZetaRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## random-variable-stream.h (module 'core'): ns3::ZipfRandomVariable [class]
@@ -274,16 +204,12 @@
     module.add_class('Ipv6PrefixValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## li-ion-energy-source.h (module 'energy'): ns3::LiIonEnergySource [class]
     module.add_class('LiIonEnergySource', parent=root_module['ns3::EnergySource'])
-    ## wifi-tx-current-model.h (module 'energy'): ns3::LinearWifiTxCurrentModel [class]
-    module.add_class('LinearWifiTxCurrentModel', parent=root_module['ns3::WifiTxCurrentModel'])
     ## random-variable-stream.h (module 'core'): ns3::LogNormalRandomVariable [class]
     module.add_class('LogNormalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
     module.add_class('NetDevice', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice::PacketType [enumeration]
     module.add_enum('PacketType', ['PACKET_HOST', 'NS3_PACKET_HOST', 'PACKET_BROADCAST', 'NS3_PACKET_BROADCAST', 'PACKET_MULTICAST', 'NS3_PACKET_MULTICAST', 'PACKET_OTHERHOST', 'NS3_PACKET_OTHERHOST'], outer_class=root_module['ns3::NetDevice'], import_from_module='ns.network')
-    ## nix-vector.h (module 'network'): ns3::NixVector [class]
-    module.add_class('NixVector', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     ## node.h (module 'network'): ns3::Node [class]
     module.add_class('Node', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## random-variable-stream.h (module 'core'): ns3::NormalRandomVariable [class]
@@ -292,8 +218,6 @@
     module.add_class('ObjectFactoryChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## object-factory.h (module 'core'): ns3::ObjectFactoryValue [class]
     module.add_class('ObjectFactoryValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
-    ## packet.h (module 'network'): ns3::Packet [class]
-    module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable [class]
     module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## rv-battery-model.h (module 'energy'): ns3::RvBatteryModel [class]
@@ -308,12 +232,6 @@
     module.add_class('TypeIdValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## uinteger.h (module 'core'): ns3::UintegerValue [class]
     module.add_class('UintegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
-    ## wifi-mode.h (module 'wifi'): ns3::WifiModeChecker [class]
-    module.add_class('WifiModeChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
-    ## wifi-mode.h (module 'wifi'): ns3::WifiModeValue [class]
-    module.add_class('WifiModeValue', import_from_module='ns.wifi', parent=root_module['ns3::AttributeValue'])
-    ## wifi-radio-energy-model.h (module 'energy'): ns3::WifiRadioEnergyModel [class]
-    module.add_class('WifiRadioEnergyModel', parent=root_module['ns3::DeviceEnergyModel'])
     ## address.h (module 'network'): ns3::AddressChecker [class]
     module.add_class('AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## address.h (module 'network'): ns3::AddressValue [class]
@@ -322,19 +240,6 @@
     module.add_class('BasicEnergyHarvester', parent=root_module['ns3::EnergyHarvester'])
     ## basic-energy-source.h (module 'energy'): ns3::BasicEnergySource [class]
     module.add_class('BasicEnergySource', parent=root_module['ns3::EnergySource'])
-    module.add_container('ns3::WifiModeList', 'ns3::WifiMode', container_type=u'vector')
-    typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >', u'ns3::WifiMcsList')
-    typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >*', u'ns3::WifiMcsList*')
-    typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >&', u'ns3::WifiMcsList&')
-    typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >', u'ns3::WifiModeList')
-    typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >*', u'ns3::WifiModeList*')
-    typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >&', u'ns3::WifiModeList&')
-    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >', u'ns3::WifiModeListIterator')
-    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >*', u'ns3::WifiModeListIterator*')
-    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >&', u'ns3::WifiModeListIterator&')
-    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >', u'ns3::WifiMcsListIterator')
-    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >*', u'ns3::WifiMcsListIterator*')
-    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >&', u'ns3::WifiMcsListIterator&')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -348,6 +253,12 @@
     register_types_ns3_Hash(nested_module)
     
     
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
+    
     ## Register a nested module for the namespace internal
     
     nested_module = module.add_cpp_namespace('internal')
@@ -388,6 +299,37 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *', u'ns3::TracedValueCallback::Bool')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) **', u'ns3::TracedValueCallback::Bool*')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *&', u'ns3::TracedValueCallback::Bool&')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *', u'ns3::TracedValueCallback::Double')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) **', u'ns3::TracedValueCallback::Double*')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *&', u'ns3::TracedValueCallback::Double&')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *', u'ns3::TracedValueCallback::Int8')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) **', u'ns3::TracedValueCallback::Int8*')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *&', u'ns3::TracedValueCallback::Int8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *', u'ns3::TracedValueCallback::Uint8')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) **', u'ns3::TracedValueCallback::Uint8*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *&', u'ns3::TracedValueCallback::Uint8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *', u'ns3::TracedValueCallback::Uint32')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) **', u'ns3::TracedValueCallback::Uint32*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *&', u'ns3::TracedValueCallback::Uint32&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *', u'ns3::TracedValueCallback::Int16')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) **', u'ns3::TracedValueCallback::Int16*')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *&', u'ns3::TracedValueCallback::Int16&')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *', u'ns3::TracedValueCallback::Int32')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) **', u'ns3::TracedValueCallback::Int32*')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *&', u'ns3::TracedValueCallback::Int32&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *', u'ns3::TracedValueCallback::Uint16')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) **', u'ns3::TracedValueCallback::Uint16*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *&', u'ns3::TracedValueCallback::Uint16&')
+
 def register_types_ns3_internal(module):
     root_module = module.get_root()
     
@@ -396,13 +338,6 @@
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
     register_Ns3AttributeConstructionListItem_methods(root_module, root_module['ns3::AttributeConstructionList::Item'])
-    register_Ns3Buffer_methods(root_module, root_module['ns3::Buffer'])
-    register_Ns3BufferIterator_methods(root_module, root_module['ns3::Buffer::Iterator'])
-    register_Ns3ByteTagIterator_methods(root_module, root_module['ns3::ByteTagIterator'])
-    register_Ns3ByteTagIteratorItem_methods(root_module, root_module['ns3::ByteTagIterator::Item'])
-    register_Ns3ByteTagList_methods(root_module, root_module['ns3::ByteTagList'])
-    register_Ns3ByteTagListIterator_methods(root_module, root_module['ns3::ByteTagList::Iterator'])
-    register_Ns3ByteTagListIteratorItem_methods(root_module, root_module['ns3::ByteTagList::Iterator::Item'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3DeviceEnergyModelContainer_methods(root_module, root_module['ns3::DeviceEnergyModelContainer'])
     register_Ns3DeviceEnergyModelHelper_methods(root_module, root_module['ns3::DeviceEnergyModelHelper'])
@@ -419,34 +354,18 @@
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
     register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
     register_Ns3ObjectFactory_methods(root_module, root_module['ns3::ObjectFactory'])
-    register_Ns3PacketMetadata_methods(root_module, root_module['ns3::PacketMetadata'])
-    register_Ns3PacketMetadataItem_methods(root_module, root_module['ns3::PacketMetadata::Item'])
-    register_Ns3PacketMetadataItemIterator_methods(root_module, root_module['ns3::PacketMetadata::ItemIterator'])
-    register_Ns3PacketTagIterator_methods(root_module, root_module['ns3::PacketTagIterator'])
-    register_Ns3PacketTagIteratorItem_methods(root_module, root_module['ns3::PacketTagIterator::Item'])
-    register_Ns3PacketTagList_methods(root_module, root_module['ns3::PacketTagList'])
-    register_Ns3PacketTagListTagData_methods(root_module, root_module['ns3::PacketTagList::TagData'])
     register_Ns3RvBatteryModelHelper_methods(root_module, root_module['ns3::RvBatteryModelHelper'])
     register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
-    register_Ns3Tag_methods(root_module, root_module['ns3::Tag'])
     register_Ns3TagBuffer_methods(root_module, root_module['ns3::TagBuffer'])
     register_Ns3TimeWithUnit_methods(root_module, root_module['ns3::TimeWithUnit'])
     register_Ns3TracedValue__Double_methods(root_module, root_module['ns3::TracedValue< double >'])
     register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
     register_Ns3TypeIdAttributeInformation_methods(root_module, root_module['ns3::TypeId::AttributeInformation'])
     register_Ns3TypeIdTraceSourceInformation_methods(root_module, root_module['ns3::TypeId::TraceSourceInformation'])
-    register_Ns3WifiMode_methods(root_module, root_module['ns3::WifiMode'])
-    register_Ns3WifiModeFactory_methods(root_module, root_module['ns3::WifiModeFactory'])
-    register_Ns3WifiPhyListener_methods(root_module, root_module['ns3::WifiPhyListener'])
-    register_Ns3WifiRadioEnergyModelHelper_methods(root_module, root_module['ns3::WifiRadioEnergyModelHelper'])
-    register_Ns3WifiRadioEnergyModelPhyListener_methods(root_module, root_module['ns3::WifiRadioEnergyModelPhyListener'])
-    register_Ns3WifiTxVector_methods(root_module, root_module['ns3::WifiTxVector'])
     register_Ns3Empty_methods(root_module, root_module['ns3::empty'])
     register_Ns3Int64x64_t_methods(root_module, root_module['ns3::int64x64_t'])
     register_Ns3BasicEnergyHarvesterHelper_methods(root_module, root_module['ns3::BasicEnergyHarvesterHelper'])
     register_Ns3BasicEnergySourceHelper_methods(root_module, root_module['ns3::BasicEnergySourceHelper'])
-    register_Ns3Chunk_methods(root_module, root_module['ns3::Chunk'])
-    register_Ns3Header_methods(root_module, root_module['ns3::Header'])
     register_Ns3Object_methods(root_module, root_module['ns3::Object'])
     register_Ns3ObjectAggregateIterator_methods(root_module, root_module['ns3::Object::AggregateIterator'])
     register_Ns3RandomVariableStream_methods(root_module, root_module['ns3::RandomVariableStream'])
@@ -457,18 +376,13 @@
     register_Ns3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
     register_Ns3SimpleRefCount__Ns3HashImplementation_Ns3Empty_Ns3DefaultDeleter__lt__ns3HashImplementation__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
-    register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
-    register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3Time_methods(root_module, root_module['ns3::Time'])
     register_Ns3TraceSourceAccessor_methods(root_module, root_module['ns3::TraceSourceAccessor'])
     register_Ns3TracedValue__Ns3Time_methods(root_module, root_module['ns3::TracedValue< ns3::Time >'])
-    register_Ns3Trailer_methods(root_module, root_module['ns3::Trailer'])
     register_Ns3TriangularRandomVariable_methods(root_module, root_module['ns3::TriangularRandomVariable'])
     register_Ns3UniformRandomVariable_methods(root_module, root_module['ns3::UniformRandomVariable'])
     register_Ns3WeibullRandomVariable_methods(root_module, root_module['ns3::WeibullRandomVariable'])
-    register_Ns3WifiPhy_methods(root_module, root_module['ns3::WifiPhy'])
-    register_Ns3WifiTxCurrentModel_methods(root_module, root_module['ns3::WifiTxCurrentModel'])
     register_Ns3ZetaRandomVariable_methods(root_module, root_module['ns3::ZetaRandomVariable'])
     register_Ns3ZipfRandomVariable_methods(root_module, root_module['ns3::ZipfRandomVariable'])
     register_Ns3AttributeAccessor_methods(root_module, root_module['ns3::AttributeAccessor'])
@@ -505,15 +419,12 @@
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
     register_Ns3LiIonEnergySource_methods(root_module, root_module['ns3::LiIonEnergySource'])
-    register_Ns3LinearWifiTxCurrentModel_methods(root_module, root_module['ns3::LinearWifiTxCurrentModel'])
     register_Ns3LogNormalRandomVariable_methods(root_module, root_module['ns3::LogNormalRandomVariable'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
-    register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
     register_Ns3NormalRandomVariable_methods(root_module, root_module['ns3::NormalRandomVariable'])
     register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
-    register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
     register_Ns3RvBatteryModel_methods(root_module, root_module['ns3::RvBatteryModel'])
     register_Ns3SimpleDeviceEnergyModel_methods(root_module, root_module['ns3::SimpleDeviceEnergyModel'])
@@ -521,9 +432,6 @@
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
     register_Ns3UintegerValue_methods(root_module, root_module['ns3::UintegerValue'])
-    register_Ns3WifiModeChecker_methods(root_module, root_module['ns3::WifiModeChecker'])
-    register_Ns3WifiModeValue_methods(root_module, root_module['ns3::WifiModeValue'])
-    register_Ns3WifiRadioEnergyModel_methods(root_module, root_module['ns3::WifiRadioEnergyModel'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3BasicEnergyHarvester_methods(root_module, root_module['ns3::BasicEnergyHarvester'])
@@ -644,363 +552,6 @@
     cls.add_instance_attribute('value', 'ns3::Ptr< ns3::AttributeValue >', is_const=False)
     return
 
-def register_Ns3Buffer_methods(root_module, cls):
-    ## buffer.h (module 'network'): ns3::Buffer::Buffer() [constructor]
-    cls.add_constructor([])
-    ## buffer.h (module 'network'): ns3::Buffer::Buffer(uint32_t dataSize) [constructor]
-    cls.add_constructor([param('uint32_t', 'dataSize')])
-    ## buffer.h (module 'network'): ns3::Buffer::Buffer(uint32_t dataSize, bool initialize) [constructor]
-    cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
-    ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
-    cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
-    cls.add_method('AddAtEnd', 
-                   'bool', 
-                   [param('uint32_t', 'end')])
-    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
-    cls.add_method('AddAtEnd', 
-                   'void', 
-                   [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
-    cls.add_method('AddAtStart', 
-                   'bool', 
-                   [param('uint32_t', 'start')])
-    ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
-    cls.add_method('Begin', 
-                   'ns3::Buffer::Iterator', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): void ns3::Buffer::CopyData(std::ostream * os, uint32_t size) const [member function]
-    cls.add_method('CopyData', 
-                   'void', 
-                   [param('std::ostream *', 'os'), param('uint32_t', 'size')], 
-                   is_const=True)
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::CopyData(uint8_t * buffer, uint32_t size) const [member function]
-    cls.add_method('CopyData', 
-                   'uint32_t', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')], 
-                   is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFragment(uint32_t start, uint32_t length) const [member function]
-    cls.add_method('CreateFragment', 
-                   'ns3::Buffer', 
-                   [param('uint32_t', 'start'), param('uint32_t', 'length')], 
-                   is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::End() const [member function]
-    cls.add_method('End', 
-                   'ns3::Buffer::Iterator', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSize() const [member function]
-    cls.add_method('GetSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): uint8_t const * ns3::Buffer::PeekData() const [member function]
-    cls.add_method('PeekData', 
-                   'uint8_t const *', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): void ns3::Buffer::RemoveAtEnd(uint32_t end) [member function]
-    cls.add_method('RemoveAtEnd', 
-                   'void', 
-                   [param('uint32_t', 'end')])
-    ## buffer.h (module 'network'): void ns3::Buffer::RemoveAtStart(uint32_t start) [member function]
-    cls.add_method('RemoveAtStart', 
-                   'void', 
-                   [param('uint32_t', 'start')])
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
-    cls.add_method('Serialize', 
-                   'uint32_t', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'maxSize')], 
-                   is_const=True)
-    return
-
-def register_Ns3BufferIterator_methods(root_module, cls):
-    ## buffer.h (module 'network'): ns3::Buffer::Iterator::Iterator(ns3::Buffer::Iterator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Buffer::Iterator const &', 'arg0')])
-    ## buffer.h (module 'network'): ns3::Buffer::Iterator::Iterator() [constructor]
-    cls.add_constructor([])
-    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::CalculateIpChecksum(uint16_t size) [member function]
-    cls.add_method('CalculateIpChecksum', 
-                   'uint16_t', 
-                   [param('uint16_t', 'size')])
-    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::CalculateIpChecksum(uint16_t size, uint32_t initialChecksum) [member function]
-    cls.add_method('CalculateIpChecksum', 
-                   'uint16_t', 
-                   [param('uint16_t', 'size'), param('uint32_t', 'initialChecksum')])
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetDistanceFrom(ns3::Buffer::Iterator const & o) const [member function]
-    cls.add_method('GetDistanceFrom', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator const &', 'o')], 
-                   is_const=True)
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
-    cls.add_method('GetSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): bool ns3::Buffer::Iterator::IsEnd() const [member function]
-    cls.add_method('IsEnd', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): bool ns3::Buffer::Iterator::IsStart() const [member function]
-    cls.add_method('IsStart', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Next() [member function]
-    cls.add_method('Next', 
-                   'void', 
-                   [])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Next(uint32_t delta) [member function]
-    cls.add_method('Next', 
-                   'void', 
-                   [param('uint32_t', 'delta')])
-    ## buffer.h (module 'network'): uint8_t ns3::Buffer::Iterator::PeekU8() [member function]
-    cls.add_method('PeekU8', 
-                   'uint8_t', 
-                   [])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Prev() [member function]
-    cls.add_method('Prev', 
-                   'void', 
-                   [])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Prev(uint32_t delta) [member function]
-    cls.add_method('Prev', 
-                   'void', 
-                   [param('uint32_t', 'delta')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Read(uint8_t * buffer, uint32_t size) [member function]
-    cls.add_method('Read', 
-                   'void', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Read(ns3::Buffer::Iterator start, uint32_t size) [member function]
-    cls.add_method('Read', 
-                   'void', 
-                   [param('ns3::Buffer::Iterator', 'start'), param('uint32_t', 'size')])
-    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::ReadLsbtohU16() [member function]
-    cls.add_method('ReadLsbtohU16', 
-                   'uint16_t', 
-                   [])
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::ReadLsbtohU32() [member function]
-    cls.add_method('ReadLsbtohU32', 
-                   'uint32_t', 
-                   [])
-    ## buffer.h (module 'network'): uint64_t ns3::Buffer::Iterator::ReadLsbtohU64() [member function]
-    cls.add_method('ReadLsbtohU64', 
-                   'uint64_t', 
-                   [])
-    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::ReadNtohU16() [member function]
-    cls.add_method('ReadNtohU16', 
-                   'uint16_t', 
-                   [])
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::ReadNtohU32() [member function]
-    cls.add_method('ReadNtohU32', 
-                   'uint32_t', 
-                   [])
-    ## buffer.h (module 'network'): uint64_t ns3::Buffer::Iterator::ReadNtohU64() [member function]
-    cls.add_method('ReadNtohU64', 
-                   'uint64_t', 
-                   [])
-    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::ReadU16() [member function]
-    cls.add_method('ReadU16', 
-                   'uint16_t', 
-                   [])
-    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::ReadU32() [member function]
-    cls.add_method('ReadU32', 
-                   'uint32_t', 
-                   [])
-    ## buffer.h (module 'network'): uint64_t ns3::Buffer::Iterator::ReadU64() [member function]
-    cls.add_method('ReadU64', 
-                   'uint64_t', 
-                   [])
-    ## buffer.h (module 'network'): uint8_t ns3::Buffer::Iterator::ReadU8() [member function]
-    cls.add_method('ReadU8', 
-                   'uint8_t', 
-                   [])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Write(uint8_t const * buffer, uint32_t size) [member function]
-    cls.add_method('Write', 
-                   'void', 
-                   [param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Write(ns3::Buffer::Iterator start, ns3::Buffer::Iterator end) [member function]
-    cls.add_method('Write', 
-                   'void', 
-                   [param('ns3::Buffer::Iterator', 'start'), param('ns3::Buffer::Iterator', 'end')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtolsbU16(uint16_t data) [member function]
-    cls.add_method('WriteHtolsbU16', 
-                   'void', 
-                   [param('uint16_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtolsbU32(uint32_t data) [member function]
-    cls.add_method('WriteHtolsbU32', 
-                   'void', 
-                   [param('uint32_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtolsbU64(uint64_t data) [member function]
-    cls.add_method('WriteHtolsbU64', 
-                   'void', 
-                   [param('uint64_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtonU16(uint16_t data) [member function]
-    cls.add_method('WriteHtonU16', 
-                   'void', 
-                   [param('uint16_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtonU32(uint32_t data) [member function]
-    cls.add_method('WriteHtonU32', 
-                   'void', 
-                   [param('uint32_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtonU64(uint64_t data) [member function]
-    cls.add_method('WriteHtonU64', 
-                   'void', 
-                   [param('uint64_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU16(uint16_t data) [member function]
-    cls.add_method('WriteU16', 
-                   'void', 
-                   [param('uint16_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU32(uint32_t data) [member function]
-    cls.add_method('WriteU32', 
-                   'void', 
-                   [param('uint32_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU64(uint64_t data) [member function]
-    cls.add_method('WriteU64', 
-                   'void', 
-                   [param('uint64_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU8(uint8_t data) [member function]
-    cls.add_method('WriteU8', 
-                   'void', 
-                   [param('uint8_t', 'data')])
-    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU8(uint8_t data, uint32_t len) [member function]
-    cls.add_method('WriteU8', 
-                   'void', 
-                   [param('uint8_t', 'data'), param('uint32_t', 'len')])
-    return
-
-def register_Ns3ByteTagIterator_methods(root_module, cls):
-    ## packet.h (module 'network'): ns3::ByteTagIterator::ByteTagIterator(ns3::ByteTagIterator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ByteTagIterator const &', 'arg0')])
-    ## packet.h (module 'network'): bool ns3::ByteTagIterator::HasNext() const [member function]
-    cls.add_method('HasNext', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::ByteTagIterator::Item ns3::ByteTagIterator::Next() [member function]
-    cls.add_method('Next', 
-                   'ns3::ByteTagIterator::Item', 
-                   [])
-    return
-
-def register_Ns3ByteTagIteratorItem_methods(root_module, cls):
-    ## packet.h (module 'network'): ns3::ByteTagIterator::Item::Item(ns3::ByteTagIterator::Item const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ByteTagIterator::Item const &', 'arg0')])
-    ## packet.h (module 'network'): uint32_t ns3::ByteTagIterator::Item::GetEnd() const [member function]
-    cls.add_method('GetEnd', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint32_t ns3::ByteTagIterator::Item::GetStart() const [member function]
-    cls.add_method('GetStart', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::ByteTagIterator::Item::GetTag(ns3::Tag & tag) const [member function]
-    cls.add_method('GetTag', 
-                   'void', 
-                   [param('ns3::Tag &', 'tag')], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::TypeId ns3::ByteTagIterator::Item::GetTypeId() const [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True)
-    return
-
-def register_Ns3ByteTagList_methods(root_module, cls):
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::ByteTagList() [constructor]
-    cls.add_constructor([])
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::ByteTagList(ns3::ByteTagList const & o) [copy constructor]
-    cls.add_constructor([param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): ns3::TagBuffer ns3::ByteTagList::Add(ns3::TypeId tid, uint32_t bufferSize, int32_t start, int32_t end) [member function]
-    cls.add_method('Add', 
-                   'ns3::TagBuffer', 
-                   [param('ns3::TypeId', 'tid'), param('uint32_t', 'bufferSize'), param('int32_t', 'start'), param('int32_t', 'end')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Add(ns3::ByteTagList const & o) [member function]
-    cls.add_method('Add', 
-                   'void', 
-                   [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
-    cls.add_method('AddAtEnd', 
-                   'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
-    cls.add_method('AddAtStart', 
-                   'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
-    cls.add_method('Begin', 
-                   'ns3::ByteTagList::Iterator', 
-                   [param('int32_t', 'offsetStart'), param('int32_t', 'offsetEnd')], 
-                   is_const=True)
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::RemoveAll() [member function]
-    cls.add_method('RemoveAll', 
-                   'void', 
-                   [])
-    return
-
-def register_Ns3ByteTagListIterator_methods(root_module, cls):
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Iterator(ns3::ByteTagList::Iterator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ByteTagList::Iterator const &', 'arg0')])
-    ## byte-tag-list.h (module 'network'): uint32_t ns3::ByteTagList::Iterator::GetOffsetStart() const [member function]
-    cls.add_method('GetOffsetStart', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## byte-tag-list.h (module 'network'): bool ns3::ByteTagList::Iterator::HasNext() const [member function]
-    cls.add_method('HasNext', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item ns3::ByteTagList::Iterator::Next() [member function]
-    cls.add_method('Next', 
-                   'ns3::ByteTagList::Iterator::Item', 
-                   [])
-    return
-
-def register_Ns3ByteTagListIteratorItem_methods(root_module, cls):
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::Item(ns3::ByteTagList::Iterator::Item const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ByteTagList::Iterator::Item const &', 'arg0')])
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::Item(ns3::TagBuffer buf) [constructor]
-    cls.add_constructor([param('ns3::TagBuffer', 'buf')])
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::buf [variable]
-    cls.add_instance_attribute('buf', 'ns3::TagBuffer', is_const=False)
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::end [variable]
-    cls.add_instance_attribute('end', 'int32_t', is_const=False)
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::size [variable]
-    cls.add_instance_attribute('size', 'uint32_t', is_const=False)
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::start [variable]
-    cls.add_instance_attribute('start', 'int32_t', is_const=False)
-    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::tid [variable]
-    cls.add_instance_attribute('tid', 'ns3::TypeId', is_const=False)
-    return
-
 def register_Ns3CallbackBase_methods(root_module, cls):
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::CallbackBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackBase const &', 'arg0')])
@@ -1014,11 +565,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3DeviceEnergyModelContainer_methods(root_module, cls):
@@ -1886,197 +1432,6 @@
                    [param('std::string', 'tid')])
     return
 
-def register_Ns3PacketMetadata_methods(root_module, cls):
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::PacketMetadata(uint64_t uid, uint32_t size) [constructor]
-    cls.add_constructor([param('uint64_t', 'uid'), param('uint32_t', 'size')])
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::PacketMetadata(ns3::PacketMetadata const & o) [copy constructor]
-    cls.add_constructor([param('ns3::PacketMetadata const &', 'o')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::AddAtEnd(ns3::PacketMetadata const & o) [member function]
-    cls.add_method('AddAtEnd', 
-                   'void', 
-                   [param('ns3::PacketMetadata const &', 'o')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::AddHeader(ns3::Header const & header, uint32_t size) [member function]
-    cls.add_method('AddHeader', 
-                   'void', 
-                   [param('ns3::Header const &', 'header'), param('uint32_t', 'size')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::AddPaddingAtEnd(uint32_t end) [member function]
-    cls.add_method('AddPaddingAtEnd', 
-                   'void', 
-                   [param('uint32_t', 'end')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::AddTrailer(ns3::Trailer const & trailer, uint32_t size) [member function]
-    cls.add_method('AddTrailer', 
-                   'void', 
-                   [param('ns3::Trailer const &', 'trailer'), param('uint32_t', 'size')])
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::ItemIterator ns3::PacketMetadata::BeginItem(ns3::Buffer buffer) const [member function]
-    cls.add_method('BeginItem', 
-                   'ns3::PacketMetadata::ItemIterator', 
-                   [param('ns3::Buffer', 'buffer')], 
-                   is_const=True)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata ns3::PacketMetadata::CreateFragment(uint32_t start, uint32_t end) const [member function]
-    cls.add_method('CreateFragment', 
-                   'ns3::PacketMetadata', 
-                   [param('uint32_t', 'start'), param('uint32_t', 'end')], 
-                   is_const=True)
-    ## packet-metadata.h (module 'network'): uint32_t ns3::PacketMetadata::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## packet-metadata.h (module 'network'): static void ns3::PacketMetadata::Enable() [member function]
-    cls.add_method('Enable', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    ## packet-metadata.h (module 'network'): static void ns3::PacketMetadata::EnableChecking() [member function]
-    cls.add_method('EnableChecking', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    ## packet-metadata.h (module 'network'): uint32_t ns3::PacketMetadata::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## packet-metadata.h (module 'network'): uint64_t ns3::PacketMetadata::GetUid() const [member function]
-    cls.add_method('GetUid', 
-                   'uint64_t', 
-                   [], 
-                   is_const=True)
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::RemoveAtEnd(uint32_t end) [member function]
-    cls.add_method('RemoveAtEnd', 
-                   'void', 
-                   [param('uint32_t', 'end')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::RemoveAtStart(uint32_t start) [member function]
-    cls.add_method('RemoveAtStart', 
-                   'void', 
-                   [param('uint32_t', 'start')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::RemoveHeader(ns3::Header const & header, uint32_t size) [member function]
-    cls.add_method('RemoveHeader', 
-                   'void', 
-                   [param('ns3::Header const &', 'header'), param('uint32_t', 'size')])
-    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::RemoveTrailer(ns3::Trailer const & trailer, uint32_t size) [member function]
-    cls.add_method('RemoveTrailer', 
-                   'void', 
-                   [param('ns3::Trailer const &', 'trailer'), param('uint32_t', 'size')])
-    ## packet-metadata.h (module 'network'): uint32_t ns3::PacketMetadata::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
-    cls.add_method('Serialize', 
-                   'uint32_t', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'maxSize')], 
-                   is_const=True)
-    return
-
-def register_Ns3PacketMetadataItem_methods(root_module, cls):
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::Item() [constructor]
-    cls.add_constructor([])
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::Item(ns3::PacketMetadata::Item const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PacketMetadata::Item const &', 'arg0')])
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::current [variable]
-    cls.add_instance_attribute('current', 'ns3::Buffer::Iterator', is_const=False)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::currentSize [variable]
-    cls.add_instance_attribute('currentSize', 'uint32_t', is_const=False)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::currentTrimedFromEnd [variable]
-    cls.add_instance_attribute('currentTrimedFromEnd', 'uint32_t', is_const=False)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::currentTrimedFromStart [variable]
-    cls.add_instance_attribute('currentTrimedFromStart', 'uint32_t', is_const=False)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::isFragment [variable]
-    cls.add_instance_attribute('isFragment', 'bool', is_const=False)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::tid [variable]
-    cls.add_instance_attribute('tid', 'ns3::TypeId', is_const=False)
-    return
-
-def register_Ns3PacketMetadataItemIterator_methods(root_module, cls):
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::ItemIterator::ItemIterator(ns3::PacketMetadata::ItemIterator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PacketMetadata::ItemIterator const &', 'arg0')])
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::ItemIterator::ItemIterator(ns3::PacketMetadata const * metadata, ns3::Buffer buffer) [constructor]
-    cls.add_constructor([param('ns3::PacketMetadata const *', 'metadata'), param('ns3::Buffer', 'buffer')])
-    ## packet-metadata.h (module 'network'): bool ns3::PacketMetadata::ItemIterator::HasNext() const [member function]
-    cls.add_method('HasNext', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item ns3::PacketMetadata::ItemIterator::Next() [member function]
-    cls.add_method('Next', 
-                   'ns3::PacketMetadata::Item', 
-                   [])
-    return
-
-def register_Ns3PacketTagIterator_methods(root_module, cls):
-    ## packet.h (module 'network'): ns3::PacketTagIterator::PacketTagIterator(ns3::PacketTagIterator const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PacketTagIterator const &', 'arg0')])
-    ## packet.h (module 'network'): bool ns3::PacketTagIterator::HasNext() const [member function]
-    cls.add_method('HasNext', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::PacketTagIterator::Item ns3::PacketTagIterator::Next() [member function]
-    cls.add_method('Next', 
-                   'ns3::PacketTagIterator::Item', 
-                   [])
-    return
-
-def register_Ns3PacketTagIteratorItem_methods(root_module, cls):
-    ## packet.h (module 'network'): ns3::PacketTagIterator::Item::Item(ns3::PacketTagIterator::Item const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PacketTagIterator::Item const &', 'arg0')])
-    ## packet.h (module 'network'): void ns3::PacketTagIterator::Item::GetTag(ns3::Tag & tag) const [member function]
-    cls.add_method('GetTag', 
-                   'void', 
-                   [param('ns3::Tag &', 'tag')], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::TypeId ns3::PacketTagIterator::Item::GetTypeId() const [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True)
-    return
-
-def register_Ns3PacketTagList_methods(root_module, cls):
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::PacketTagList() [constructor]
-    cls.add_constructor([])
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::PacketTagList(ns3::PacketTagList const & o) [copy constructor]
-    cls.add_constructor([param('ns3::PacketTagList const &', 'o')])
-    ## packet-tag-list.h (module 'network'): void ns3::PacketTagList::Add(ns3::Tag const & tag) const [member function]
-    cls.add_method('Add', 
-                   'void', 
-                   [param('ns3::Tag const &', 'tag')], 
-                   is_const=True)
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData const * ns3::PacketTagList::Head() const [member function]
-    cls.add_method('Head', 
-                   'ns3::PacketTagList::TagData const *', 
-                   [], 
-                   is_const=True)
-    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Peek(ns3::Tag & tag) const [member function]
-    cls.add_method('Peek', 
-                   'bool', 
-                   [param('ns3::Tag &', 'tag')], 
-                   is_const=True)
-    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Remove(ns3::Tag & tag) [member function]
-    cls.add_method('Remove', 
-                   'bool', 
-                   [param('ns3::Tag &', 'tag')])
-    ## packet-tag-list.h (module 'network'): void ns3::PacketTagList::RemoveAll() [member function]
-    cls.add_method('RemoveAll', 
-                   'void', 
-                   [])
-    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
-    cls.add_method('Replace', 
-                   'bool', 
-                   [param('ns3::Tag &', 'tag')])
-    return
-
-def register_Ns3PacketTagListTagData_methods(root_module, cls):
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData() [constructor]
-    cls.add_constructor([])
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData(ns3::PacketTagList::TagData const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::PacketTagList::TagData const &', 'arg0')])
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
-    cls.add_instance_attribute('count', 'uint32_t', is_const=False)
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
-    cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
-    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
-    cls.add_instance_attribute('tid', 'ns3::TypeId', is_const=False)
-    return
-
 def register_Ns3RvBatteryModelHelper_methods(root_module, cls):
     ## rv-battery-model-helper.h (module 'energy'): ns3::RvBatteryModelHelper::RvBatteryModelHelper(ns3::RvBatteryModelHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::RvBatteryModelHelper const &', 'arg0')])
@@ -2106,45 +1461,13 @@
                    is_static=True)
     return
 
-def register_Ns3Tag_methods(root_module, cls):
-    ## tag.h (module 'network'): ns3::Tag::Tag() [constructor]
-    cls.add_constructor([])
-    ## tag.h (module 'network'): ns3::Tag::Tag(ns3::Tag const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Tag const &', 'arg0')])
-    ## tag.h (module 'network'): void ns3::Tag::Deserialize(ns3::TagBuffer i) [member function]
-    cls.add_method('Deserialize', 
-                   'void', 
-                   [param('ns3::TagBuffer', 'i')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## tag.h (module 'network'): uint32_t ns3::Tag::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## tag.h (module 'network'): static ns3::TypeId ns3::Tag::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## tag.h (module 'network'): void ns3::Tag::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## tag.h (module 'network'): void ns3::Tag::Serialize(ns3::TagBuffer i) const [member function]
-    cls.add_method('Serialize', 
-                   'void', 
-                   [param('ns3::TagBuffer', 'i')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    return
-
-def register_Ns3TagBuffer_methods(root_module, cls):
-    ## tag-buffer.h (module 'network'): ns3::TagBuffer::TagBuffer(ns3::TagBuffer const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::TagBuffer const &', 'arg0')])
-    ## tag-buffer.h (module 'network'): ns3::TagBuffer::TagBuffer(uint8_t * start, uint8_t * end) [constructor]
-    cls.add_constructor([param('uint8_t *', 'start'), param('uint8_t *', 'end')])
-    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::CopyFrom(ns3::TagBuffer o) [member function]
-    cls.add_method('CopyFrom', 
+def register_Ns3TagBuffer_methods(root_module, cls):
+    ## tag-buffer.h (module 'network'): ns3::TagBuffer::TagBuffer(ns3::TagBuffer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::TagBuffer const &', 'arg0')])
+    ## tag-buffer.h (module 'network'): ns3::TagBuffer::TagBuffer(uint8_t * start, uint8_t * end) [constructor]
+    cls.add_constructor([param('uint8_t *', 'start'), param('uint8_t *', 'end')])
+    ## tag-buffer.h (module 'network'): void ns3::TagBuffer::CopyFrom(ns3::TagBuffer o) [member function]
+    cls.add_method('CopyFrom', 
                    'void', 
                    [param('ns3::TagBuffer', 'o')])
     ## tag-buffer.h (module 'network'): void ns3::TagBuffer::Read(uint8_t * buffer, uint32_t size) [member function]
@@ -2448,276 +1771,6 @@
     cls.add_instance_attribute('name', 'std::string', is_const=False)
     return
 
-def register_Ns3WifiMode_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    cls.add_binary_comparison_operator('==')
-    ## wifi-mode.h (module 'wifi'): ns3::WifiMode::WifiMode(ns3::WifiMode const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiMode const &', 'arg0')])
-    ## wifi-mode.h (module 'wifi'): ns3::WifiMode::WifiMode() [constructor]
-    cls.add_constructor([])
-    ## wifi-mode.h (module 'wifi'): ns3::WifiMode::WifiMode(std::string name) [constructor]
-    cls.add_constructor([param('std::string', 'name')])
-    ## wifi-mode.h (module 'wifi'): uint32_t ns3::WifiMode::GetBandwidth() const [member function]
-    cls.add_method('GetBandwidth', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## wifi-mode.h (module 'wifi'): ns3::WifiCodeRate ns3::WifiMode::GetCodeRate() const [member function]
-    cls.add_method('GetCodeRate', 
-                   'ns3::WifiCodeRate', 
-                   [], 
-                   is_const=True)
-    ## wifi-mode.h (module 'wifi'): uint8_t ns3::WifiMode::GetConstellationSize() const [member function]
-    cls.add_method('GetConstellationSize', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetDataRate() const [member function]
-    cls.add_method('GetDataRate', 
-                   'uint64_t', 
-                   [], 
-                   is_const=True)
-    ## wifi-mode.h (module 'wifi'): ns3::WifiModulationClass ns3::WifiMode::GetModulationClass() const [member function]
-    cls.add_method('GetModulationClass', 
-                   'ns3::WifiModulationClass', 
-                   [], 
-                   is_const=True)
-    ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetPhyRate() const [member function]
-    cls.add_method('GetPhyRate', 
-                   'uint64_t', 
-                   [], 
-                   is_const=True)
-    ## wifi-mode.h (module 'wifi'): uint32_t ns3::WifiMode::GetUid() const [member function]
-    cls.add_method('GetUid', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## wifi-mode.h (module 'wifi'): std::string ns3::WifiMode::GetUniqueName() const [member function]
-    cls.add_method('GetUniqueName', 
-                   'std::string', 
-                   [], 
-                   is_const=True)
-    ## wifi-mode.h (module 'wifi'): bool ns3::WifiMode::IsMandatory() const [member function]
-    cls.add_method('IsMandatory', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    return
-
-def register_Ns3WifiModeFactory_methods(root_module, cls):
-    ## wifi-mode.h (module 'wifi'): ns3::WifiModeFactory::WifiModeFactory(ns3::WifiModeFactory const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiModeFactory const &', 'arg0')])
-    ## wifi-mode.h (module 'wifi'): static ns3::WifiMode ns3::WifiModeFactory::CreateWifiMode(std::string uniqueName, ns3::WifiModulationClass modClass, bool isMandatory, uint32_t bandwidth, uint32_t dataRate, ns3::WifiCodeRate codingRate, uint8_t constellationSize) [member function]
-    cls.add_method('CreateWifiMode', 
-                   'ns3::WifiMode', 
-                   [param('std::string', 'uniqueName'), param('ns3::WifiModulationClass', 'modClass'), param('bool', 'isMandatory'), param('uint32_t', 'bandwidth'), param('uint32_t', 'dataRate'), param('ns3::WifiCodeRate', 'codingRate'), param('uint8_t', 'constellationSize')], 
-                   is_static=True)
-    return
-
-def register_Ns3WifiPhyListener_methods(root_module, cls):
-    ## wifi-phy.h (module 'wifi'): ns3::WifiPhyListener::WifiPhyListener() [constructor]
-    cls.add_constructor([])
-    ## wifi-phy.h (module 'wifi'): ns3::WifiPhyListener::WifiPhyListener(ns3::WifiPhyListener const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiPhyListener const &', 'arg0')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhyListener::NotifyMaybeCcaBusyStart(ns3::Time duration) [member function]
-    cls.add_method('NotifyMaybeCcaBusyStart', 
-                   'void', 
-                   [param('ns3::Time', 'duration')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhyListener::NotifyRxEndError() [member function]
-    cls.add_method('NotifyRxEndError', 
-                   'void', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhyListener::NotifyRxEndOk() [member function]
-    cls.add_method('NotifyRxEndOk', 
-                   'void', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhyListener::NotifyRxStart(ns3::Time duration) [member function]
-    cls.add_method('NotifyRxStart', 
-                   'void', 
-                   [param('ns3::Time', 'duration')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhyListener::NotifySleep() [member function]
-    cls.add_method('NotifySleep', 
-                   'void', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhyListener::NotifySwitchingStart(ns3::Time duration) [member function]
-    cls.add_method('NotifySwitchingStart', 
-                   'void', 
-                   [param('ns3::Time', 'duration')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhyListener::NotifyTxStart(ns3::Time duration, double txPowerDbm) [member function]
-    cls.add_method('NotifyTxStart', 
-                   'void', 
-                   [param('ns3::Time', 'duration'), param('double', 'txPowerDbm')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhyListener::NotifyWakeup() [member function]
-    cls.add_method('NotifyWakeup', 
-                   'void', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    return
-
-def register_Ns3WifiRadioEnergyModelHelper_methods(root_module, cls):
-    ## wifi-radio-energy-model-helper.h (module 'energy'): ns3::WifiRadioEnergyModelHelper::WifiRadioEnergyModelHelper(ns3::WifiRadioEnergyModelHelper const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiRadioEnergyModelHelper const &', 'arg0')])
-    ## wifi-radio-energy-model-helper.h (module 'energy'): ns3::WifiRadioEnergyModelHelper::WifiRadioEnergyModelHelper() [constructor]
-    cls.add_constructor([])
-    ## wifi-radio-energy-model-helper.h (module 'energy'): void ns3::WifiRadioEnergyModelHelper::Set(std::string name, ns3::AttributeValue const & v) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'v')], 
-                   is_virtual=True)
-    ## wifi-radio-energy-model-helper.h (module 'energy'): void ns3::WifiRadioEnergyModelHelper::SetDepletionCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
-    cls.add_method('SetDepletionCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
-    ## wifi-radio-energy-model-helper.h (module 'energy'): void ns3::WifiRadioEnergyModelHelper::SetRechargedCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
-    cls.add_method('SetRechargedCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
-    ## wifi-radio-energy-model-helper.h (module 'energy'): void ns3::WifiRadioEnergyModelHelper::SetTxCurrentModel(std::string name, std::string n0="", ns3::AttributeValue const & v0=ns3::EmptyAttributeValue(), std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue(), std::string n4="", ns3::AttributeValue const & v4=ns3::EmptyAttributeValue(), std::string n5="", ns3::AttributeValue const & v5=ns3::EmptyAttributeValue(), std::string n6="", ns3::AttributeValue const & v6=ns3::EmptyAttributeValue(), std::string n7="", ns3::AttributeValue const & v7=ns3::EmptyAttributeValue()) [member function]
-    cls.add_method('SetTxCurrentModel', 
-                   'void', 
-                   [param('std::string', 'name'), param('std::string', 'n0', default_value='""'), param('ns3::AttributeValue const &', 'v0', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n1', default_value='""'), param('ns3::AttributeValue const &', 'v1', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n2', default_value='""'), param('ns3::AttributeValue const &', 'v2', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n3', default_value='""'), param('ns3::AttributeValue const &', 'v3', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n4', default_value='""'), param('ns3::AttributeValue const &', 'v4', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n5', default_value='""'), param('ns3::AttributeValue const &', 'v5', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n6', default_value='""'), param('ns3::AttributeValue const &', 'v6', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n7', default_value='""'), param('ns3::AttributeValue const &', 'v7', default_value='ns3::EmptyAttributeValue()')])
-    ## wifi-radio-energy-model-helper.h (module 'energy'): ns3::Ptr<ns3::DeviceEnergyModel> ns3::WifiRadioEnergyModelHelper::DoInstall(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::EnergySource> source) const [member function]
-    cls.add_method('DoInstall', 
-                   'ns3::Ptr< ns3::DeviceEnergyModel >', 
-                   [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::EnergySource >', 'source')], 
-                   is_const=True, visibility='private', is_virtual=True)
-    return
-
-def register_Ns3WifiRadioEnergyModelPhyListener_methods(root_module, cls):
-    ## wifi-radio-energy-model.h (module 'energy'): ns3::WifiRadioEnergyModelPhyListener::WifiRadioEnergyModelPhyListener(ns3::WifiRadioEnergyModelPhyListener const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiRadioEnergyModelPhyListener const &', 'arg0')])
-    ## wifi-radio-energy-model.h (module 'energy'): ns3::WifiRadioEnergyModelPhyListener::WifiRadioEnergyModelPhyListener() [constructor]
-    cls.add_constructor([])
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModelPhyListener::NotifyMaybeCcaBusyStart(ns3::Time duration) [member function]
-    cls.add_method('NotifyMaybeCcaBusyStart', 
-                   'void', 
-                   [param('ns3::Time', 'duration')], 
-                   is_virtual=True)
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModelPhyListener::NotifyRxEndError() [member function]
-    cls.add_method('NotifyRxEndError', 
-                   'void', 
-                   [], 
-                   is_virtual=True)
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModelPhyListener::NotifyRxEndOk() [member function]
-    cls.add_method('NotifyRxEndOk', 
-                   'void', 
-                   [], 
-                   is_virtual=True)
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModelPhyListener::NotifyRxStart(ns3::Time duration) [member function]
-    cls.add_method('NotifyRxStart', 
-                   'void', 
-                   [param('ns3::Time', 'duration')], 
-                   is_virtual=True)
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModelPhyListener::NotifySleep() [member function]
-    cls.add_method('NotifySleep', 
-                   'void', 
-                   [], 
-                   is_virtual=True)
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModelPhyListener::NotifySwitchingStart(ns3::Time duration) [member function]
-    cls.add_method('NotifySwitchingStart', 
-                   'void', 
-                   [param('ns3::Time', 'duration')], 
-                   is_virtual=True)
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModelPhyListener::NotifyTxStart(ns3::Time duration, double txPowerDbm) [member function]
-    cls.add_method('NotifyTxStart', 
-                   'void', 
-                   [param('ns3::Time', 'duration'), param('double', 'txPowerDbm')], 
-                   is_virtual=True)
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModelPhyListener::NotifyWakeup() [member function]
-    cls.add_method('NotifyWakeup', 
-                   'void', 
-                   [], 
-                   is_virtual=True)
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModelPhyListener::SetChangeStateCallback(ns3::Callback<void, int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
-    cls.add_method('SetChangeStateCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModelPhyListener::SetUpdateTxCurrentCallback(ns3::Callback<void, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
-    cls.add_method('SetUpdateTxCurrentCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
-    return
-
-def register_Ns3WifiTxVector_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiTxVector const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiTxVector const &', 'arg0')])
-    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector() [constructor]
-    cls.add_constructor([])
-    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiMode mode, uint8_t powerLevel, uint8_t retries, bool shortGuardInterval, uint8_t nss, uint8_t ness, bool stbc) [constructor]
-    cls.add_constructor([param('ns3::WifiMode', 'mode'), param('uint8_t', 'powerLevel'), param('uint8_t', 'retries'), param('bool', 'shortGuardInterval'), param('uint8_t', 'nss'), param('uint8_t', 'ness'), param('bool', 'stbc')])
-    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiMode ns3::WifiTxVector::GetMode() const [member function]
-    cls.add_method('GetMode', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_const=True)
-    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetNess() const [member function]
-    cls.add_method('GetNess', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetNss() const [member function]
-    cls.add_method('GetNss', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetRetries() const [member function]
-    cls.add_method('GetRetries', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## wifi-tx-vector.h (module 'wifi'): uint8_t ns3::WifiTxVector::GetTxPowerLevel() const [member function]
-    cls.add_method('GetTxPowerLevel', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## wifi-tx-vector.h (module 'wifi'): bool ns3::WifiTxVector::IsShortGuardInterval() const [member function]
-    cls.add_method('IsShortGuardInterval', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-tx-vector.h (module 'wifi'): bool ns3::WifiTxVector::IsStbc() const [member function]
-    cls.add_method('IsStbc', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetMode(ns3::WifiMode mode) [member function]
-    cls.add_method('SetMode', 
-                   'void', 
-                   [param('ns3::WifiMode', 'mode')])
-    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetNess(uint8_t ness) [member function]
-    cls.add_method('SetNess', 
-                   'void', 
-                   [param('uint8_t', 'ness')])
-    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetNss(uint8_t nss) [member function]
-    cls.add_method('SetNss', 
-                   'void', 
-                   [param('uint8_t', 'nss')])
-    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetRetries(uint8_t retries) [member function]
-    cls.add_method('SetRetries', 
-                   'void', 
-                   [param('uint8_t', 'retries')])
-    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetShortGuardInterval(bool guardinterval) [member function]
-    cls.add_method('SetShortGuardInterval', 
-                   'void', 
-                   [param('bool', 'guardinterval')])
-    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetStbc(bool stbc) [member function]
-    cls.add_method('SetStbc', 
-                   'void', 
-                   [param('bool', 'stbc')])
-    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetTxPowerLevel(uint8_t powerlevel) [member function]
-    cls.add_method('SetTxPowerLevel', 
-                   'void', 
-                   [param('uint8_t', 'powerlevel')])
-    return
-
 def register_Ns3Empty_methods(root_module, cls):
     ## empty.h (module 'core'): ns3::empty::empty() [constructor]
     cls.add_constructor([])
@@ -2826,61 +1879,6 @@
                    is_const=True, visibility='private', is_virtual=True)
     return
 
-def register_Ns3Chunk_methods(root_module, cls):
-    ## chunk.h (module 'network'): ns3::Chunk::Chunk() [constructor]
-    cls.add_constructor([])
-    ## chunk.h (module 'network'): ns3::Chunk::Chunk(ns3::Chunk const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Chunk const &', 'arg0')])
-    ## chunk.h (module 'network'): uint32_t ns3::Chunk::Deserialize(ns3::Buffer::Iterator start) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## chunk.h (module 'network'): static ns3::TypeId ns3::Chunk::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## chunk.h (module 'network'): void ns3::Chunk::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    return
-
-def register_Ns3Header_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## header.h (module 'network'): ns3::Header::Header() [constructor]
-    cls.add_constructor([])
-    ## header.h (module 'network'): ns3::Header::Header(ns3::Header const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Header const &', 'arg0')])
-    ## header.h (module 'network'): uint32_t ns3::Header::Deserialize(ns3::Buffer::Iterator start) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## header.h (module 'network'): uint32_t ns3::Header::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## header.h (module 'network'): static ns3::TypeId ns3::Header::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## header.h (module 'network'): void ns3::Header::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## header.h (module 'network'): void ns3::Header::Serialize(ns3::Buffer::Iterator start) const [member function]
-    cls.add_method('Serialize', 
-                   'void', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    return
-
 def register_Ns3Object_methods(root_module, cls):
     ## object.h (module 'core'): ns3::Object::Object() [constructor]
     cls.add_constructor([])
@@ -3102,30 +2100,6 @@
                    is_static=True)
     return
 
-def register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
-    cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter< ns3::NixVector > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::Cleanup() [member function]
-    cls.add_method('Cleanup', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    return
-
-def register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >::SimpleRefCount() [constructor]
-    cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter< ns3::Packet > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >::Cleanup() [member function]
-    cls.add_method('Cleanup', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    return
-
 def register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -3397,39 +2371,6 @@
                    [param('ns3::Time const &', 'v')])
     return
 
-def register_Ns3Trailer_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## trailer.h (module 'network'): ns3::Trailer::Trailer() [constructor]
-    cls.add_constructor([])
-    ## trailer.h (module 'network'): ns3::Trailer::Trailer(ns3::Trailer const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Trailer const &', 'arg0')])
-    ## trailer.h (module 'network'): uint32_t ns3::Trailer::Deserialize(ns3::Buffer::Iterator end) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'end')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## trailer.h (module 'network'): uint32_t ns3::Trailer::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## trailer.h (module 'network'): static ns3::TypeId ns3::Trailer::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## trailer.h (module 'network'): void ns3::Trailer::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## trailer.h (module 'network'): void ns3::Trailer::Serialize(ns3::Buffer::Iterator start) const [member function]
-    cls.add_method('Serialize', 
-                   'void', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    return
-
 def register_Ns3TriangularRandomVariable_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::TriangularRandomVariable::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -3507,764 +2448,51 @@
     ## random-variable-stream.h (module 'core'): uint32_t ns3::UniformRandomVariable::GetInteger() [member function]
     cls.add_method('GetInteger', 
                    'uint32_t', 
-                   [], 
-                   is_virtual=True)
-    return
-
-def register_Ns3WeibullRandomVariable_methods(root_module, cls):
-    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::WeibullRandomVariable::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## random-variable-stream.h (module 'core'): ns3::WeibullRandomVariable::WeibullRandomVariable() [constructor]
-    cls.add_constructor([])
-    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetScale() const [member function]
-    cls.add_method('GetScale', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetShape() const [member function]
-    cls.add_method('GetShape', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetBound() const [member function]
-    cls.add_method('GetBound', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetValue(double scale, double shape, double bound) [member function]
-    cls.add_method('GetValue', 
-                   'double', 
-                   [param('double', 'scale'), param('double', 'shape'), param('double', 'bound')])
-    ## random-variable-stream.h (module 'core'): uint32_t ns3::WeibullRandomVariable::GetInteger(uint32_t scale, uint32_t shape, uint32_t bound) [member function]
-    cls.add_method('GetInteger', 
-                   'uint32_t', 
-                   [param('uint32_t', 'scale'), param('uint32_t', 'shape'), param('uint32_t', 'bound')])
-    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetValue() [member function]
-    cls.add_method('GetValue', 
-                   'double', 
-                   [], 
-                   is_virtual=True)
-    ## random-variable-stream.h (module 'core'): uint32_t ns3::WeibullRandomVariable::GetInteger() [member function]
-    cls.add_method('GetInteger', 
-                   'uint32_t', 
-                   [], 
-                   is_virtual=True)
-    return
-
-def register_Ns3WifiPhy_methods(root_module, cls):
-    ## wifi-phy.h (module 'wifi'): ns3::WifiPhy::WifiPhy(ns3::WifiPhy const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiPhy const &', 'arg0')])
-    ## wifi-phy.h (module 'wifi'): ns3::WifiPhy::WifiPhy() [constructor]
-    cls.add_constructor([])
-    ## wifi-phy.h (module 'wifi'): int64_t ns3::WifiPhy::AssignStreams(int64_t stream) [member function]
-    cls.add_method('AssignStreams', 
-                   'int64_t', 
-                   [param('int64_t', 'stream')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculatePlcpDuration(ns3::WifiTxVector txvector, ns3::WifiPreamble preamble) [member function]
-    cls.add_method('CalculatePlcpDuration', 
-                   'ns3::Time', 
-                   [param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble')])
-    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::CalculateSnr(ns3::WifiMode txMode, double ber) const [member function]
-    cls.add_method('CalculateSnr', 
-                   'double', 
-                   [param('ns3::WifiMode', 'txMode'), param('double', 'ber')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
-    cls.add_method('CalculateTxDuration', 
-                   'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
-    cls.add_method('ConfigureStandard', 
-                   'void', 
-                   [param('ns3::WifiPhyStandard', 'standard')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetBssMembershipSelector(uint32_t selector) const [member function]
-    cls.add_method('GetBssMembershipSelector', 
-                   'uint32_t', 
-                   [param('uint32_t', 'selector')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Ptr<ns3::WifiChannel> ns3::WifiPhy::GetChannel() const [member function]
-    cls.add_method('GetChannel', 
-                   'ns3::Ptr< ns3::WifiChannel >', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetChannelBonding() const [member function]
-    cls.add_method('GetChannelBonding', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): uint16_t ns3::WifiPhy::GetChannelNumber() const [member function]
-    cls.add_method('GetChannelNumber', 
-                   'uint16_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetChannelSwitchDelay() const [member function]
-    cls.add_method('GetChannelSwitchDelay', 
-                   'ns3::Time', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetDelayUntilIdle() [member function]
-    cls.add_method('GetDelayUntilIdle', 
-                   'ns3::Time', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetDsssRate11Mbps() [member function]
-    cls.add_method('GetDsssRate11Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetDsssRate1Mbps() [member function]
-    cls.add_method('GetDsssRate1Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetDsssRate2Mbps() [member function]
-    cls.add_method('GetDsssRate2Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetDsssRate5_5Mbps() [member function]
-    cls.add_method('GetDsssRate5_5Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate12Mbps() [member function]
-    cls.add_method('GetErpOfdmRate12Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate18Mbps() [member function]
-    cls.add_method('GetErpOfdmRate18Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate24Mbps() [member function]
-    cls.add_method('GetErpOfdmRate24Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate36Mbps() [member function]
-    cls.add_method('GetErpOfdmRate36Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate48Mbps() [member function]
-    cls.add_method('GetErpOfdmRate48Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate54Mbps() [member function]
-    cls.add_method('GetErpOfdmRate54Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate6Mbps() [member function]
-    cls.add_method('GetErpOfdmRate6Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetErpOfdmRate9Mbps() [member function]
-    cls.add_method('GetErpOfdmRate9Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetFrequency() const [member function]
-    cls.add_method('GetFrequency', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetGreenfield() const [member function]
-    cls.add_method('GetGreenfield', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetGuardInterval() const [member function]
-    cls.add_method('GetGuardInterval', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetLastRxStartTime() const [member function]
-    cls.add_method('GetLastRxStartTime', 
-                   'ns3::Time', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetLdpc() const [member function]
-    cls.add_method('GetLdpc', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetMFPlcpHeaderMode(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
-    cls.add_method('GetMFPlcpHeaderMode', 
-                   'ns3::WifiMode', 
-                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetMcs(uint8_t mcs) const [member function]
-    cls.add_method('GetMcs', 
-                   'uint8_t', 
-                   [param('uint8_t', 'mcs')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::WifiModeList ns3::WifiPhy::GetMembershipSelectorModes(uint32_t selector) [member function]
-    cls.add_method('GetMembershipSelectorModes', 
-                   'ns3::WifiModeList', 
-                   [param('uint32_t', 'selector')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::GetMode(uint32_t mode) const [member function]
-    cls.add_method('GetMode', 
-                   'ns3::WifiMode', 
-                   [param('uint32_t', 'mode')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNBssMembershipSelectors() const [member function]
-    cls.add_method('GetNBssMembershipSelectors', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetNMcs() const [member function]
-    cls.add_method('GetNMcs', 
-                   'uint8_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNModes() const [member function]
-    cls.add_method('GetNModes', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNTxPower() const [member function]
-    cls.add_method('GetNTxPower', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfReceiveAntennas() const [member function]
-    cls.add_method('GetNumberOfReceiveAntennas', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetNumberOfTransmitAntennas() const [member function]
-    cls.add_method('GetNumberOfTransmitAntennas', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate108MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate108MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate120MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate120MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate121_5MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate121_5MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12Mbps() [member function]
-    cls.add_method('GetOfdmRate12Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate12MbpsBW10MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate12MbpsBW5MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate135MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate135MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate135MbpsBW40MHzShGi() [member function]
-    cls.add_method('GetOfdmRate135MbpsBW40MHzShGi', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate13MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13_5MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate13_5MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13_5MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate13_5MbpsBW5MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate14_4MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate14_4MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate150MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate150MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate15MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate15MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate18Mbps() [member function]
-    cls.add_method('GetOfdmRate18Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate18MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate18MbpsBW10MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate19_5MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate19_5MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate1_5MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate1_5MbpsBW5MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate21_7MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate21_7MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate24Mbps() [member function]
-    cls.add_method('GetOfdmRate24Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate24MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate24MbpsBW10MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate26MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate26MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate27MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate27MbpsBW10MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate27MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate27MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate28_9MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate28_9MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate2_25MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate2_25MbpsBW5MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate30MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate30MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate36Mbps() [member function]
-    cls.add_method('GetOfdmRate36Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate39MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate39MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate3MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate3MbpsBW10MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate3MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate3MbpsBW5MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate40_5MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate40_5MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate43_3MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate43_3MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate45MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate45MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate48Mbps() [member function]
-    cls.add_method('GetOfdmRate48Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate4_5MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate4_5MbpsBW10MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate4_5MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate4_5MbpsBW5MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate52MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate52MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate54Mbps() [member function]
-    cls.add_method('GetOfdmRate54Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate54MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate54MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate57_8MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate57_8MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate58_5MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate58_5MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate60MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate60MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate65MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate65MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate65MbpsBW20MHzShGi() [member function]
-    cls.add_method('GetOfdmRate65MbpsBW20MHzShGi', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6Mbps() [member function]
-    cls.add_method('GetOfdmRate6Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate6MbpsBW10MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate6MbpsBW5MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6_5MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate6_5MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate72_2MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate72_2MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate7_2MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate7_2MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate81MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate81MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate90MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate90MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9Mbps() [member function]
-    cls.add_method('GetOfdmRate9Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate9MbpsBW10MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate9MbpsBW5MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetPayloadDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
-    cls.add_method('GetPayloadDuration', 
-                   'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
-    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHeaderDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
-    cls.add_method('GetPlcpHeaderDuration', 
-                   'ns3::Time', 
-                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetPlcpHeaderMode(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
-    cls.add_method('GetPlcpHeaderMode', 
-                   'ns3::WifiMode', 
-                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHtSigHeaderDuration(ns3::WifiPreamble preamble) [member function]
-    cls.add_method('GetPlcpHtSigHeaderDuration', 
-                   'ns3::Time', 
-                   [param('ns3::WifiPreamble', 'preamble')], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHtTrainingSymbolDuration(ns3::WifiPreamble preamble, ns3::WifiTxVector txvector) [member function]
-    cls.add_method('GetPlcpHtTrainingSymbolDuration', 
-                   'ns3::Time', 
-                   [param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txvector')], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpPreambleDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
-    cls.add_method('GetPlcpPreambleDuration', 
-                   'ns3::Time', 
-                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetStateDuration() [member function]
-    cls.add_method('GetStateDuration', 
-                   'ns3::Time', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetStbc() const [member function]
-    cls.add_method('GetStbc', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxPowerEnd() const [member function]
-    cls.add_method('GetTxPowerEnd', 
-                   'double', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxPowerStart() const [member function]
-    cls.add_method('GetTxPowerStart', 
-                   'double', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::TypeId ns3::WifiPhy::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsModeSupported(ns3::WifiMode mode) const [member function]
-    cls.add_method('IsModeSupported', 
-                   'bool', 
-                   [param('ns3::WifiMode', 'mode')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateBusy() [member function]
-    cls.add_method('IsStateBusy', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateCcaBusy() [member function]
-    cls.add_method('IsStateCcaBusy', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateIdle() [member function]
-    cls.add_method('IsStateIdle', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateRx() [member function]
-    cls.add_method('IsStateRx', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateSleep() [member function]
-    cls.add_method('IsStateSleep', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateSwitching() [member function]
-    cls.add_method('IsStateSwitching', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsStateTx() [member function]
-    cls.add_method('IsStateTx', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::McsToWifiMode(uint8_t mcs) [member function]
-    cls.add_method('McsToWifiMode', 
-                   'ns3::WifiMode', 
-                   [param('uint8_t', 'mcs')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffRx(ns3::Ptr<const ns3::Packet> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble, double signalDbm, double noiseDbm) [member function]
-    cls.add_method('NotifyMonitorSniffRx', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('bool', 'isShortPreamble'), param('double', 'signalDbm'), param('double', 'noiseDbm')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffTx(ns3::Ptr<const ns3::Packet> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble, uint8_t txPower) [member function]
-    cls.add_method('NotifyMonitorSniffTx', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('bool', 'isShortPreamble'), param('uint8_t', 'txPower')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyRxBegin(ns3::Ptr<const ns3::Packet> packet) [member function]
-    cls.add_method('NotifyRxBegin', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyRxDrop(ns3::Ptr<const ns3::Packet> packet) [member function]
-    cls.add_method('NotifyRxDrop', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyRxEnd(ns3::Ptr<const ns3::Packet> packet) [member function]
-    cls.add_method('NotifyRxEnd', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyTxBegin(ns3::Ptr<const ns3::Packet> packet) [member function]
-    cls.add_method('NotifyTxBegin', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyTxDrop(ns3::Ptr<const ns3::Packet> packet) [member function]
-    cls.add_method('NotifyTxDrop', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyTxEnd(ns3::Ptr<const ns3::Packet> packet) [member function]
-    cls.add_method('NotifyTxEnd', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::RegisterListener(ns3::WifiPhyListener * listener) [member function]
-    cls.add_method('RegisterListener', 
-                   'void', 
-                   [param('ns3::WifiPhyListener *', 'listener')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ResumeFromSleep() [member function]
-    cls.add_method('ResumeFromSleep', 
-                   'void', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<const ns3::Packet> packet, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, uint8_t packetType) [member function]
-    cls.add_method('SendPacket', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'packetType')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelBonding(bool channelbonding) [member function]
-    cls.add_method('SetChannelBonding', 
-                   'void', 
-                   [param('bool', 'channelbonding')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelNumber(uint16_t id) [member function]
-    cls.add_method('SetChannelNumber', 
-                   'void', 
-                   [param('uint16_t', 'id')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetFrequency(uint32_t freq) [member function]
-    cls.add_method('SetFrequency', 
-                   'void', 
-                   [param('uint32_t', 'freq')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGreenfield(bool greenfield) [member function]
-    cls.add_method('SetGreenfield', 
-                   'void', 
-                   [param('bool', 'greenfield')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetGuardInterval(bool guardInterval) [member function]
-    cls.add_method('SetGuardInterval', 
-                   'void', 
-                   [param('bool', 'guardInterval')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetLdpc(bool ldpc) [member function]
-    cls.add_method('SetLdpc', 
-                   'void', 
-                   [param('bool', 'ldpc')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNumberOfReceiveAntennas(uint32_t rx) [member function]
-    cls.add_method('SetNumberOfReceiveAntennas', 
-                   'void', 
-                   [param('uint32_t', 'rx')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetNumberOfTransmitAntennas(uint32_t tx) [member function]
-    cls.add_method('SetNumberOfTransmitAntennas', 
-                   'void', 
-                   [param('uint32_t', 'tx')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveErrorCallback(ns3::Callback<void,ns3::Ptr<const ns3::Packet>,double,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
-    cls.add_method('SetReceiveErrorCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveOkCallback(ns3::Callback<void,ns3::Ptr<ns3::Packet>,double,ns3::WifiTxVector,ns3::WifiPreamble,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
-    cls.add_method('SetReceiveOkCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::WifiTxVector, ns3::WifiPreamble, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetSleepMode() [member function]
-    cls.add_method('SetSleepMode', 
-                   'void', 
-                   [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetStbc(bool stbc) [member function]
-    cls.add_method('SetStbc', 
-                   'void', 
-                   [param('bool', 'stbc')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::UnregisterListener(ns3::WifiPhyListener * listener) [member function]
-    cls.add_method('UnregisterListener', 
-                   'void', 
-                   [param('ns3::WifiPhyListener *', 'listener')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::WifiModeToMcs(ns3::WifiMode mode) [member function]
-    cls.add_method('WifiModeToMcs', 
-                   'uint32_t', 
-                   [param('ns3::WifiMode', 'mode')], 
-                   is_pure_virtual=True, is_virtual=True)
+                   [], 
+                   is_virtual=True)
     return
 
-def register_Ns3WifiTxCurrentModel_methods(root_module, cls):
-    ## wifi-tx-current-model.h (module 'energy'): ns3::WifiTxCurrentModel::WifiTxCurrentModel(ns3::WifiTxCurrentModel const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiTxCurrentModel const &', 'arg0')])
-    ## wifi-tx-current-model.h (module 'energy'): ns3::WifiTxCurrentModel::WifiTxCurrentModel() [constructor]
-    cls.add_constructor([])
-    ## wifi-tx-current-model.h (module 'energy'): double ns3::WifiTxCurrentModel::CalcTxCurrent(double txPowerDbm) const [member function]
-    cls.add_method('CalcTxCurrent', 
-                   'double', 
-                   [param('double', 'txPowerDbm')], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-tx-current-model.h (module 'energy'): static double ns3::WifiTxCurrentModel::DbmToW(double dbm) [member function]
-    cls.add_method('DbmToW', 
-                   'double', 
-                   [param('double', 'dbm')], 
-                   is_static=True)
-    ## wifi-tx-current-model.h (module 'energy'): static ns3::TypeId ns3::WifiTxCurrentModel::GetTypeId() [member function]
+def register_Ns3WeibullRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::WeibullRandomVariable::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::WeibullRandomVariable::WeibullRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetScale() const [member function]
+    cls.add_method('GetScale', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetShape() const [member function]
+    cls.add_method('GetShape', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetBound() const [member function]
+    cls.add_method('GetBound', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetValue(double scale, double shape, double bound) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'scale'), param('double', 'shape'), param('double', 'bound')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::WeibullRandomVariable::GetInteger(uint32_t scale, uint32_t shape, uint32_t bound) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'scale'), param('uint32_t', 'shape'), param('uint32_t', 'bound')])
+    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::WeibullRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
     return
 
 def register_Ns3ZetaRandomVariable_methods(root_module, cls):
@@ -4482,11 +2710,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -4676,10 +2914,10 @@
                    'double', 
                    [], 
                    is_virtual=True)
-    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
     cls.add_method('Interpolate', 
                    'double', 
-                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
                    visibility='private', is_virtual=True)
     ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
     cls.add_method('Validate', 
@@ -5457,50 +3695,6 @@
                    visibility='private', is_virtual=True)
     return
 
-def register_Ns3LinearWifiTxCurrentModel_methods(root_module, cls):
-    ## wifi-tx-current-model.h (module 'energy'): ns3::LinearWifiTxCurrentModel::LinearWifiTxCurrentModel(ns3::LinearWifiTxCurrentModel const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::LinearWifiTxCurrentModel const &', 'arg0')])
-    ## wifi-tx-current-model.h (module 'energy'): ns3::LinearWifiTxCurrentModel::LinearWifiTxCurrentModel() [constructor]
-    cls.add_constructor([])
-    ## wifi-tx-current-model.h (module 'energy'): double ns3::LinearWifiTxCurrentModel::CalcTxCurrent(double txPowerDbm) const [member function]
-    cls.add_method('CalcTxCurrent', 
-                   'double', 
-                   [param('double', 'txPowerDbm')], 
-                   is_const=True, is_virtual=True)
-    ## wifi-tx-current-model.h (module 'energy'): double ns3::LinearWifiTxCurrentModel::GetEta() const [member function]
-    cls.add_method('GetEta', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## wifi-tx-current-model.h (module 'energy'): double ns3::LinearWifiTxCurrentModel::GetIdleCurrent() const [member function]
-    cls.add_method('GetIdleCurrent', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## wifi-tx-current-model.h (module 'energy'): static ns3::TypeId ns3::LinearWifiTxCurrentModel::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## wifi-tx-current-model.h (module 'energy'): double ns3::LinearWifiTxCurrentModel::GetVoltage() const [member function]
-    cls.add_method('GetVoltage', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## wifi-tx-current-model.h (module 'energy'): void ns3::LinearWifiTxCurrentModel::SetEta(double eta) [member function]
-    cls.add_method('SetEta', 
-                   'void', 
-                   [param('double', 'eta')])
-    ## wifi-tx-current-model.h (module 'energy'): void ns3::LinearWifiTxCurrentModel::SetIdleCurrent(double idleCurrent) [member function]
-    cls.add_method('SetIdleCurrent', 
-                   'void', 
-                   [param('double', 'idleCurrent')])
-    ## wifi-tx-current-model.h (module 'energy'): void ns3::LinearWifiTxCurrentModel::SetVoltage(double voltage) [member function]
-    cls.add_method('SetVoltage', 
-                   'void', 
-                   [param('double', 'voltage')])
-    return
-
 def register_Ns3LogNormalRandomVariable_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::LogNormalRandomVariable::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -5544,7 +3738,7 @@
     cls.add_constructor([])
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice(ns3::NetDevice const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDevice const &', 'arg0')])
-    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -5671,50 +3865,6 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
-def register_Ns3NixVector_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## nix-vector.h (module 'network'): ns3::NixVector::NixVector() [constructor]
-    cls.add_constructor([])
-    ## nix-vector.h (module 'network'): ns3::NixVector::NixVector(ns3::NixVector const & o) [copy constructor]
-    cls.add_constructor([param('ns3::NixVector const &', 'o')])
-    ## nix-vector.h (module 'network'): void ns3::NixVector::AddNeighborIndex(uint32_t newBits, uint32_t numberOfBits) [member function]
-    cls.add_method('AddNeighborIndex', 
-                   'void', 
-                   [param('uint32_t', 'newBits'), param('uint32_t', 'numberOfBits')])
-    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::BitCount(uint32_t numberOfNeighbors) const [member function]
-    cls.add_method('BitCount', 
-                   'uint32_t', 
-                   [param('uint32_t', 'numberOfNeighbors')], 
-                   is_const=True)
-    ## nix-vector.h (module 'network'): ns3::Ptr<ns3::NixVector> ns3::NixVector::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::NixVector >', 
-                   [], 
-                   is_const=True)
-    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::Deserialize(uint32_t const * buffer, uint32_t size) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('uint32_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::ExtractNeighborIndex(uint32_t numberOfBits) [member function]
-    cls.add_method('ExtractNeighborIndex', 
-                   'uint32_t', 
-                   [param('uint32_t', 'numberOfBits')])
-    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::GetRemainingBits() [member function]
-    cls.add_method('GetRemainingBits', 
-                   'uint32_t', 
-                   [])
-    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::Serialize(uint32_t * buffer, uint32_t maxSize) const [member function]
-    cls.add_method('Serialize', 
-                   'uint32_t', 
-                   [param('uint32_t *', 'buffer'), param('uint32_t', 'maxSize')], 
-                   is_const=True)
-    return
-
 def register_Ns3Node_methods(root_module, cls):
     ## node.h (module 'network'): ns3::Node::Node(ns3::Node const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Node const &', 'arg0')])
@@ -5883,191 +4033,6 @@
                    [param('ns3::ObjectFactory const &', 'value')])
     return
 
-def register_Ns3Packet_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## packet.h (module 'network'): ns3::Packet::Packet() [constructor]
-    cls.add_constructor([])
-    ## packet.h (module 'network'): ns3::Packet::Packet(ns3::Packet const & o) [copy constructor]
-    cls.add_constructor([param('ns3::Packet const &', 'o')])
-    ## packet.h (module 'network'): ns3::Packet::Packet(uint32_t size) [constructor]
-    cls.add_constructor([param('uint32_t', 'size')])
-    ## packet.h (module 'network'): ns3::Packet::Packet(uint8_t const * buffer, uint32_t size, bool magic) [constructor]
-    cls.add_constructor([param('uint8_t const *', 'buffer'), param('uint32_t', 'size'), param('bool', 'magic')])
-    ## packet.h (module 'network'): ns3::Packet::Packet(uint8_t const * buffer, uint32_t size) [constructor]
-    cls.add_constructor([param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
-    ## packet.h (module 'network'): void ns3::Packet::AddAtEnd(ns3::Ptr<const ns3::Packet> packet) [member function]
-    cls.add_method('AddAtEnd', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## packet.h (module 'network'): void ns3::Packet::AddByteTag(ns3::Tag const & tag) const [member function]
-    cls.add_method('AddByteTag', 
-                   'void', 
-                   [param('ns3::Tag const &', 'tag')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::AddHeader(ns3::Header const & header) [member function]
-    cls.add_method('AddHeader', 
-                   'void', 
-                   [param('ns3::Header const &', 'header')])
-    ## packet.h (module 'network'): void ns3::Packet::AddPacketTag(ns3::Tag const & tag) const [member function]
-    cls.add_method('AddPacketTag', 
-                   'void', 
-                   [param('ns3::Tag const &', 'tag')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::AddPaddingAtEnd(uint32_t size) [member function]
-    cls.add_method('AddPaddingAtEnd', 
-                   'void', 
-                   [param('uint32_t', 'size')])
-    ## packet.h (module 'network'): void ns3::Packet::AddTrailer(ns3::Trailer const & trailer) [member function]
-    cls.add_method('AddTrailer', 
-                   'void', 
-                   [param('ns3::Trailer const &', 'trailer')])
-    ## packet.h (module 'network'): ns3::PacketMetadata::ItemIterator ns3::Packet::BeginItem() const [member function]
-    cls.add_method('BeginItem', 
-                   'ns3::PacketMetadata::ItemIterator', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Packet::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::Packet >', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint32_t ns3::Packet::CopyData(uint8_t * buffer, uint32_t size) const [member function]
-    cls.add_method('CopyData', 
-                   'uint32_t', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::CopyData(std::ostream * os, uint32_t size) const [member function]
-    cls.add_method('CopyData', 
-                   'void', 
-                   [param('std::ostream *', 'os'), param('uint32_t', 'size')], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Packet::CreateFragment(uint32_t start, uint32_t length) const [member function]
-    cls.add_method('CreateFragment', 
-                   'ns3::Ptr< ns3::Packet >', 
-                   [param('uint32_t', 'start'), param('uint32_t', 'length')], 
-                   is_const=True)
-    ## packet.h (module 'network'): static void ns3::Packet::EnableChecking() [member function]
-    cls.add_method('EnableChecking', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    ## packet.h (module 'network'): static void ns3::Packet::EnablePrinting() [member function]
-    cls.add_method('EnablePrinting', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    ## packet.h (module 'network'): bool ns3::Packet::FindFirstMatchingByteTag(ns3::Tag & tag) const [member function]
-    cls.add_method('FindFirstMatchingByteTag', 
-                   'bool', 
-                   [param('ns3::Tag &', 'tag')], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::ByteTagIterator ns3::Packet::GetByteTagIterator() const [member function]
-    cls.add_method('GetByteTagIterator', 
-                   'ns3::ByteTagIterator', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::Ptr<ns3::NixVector> ns3::Packet::GetNixVector() const [member function]
-    cls.add_method('GetNixVector', 
-                   'ns3::Ptr< ns3::NixVector >', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): ns3::PacketTagIterator ns3::Packet::GetPacketTagIterator() const [member function]
-    cls.add_method('GetPacketTagIterator', 
-                   'ns3::PacketTagIterator', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint32_t ns3::Packet::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint32_t ns3::Packet::GetSize() const [member function]
-    cls.add_method('GetSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint64_t ns3::Packet::GetUid() const [member function]
-    cls.add_method('GetUid', 
-                   'uint64_t', 
-                   [], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint32_t ns3::Packet::PeekHeader(ns3::Header & header) const [member function]
-    cls.add_method('PeekHeader', 
-                   'uint32_t', 
-                   [param('ns3::Header &', 'header')], 
-                   is_const=True)
-    ## packet.h (module 'network'): bool ns3::Packet::PeekPacketTag(ns3::Tag & tag) const [member function]
-    cls.add_method('PeekPacketTag', 
-                   'bool', 
-                   [param('ns3::Tag &', 'tag')], 
-                   is_const=True)
-    ## packet.h (module 'network'): uint32_t ns3::Packet::PeekTrailer(ns3::Trailer & trailer) [member function]
-    cls.add_method('PeekTrailer', 
-                   'uint32_t', 
-                   [param('ns3::Trailer &', 'trailer')])
-    ## packet.h (module 'network'): void ns3::Packet::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::PrintByteTags(std::ostream & os) const [member function]
-    cls.add_method('PrintByteTags', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::PrintPacketTags(std::ostream & os) const [member function]
-    cls.add_method('PrintPacketTags', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::RemoveAllByteTags() [member function]
-    cls.add_method('RemoveAllByteTags', 
-                   'void', 
-                   [])
-    ## packet.h (module 'network'): void ns3::Packet::RemoveAllPacketTags() [member function]
-    cls.add_method('RemoveAllPacketTags', 
-                   'void', 
-                   [])
-    ## packet.h (module 'network'): void ns3::Packet::RemoveAtEnd(uint32_t size) [member function]
-    cls.add_method('RemoveAtEnd', 
-                   'void', 
-                   [param('uint32_t', 'size')])
-    ## packet.h (module 'network'): void ns3::Packet::RemoveAtStart(uint32_t size) [member function]
-    cls.add_method('RemoveAtStart', 
-                   'void', 
-                   [param('uint32_t', 'size')])
-    ## packet.h (module 'network'): uint32_t ns3::Packet::RemoveHeader(ns3::Header & header) [member function]
-    cls.add_method('RemoveHeader', 
-                   'uint32_t', 
-                   [param('ns3::Header &', 'header')])
-    ## packet.h (module 'network'): bool ns3::Packet::RemovePacketTag(ns3::Tag & tag) [member function]
-    cls.add_method('RemovePacketTag', 
-                   'bool', 
-                   [param('ns3::Tag &', 'tag')])
-    ## packet.h (module 'network'): uint32_t ns3::Packet::RemoveTrailer(ns3::Trailer & trailer) [member function]
-    cls.add_method('RemoveTrailer', 
-                   'uint32_t', 
-                   [param('ns3::Trailer &', 'trailer')])
-    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
-    cls.add_method('ReplacePacketTag', 
-                   'bool', 
-                   [param('ns3::Tag &', 'tag')])
-    ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
-    cls.add_method('Serialize', 
-                   'uint32_t', 
-                   [param('uint8_t *', 'buffer'), param('uint32_t', 'maxSize')], 
-                   is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::SetNixVector(ns3::Ptr<ns3::NixVector> nixVector) [member function]
-    cls.add_method('SetNixVector', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
-    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
-    cls.add_method('ToString', 
-                   'std::string', 
-                   [], 
-                   is_const=True)
-    return
-
 def register_Ns3ParetoRandomVariable_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::ParetoRandomVariable::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -6388,172 +4353,6 @@
                    [param('uint64_t const &', 'value')])
     return
 
-def register_Ns3WifiModeChecker_methods(root_module, cls):
-    ## wifi-mode.h (module 'wifi'): ns3::WifiModeChecker::WifiModeChecker() [constructor]
-    cls.add_constructor([])
-    ## wifi-mode.h (module 'wifi'): ns3::WifiModeChecker::WifiModeChecker(ns3::WifiModeChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiModeChecker const &', 'arg0')])
-    return
-
-def register_Ns3WifiModeValue_methods(root_module, cls):
-    ## wifi-mode.h (module 'wifi'): ns3::WifiModeValue::WifiModeValue() [constructor]
-    cls.add_constructor([])
-    ## wifi-mode.h (module 'wifi'): ns3::WifiModeValue::WifiModeValue(ns3::WifiModeValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiModeValue const &', 'arg0')])
-    ## wifi-mode.h (module 'wifi'): ns3::WifiModeValue::WifiModeValue(ns3::WifiMode const & value) [constructor]
-    cls.add_constructor([param('ns3::WifiMode const &', 'value')])
-    ## wifi-mode.h (module 'wifi'): ns3::Ptr<ns3::AttributeValue> ns3::WifiModeValue::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## wifi-mode.h (module 'wifi'): bool ns3::WifiModeValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
-    cls.add_method('DeserializeFromString', 
-                   'bool', 
-                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_virtual=True)
-    ## wifi-mode.h (module 'wifi'): ns3::WifiMode ns3::WifiModeValue::Get() const [member function]
-    cls.add_method('Get', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_const=True)
-    ## wifi-mode.h (module 'wifi'): std::string ns3::WifiModeValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
-    cls.add_method('SerializeToString', 
-                   'std::string', 
-                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
-                   is_const=True, is_virtual=True)
-    ## wifi-mode.h (module 'wifi'): void ns3::WifiModeValue::Set(ns3::WifiMode const & value) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('ns3::WifiMode const &', 'value')])
-    return
-
-def register_Ns3WifiRadioEnergyModel_methods(root_module, cls):
-    ## wifi-radio-energy-model.h (module 'energy'): ns3::WifiRadioEnergyModel::WifiRadioEnergyModel(ns3::WifiRadioEnergyModel const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiRadioEnergyModel const &', 'arg0')])
-    ## wifi-radio-energy-model.h (module 'energy'): ns3::WifiRadioEnergyModel::WifiRadioEnergyModel() [constructor]
-    cls.add_constructor([])
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModel::ChangeState(int newState) [member function]
-    cls.add_method('ChangeState', 
-                   'void', 
-                   [param('int', 'newState')], 
-                   is_virtual=True)
-    ## wifi-radio-energy-model.h (module 'energy'): double ns3::WifiRadioEnergyModel::GetCcaBusyCurrentA() const [member function]
-    cls.add_method('GetCcaBusyCurrentA', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## wifi-radio-energy-model.h (module 'energy'): ns3::WifiPhy::State ns3::WifiRadioEnergyModel::GetCurrentState() const [member function]
-    cls.add_method('GetCurrentState', 
-                   'ns3::WifiPhy::State', 
-                   [], 
-                   is_const=True)
-    ## wifi-radio-energy-model.h (module 'energy'): double ns3::WifiRadioEnergyModel::GetIdleCurrentA() const [member function]
-    cls.add_method('GetIdleCurrentA', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## wifi-radio-energy-model.h (module 'energy'): ns3::WifiRadioEnergyModelPhyListener * ns3::WifiRadioEnergyModel::GetPhyListener() [member function]
-    cls.add_method('GetPhyListener', 
-                   'ns3::WifiRadioEnergyModelPhyListener *', 
-                   [])
-    ## wifi-radio-energy-model.h (module 'energy'): double ns3::WifiRadioEnergyModel::GetRxCurrentA() const [member function]
-    cls.add_method('GetRxCurrentA', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## wifi-radio-energy-model.h (module 'energy'): double ns3::WifiRadioEnergyModel::GetSleepCurrentA() const [member function]
-    cls.add_method('GetSleepCurrentA', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## wifi-radio-energy-model.h (module 'energy'): double ns3::WifiRadioEnergyModel::GetSwitchingCurrentA() const [member function]
-    cls.add_method('GetSwitchingCurrentA', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## wifi-radio-energy-model.h (module 'energy'): double ns3::WifiRadioEnergyModel::GetTotalEnergyConsumption() const [member function]
-    cls.add_method('GetTotalEnergyConsumption', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## wifi-radio-energy-model.h (module 'energy'): double ns3::WifiRadioEnergyModel::GetTxCurrentA() const [member function]
-    cls.add_method('GetTxCurrentA', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## wifi-radio-energy-model.h (module 'energy'): static ns3::TypeId ns3::WifiRadioEnergyModel::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModel::HandleEnergyDepletion() [member function]
-    cls.add_method('HandleEnergyDepletion', 
-                   'void', 
-                   [], 
-                   is_virtual=True)
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModel::HandleEnergyRecharged() [member function]
-    cls.add_method('HandleEnergyRecharged', 
-                   'void', 
-                   [], 
-                   is_virtual=True)
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModel::SetCcaBusyCurrentA(double ccaBusyCurrentA) [member function]
-    cls.add_method('SetCcaBusyCurrentA', 
-                   'void', 
-                   [param('double', 'ccaBusyCurrentA')])
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModel::SetEnergyDepletionCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
-    cls.add_method('SetEnergyDepletionCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModel::SetEnergyRechargedCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
-    cls.add_method('SetEnergyRechargedCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModel::SetEnergySource(ns3::Ptr<ns3::EnergySource> source) [member function]
-    cls.add_method('SetEnergySource', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::EnergySource >', 'source')], 
-                   is_virtual=True)
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModel::SetIdleCurrentA(double idleCurrentA) [member function]
-    cls.add_method('SetIdleCurrentA', 
-                   'void', 
-                   [param('double', 'idleCurrentA')])
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModel::SetRxCurrentA(double rxCurrentA) [member function]
-    cls.add_method('SetRxCurrentA', 
-                   'void', 
-                   [param('double', 'rxCurrentA')])
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModel::SetSleepCurrentA(double sleepCurrentA) [member function]
-    cls.add_method('SetSleepCurrentA', 
-                   'void', 
-                   [param('double', 'sleepCurrentA')])
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModel::SetSwitchingCurrentA(double switchingCurrentA) [member function]
-    cls.add_method('SetSwitchingCurrentA', 
-                   'void', 
-                   [param('double', 'switchingCurrentA')])
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModel::SetTxCurrentA(double txCurrentA) [member function]
-    cls.add_method('SetTxCurrentA', 
-                   'void', 
-                   [param('double', 'txCurrentA')])
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModel::SetTxCurrentFromModel(double txPowerDbm) [member function]
-    cls.add_method('SetTxCurrentFromModel', 
-                   'void', 
-                   [param('double', 'txPowerDbm')])
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModel::SetTxCurrentModel(ns3::Ptr<ns3::WifiTxCurrentModel> model) [member function]
-    cls.add_method('SetTxCurrentModel', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::WifiTxCurrentModel >', 'model')])
-    ## wifi-radio-energy-model.h (module 'energy'): void ns3::WifiRadioEnergyModel::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   visibility='private', is_virtual=True)
-    ## wifi-radio-energy-model.h (module 'energy'): double ns3::WifiRadioEnergyModel::DoGetCurrentA() const [member function]
-    cls.add_method('DoGetCurrentA', 
-                   'double', 
-                   [], 
-                   is_const=True, visibility='private', is_virtual=True)
-    return
-
 def register_Ns3AddressChecker_methods(root_module, cls):
     ## address.h (module 'network'): ns3::AddressChecker::AddressChecker() [constructor]
     cls.add_constructor([])
@@ -6809,6 +4608,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
@@ -6822,6 +4622,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def register_functions_ns3_internal(module, root_module):
     return
 
diff -Naur ns-3.23/src/energy/examples/basic-energy-model-test.cc ns-3.24/src/energy/examples/basic-energy-model-test.cc
--- ns-3.23/src/energy/examples/basic-energy-model-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.24/src/energy/examples/basic-energy-model-test.cc	2015-09-15 11:18:44.000000000 -0700
@@ -0,0 +1,449 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2010 Network Security Lab, University of Washington, Seattle.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: He Wu <mdzz@u.washington.edu>
+ */
+
+#include "ns3/basic-energy-source.h"
+#include "ns3/wifi-radio-energy-model.h"
+#include "ns3/basic-energy-source-helper.h"
+#include "ns3/wifi-radio-energy-model-helper.h"
+#include "ns3/energy-source-container.h"
+#include "ns3/device-energy-model-container.h"
+#include "ns3/log.h"
+#include "ns3/node.h"
+#include "ns3/simulator.h"
+#include "ns3/double.h"
+#include "ns3/config.h"
+#include "ns3/string.h"
+#include "ns3/yans-wifi-helper.h"
+#include "ns3/nqos-wifi-mac-helper.h"
+#include <cmath>
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("BasicEnergyModelTestSuite");
+
+/**
+ * Test case of update remaining energy for BasicEnergySource and
+ * WifiRadioEnergyModel.
+ */
+class BasicEnergyUpdateTest
+{
+public:
+  BasicEnergyUpdateTest ();
+  virtual ~BasicEnergyUpdateTest ();
+
+  /**
+   * Performs some tests involving state updates and the relative energy consumption
+   * \return true is some error happened.
+   */
+  bool DoRun (void);
+
+private:
+  /**
+   * \param state Radio state to switch to.
+   * \return False if no error occurs.
+   *
+   * Runs simulation for a while, check if final state & remaining energy is
+   * correctly updated.
+   */
+  bool StateSwitchTest (WifiPhy::State state);
+
+private:
+  double m_timeS;     // in seconds
+  double m_tolerance; // tolerance for power estimation
+
+  ObjectFactory m_energySource;
+  ObjectFactory m_deviceEnergyModel;
+};
+
+BasicEnergyUpdateTest::BasicEnergyUpdateTest ()
+{
+  m_timeS = 15.5; // idle for 15 seconds before changing state
+  m_tolerance = 1.0e-13;  //
+}
+
+BasicEnergyUpdateTest::~BasicEnergyUpdateTest ()
+{
+}
+
+bool
+BasicEnergyUpdateTest::DoRun (void)
+{
+  // set types
+  m_energySource.SetTypeId ("ns3::BasicEnergySource");
+  m_deviceEnergyModel.SetTypeId ("ns3::WifiRadioEnergyModel");
+
+  uint8_t ret = 0;
+
+  // run state switch tests
+  if (StateSwitchTest (WifiPhy::IDLE))
+    {
+      ret = 1;
+      std::cerr << "Problem with state switch test (WifiPhy idle)." << std::endl;
+    }
+  if (StateSwitchTest (WifiPhy::CCA_BUSY))
+    {
+      ret = 1;
+      std::cerr << "Problem with state switch test (WifiPhy cca busy)." << std::endl;
+    }
+  if (StateSwitchTest (WifiPhy::TX))
+    {
+      ret = 1;
+      std::cerr << "Problem with state switch test (WifiPhy tx)." << std::endl;
+    }
+  if (StateSwitchTest (WifiPhy::RX))
+    {
+      ret = 1;
+      std::cerr << "Problem with state switch test (WifiPhy rx)." << std::endl;
+    }
+  if (StateSwitchTest (WifiPhy::SWITCHING))
+    {
+      ret = 1;
+      std::cerr << "Problem with state switch test (WifiPhy switching)." << std::endl;
+    }
+  if (StateSwitchTest (WifiPhy::SLEEP))
+    {
+      ret = 1;
+      std::cerr << "Problem with state switch test (WifiPhy sleep)." << std::endl;
+    }
+  return ret;
+}
+
+bool
+BasicEnergyUpdateTest::StateSwitchTest (WifiPhy::State state)
+{
+  // create node
+  Ptr<Node> node = CreateObject<Node> ();
+
+  // create energy source
+  Ptr<BasicEnergySource> source = m_energySource.Create<BasicEnergySource> ();
+  // aggregate energy source to node
+  node->AggregateObject (source);
+
+  // create device energy model
+  Ptr<WifiRadioEnergyModel> model =
+    m_deviceEnergyModel.Create<WifiRadioEnergyModel> ();
+  // set energy source pointer
+  model->SetEnergySource (source);
+  // add device energy model to model list in energy source
+  source->AppendDeviceEnergyModel (model);
+
+  // retrieve device energy model from energy source
+  DeviceEnergyModelContainer models =
+    source->FindDeviceEnergyModels ("ns3::WifiRadioEnergyModel");
+  // check list
+  if ((models.GetN () == 0))
+    {
+      std::cerr << "Model list is empty!." << std::endl;
+      return true;
+    }
+  // get pointer
+  Ptr<WifiRadioEnergyModel> devModel =
+    DynamicCast<WifiRadioEnergyModel> (models.Get (0));
+  // check pointer
+  if ((devModel == 0))
+    {
+      std::cerr << "NULL pointer to device model!." << std::endl;
+      return true;
+    }
+
+  /*
+   * The radio will stay IDLE for m_timeS seconds. Then it will switch into a
+   * different state.
+   */
+
+  // schedule change of state
+  Simulator::Schedule (Seconds (m_timeS),
+                       &WifiRadioEnergyModel::ChangeState, devModel, state);
+
+  // Calculate remaining energy at simulation stop time
+  Simulator::Schedule (Seconds (m_timeS * 2), 
+                       &BasicEnergySource::UpdateEnergySource, source);
+
+  double timeDelta = 0.000000001; // 1 nanosecond
+  // run simulation; stop just after last scheduled event
+  Simulator::Stop (Seconds (m_timeS * 2 + timeDelta));
+  Simulator::Run ();
+
+  // energy = current * voltage * time
+
+  // calculate idle power consumption
+  double estRemainingEnergy = source->GetInitialEnergy ();
+  double voltage = source->GetSupplyVoltage ();
+  estRemainingEnergy -= devModel->GetIdleCurrentA () * voltage * m_timeS;
+
+  /*
+   * Manually calculate the number of periodic updates performed by the source.
+   * This is to check if the periodic updates are performed correctly.
+   */
+  double actualTime = m_timeS;
+  actualTime /= source->GetEnergyUpdateInterval ().GetSeconds ();
+  actualTime = floor (actualTime); // rounding for update interval
+  actualTime *= source->GetEnergyUpdateInterval ().GetSeconds ();
+
+  // calculate new state power consumption
+  double current = 0.0;
+  switch (state)
+    {
+    case WifiPhy::IDLE:
+      current = devModel->GetIdleCurrentA ();
+      break;
+    case WifiPhy::CCA_BUSY:
+      current = devModel->GetCcaBusyCurrentA ();
+      break;
+    case WifiPhy::TX:
+      current = devModel->GetTxCurrentA ();
+      break;
+    case WifiPhy::RX:
+      current = devModel->GetRxCurrentA ();
+      break;
+    case WifiPhy::SWITCHING:
+      current = devModel->GetSwitchingCurrentA ();
+      break;
+    case WifiPhy::SLEEP:
+      current = devModel->GetSleepCurrentA ();
+      break;
+    default:
+      NS_FATAL_ERROR ("Undefined radio state: " << state);
+      break;
+    }
+  estRemainingEnergy -= current * voltage * m_timeS;
+
+  // obtain remaining energy from source
+  double remainingEnergy = source->GetRemainingEnergy ();
+  NS_LOG_DEBUG ("Remaining energy is " << remainingEnergy);
+  NS_LOG_DEBUG ("Estimated remaining energy is " << estRemainingEnergy);
+  NS_LOG_DEBUG ("Difference is " << estRemainingEnergy - remainingEnergy);
+
+  // check remaining energy
+  if ((remainingEnergy > (estRemainingEnergy + m_tolerance)) ||
+      (remainingEnergy < (estRemainingEnergy - m_tolerance)))
+    {
+      std::cerr << "Incorrect remaining energy!" << std::endl;
+      return true;
+    }
+
+  // obtain radio state
+  WifiPhy::State endState = devModel->GetCurrentState ();
+  NS_LOG_DEBUG ("Radio state is " << endState);
+  // check end state
+  if (endState != state)
+    {
+      std::cerr << "Incorrect end state!" << std::endl;
+      return true;
+    }
+  Simulator::Destroy ();
+
+  return false; // no error
+}
+
+// -------------------------------------------------------------------------- //
+
+/**
+ * Test case of energy depletion handling for BasicEnergySource and
+ * WifiRadioEnergyModel.
+ */
+class BasicEnergyDepletionTest
+{
+public:
+  BasicEnergyDepletionTest ();
+  virtual ~BasicEnergyDepletionTest ();
+
+  /**
+   * Performs some tests involving energy depletion
+   * \return true is some error happened.
+   */
+  bool DoRun (void);
+
+private:
+  /**
+   * Callback invoked when energy is drained from source.
+   */
+  void DepletionHandler (void);
+
+  /**
+   * \param simTimeS Simulation time, in seconds.
+   * \param updateIntervalS Device model update interval, in seconds.
+   * \return False if all is good.
+   *
+   * Runs simulation with specified simulation time and update interval.
+   */
+  bool DepletionTestCase (double simTimeS, double updateIntervalS);
+
+private:
+  int m_numOfNodes;         // number of nodes in simulation
+  int m_callbackCount;      // counter for # of callbacks invoked
+  double m_simTimeS;        // maximum simulation time, in seconds
+  double m_timeStepS;       // simulation time step size, in seconds
+  double m_updateIntervalS; // update interval of each device model
+
+};
+
+BasicEnergyDepletionTest::BasicEnergyDepletionTest ()
+{
+  m_numOfNodes = 10;
+  m_callbackCount = 0;
+  m_simTimeS = 4.5;
+  m_timeStepS = 0.5;
+  m_updateIntervalS = 1.5;
+}
+
+BasicEnergyDepletionTest::~BasicEnergyDepletionTest ()
+{
+}
+
+bool
+BasicEnergyDepletionTest::DoRun (void)
+{
+  /*
+   * Run simulation with different simulation time and update interval.
+   */
+  uint8_t ret = 0;
+
+  for (double simTimeS = 0.0; simTimeS <= m_simTimeS; simTimeS += m_timeStepS)
+    {
+      for (double updateIntervalS = 0.5; updateIntervalS <= m_updateIntervalS;
+           updateIntervalS += m_timeStepS)
+        {
+          if (DepletionTestCase (simTimeS, updateIntervalS))
+            {
+              ret = 1;
+              std::cerr << "Depletion test case problem." << std::endl;
+            }
+          // reset callback count
+          m_callbackCount = 0;
+        }
+    }
+  return ret;
+}
+
+void
+BasicEnergyDepletionTest::DepletionHandler (void)
+{
+  m_callbackCount++;
+}
+
+bool
+BasicEnergyDepletionTest::DepletionTestCase (double simTimeS,
+                                             double updateIntervalS)
+{
+  // create node
+  NodeContainer c;
+  c.Create (m_numOfNodes);
+
+  std::string phyMode ("DsssRate1Mbps");
+
+  // disable fragmentation for frames below 2200 bytes
+  Config::SetDefault ("ns3::WifiRemoteStationManager::FragmentationThreshold",
+                      StringValue ("2200"));
+  // turn off RTS/CTS for frames below 2200 bytes
+  Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold",
+                      StringValue ("2200"));
+  // Fix non-unicast data rate to be the same as that of unicast
+  Config::SetDefault ("ns3::WifiRemoteStationManager::NonUnicastMode",
+                      StringValue (phyMode));
+
+  // install YansWifiPhy
+  WifiHelper wifi;
+  wifi.SetStandard (WIFI_PHY_STANDARD_80211b);
+
+  YansWifiPhyHelper wifiPhy =  YansWifiPhyHelper::Default ();
+  /*
+   * This is one parameter that matters when using FixedRssLossModel, set it to
+   * zero; otherwise, gain will be added.
+   */
+  wifiPhy.Set ("RxGain", DoubleValue (0));
+  // ns-3 supports RadioTap and Prism tracing extensions for 802.11b
+  wifiPhy.SetPcapDataLinkType (YansWifiPhyHelper::DLT_IEEE802_11_RADIO);
+
+  YansWifiChannelHelper wifiChannel;
+  wifiChannel.SetPropagationDelay ("ns3::ConstantSpeedPropagationDelayModel");
+  wifiPhy.SetChannel (wifiChannel.Create ());
+
+  // Add a non-QoS upper MAC, and disable rate control
+  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
+                                "DataMode", StringValue (phyMode),
+                                "ControlMode", StringValue (phyMode));
+  // Set it to ad-hoc mode
+  wifiMac.SetType ("ns3::AdhocWifiMac");
+  NetDeviceContainer devices = wifi.Install (wifiPhy, wifiMac, c);
+
+  /*
+   * Create and install energy source and a single basic radio energy model on
+   * the node using helpers.
+   */
+  // source helper
+  BasicEnergySourceHelper basicSourceHelper;
+  // set energy to 0 so that we deplete energy at the beginning of simulation
+  basicSourceHelper.Set ("BasicEnergySourceInitialEnergyJ", DoubleValue (0.0));
+  // set update interval
+  basicSourceHelper.Set ("PeriodicEnergyUpdateInterval",
+                         TimeValue (Seconds (updateIntervalS)));
+  // install source
+  EnergySourceContainer sources = basicSourceHelper.Install (c);
+
+  // device energy model helper
+  WifiRadioEnergyModelHelper radioEnergyHelper;
+  // set energy depletion callback
+  WifiRadioEnergyModel::WifiRadioEnergyDepletionCallback callback =
+    MakeCallback (&BasicEnergyDepletionTest::DepletionHandler, this);
+  radioEnergyHelper.SetDepletionCallback (callback);
+  // install on node
+  DeviceEnergyModelContainer deviceModels = radioEnergyHelper.Install (devices, sources);
+
+  // run simulation
+  Simulator::Stop (Seconds (simTimeS));
+  Simulator::Run ();
+  Simulator::Destroy ();
+
+  NS_LOG_DEBUG ("Simulation time = " << simTimeS << "s");
+  NS_LOG_DEBUG ("Update interval = " << updateIntervalS << "s");
+  NS_LOG_DEBUG ("Expected callback count is " << m_numOfNodes);
+  NS_LOG_DEBUG ("Actual callback count is " << m_callbackCount);
+
+  // check result, call back should only be invoked once
+  if (m_numOfNodes != m_callbackCount)
+    {
+      std::cerr << "Not all callbacks are invoked!" << std::endl;
+      return true;
+    }
+
+  return false;
+}
+
+// -------------------------------------------------------------------------- //
+
+int
+main (int argc, char **argv)
+{
+  BasicEnergyUpdateTest testEnergyUpdate;
+  if (testEnergyUpdate.DoRun ())
+    {
+      return 1;
+    }
+
+  BasicEnergyDepletionTest testEnergyDepletion;
+  if (testEnergyDepletion.DoRun ())
+    {
+      return 1;
+    }
+
+  return 0;
+}
diff -Naur ns-3.23/src/energy/examples/rv-battery-model-test.cc ns-3.24/src/energy/examples/rv-battery-model-test.cc
--- ns-3.23/src/energy/examples/rv-battery-model-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.24/src/energy/examples/rv-battery-model-test.cc	2015-09-15 11:18:44.000000000 -0700
@@ -0,0 +1,892 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2010 Network Security Lab, University of Washington, Seattle.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: He Wu <mdzz@u.washington.edu>
+ */
+
+#include "ns3/rv-battery-model.h"
+#include "ns3/wifi-radio-energy-model.h"
+#include "ns3/rv-battery-model-helper.h"
+#include "ns3/wifi-radio-energy-model-helper.h"
+#include "ns3/energy-source-container.h"
+#include "ns3/device-energy-model-container.h"
+#include "ns3/log.h"
+#include "ns3/node.h"
+#include "ns3/simulator.h"
+#include "ns3/double.h"
+#include "ns3/config.h"
+#include "ns3/string.h"
+#include "ns3/yans-wifi-helper.h"
+#include "ns3/nqos-wifi-mac-helper.h"
+#include <cmath>
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("RvBatteryModelTestSuite");
+
+/**
+ * This example was originally devised as a test, then it was converted
+ * to an example.
+ *
+ * The script tests the remaining energy for RvBatteryModel and
+ * WifiRadioEnergyModel updates. It does so by
+ * mimicking the procedure and results published in
+ * D. Rakhmatov, S. Vrudhula, D.A. Wallach, "Battery lifetime prediction for energy-aware computing,"
+ * Proceedings of the 2002 International Symposium on Low Power Electronics and Design, 2002. ISLPED '02.
+ * doi: 10.1109/LPE.2002.146729
+ */
+class BatteryLifetimeTest
+{
+public:
+  BatteryLifetimeTest ();
+  virtual ~BatteryLifetimeTest ();
+
+  /**
+   * Creates load profiles according to
+   * D. Rakhmatov, S. Vrudhula, D.A. Wallach, "Battery lifetime prediction for energy-aware computing,"
+   * Proceedings of the 2002 International Symposium on Low Power Electronics and Design, 2002. ISLPED '02.
+   * doi: 10.1109/LPE.2002.146729
+   */
+  void CreateLoadProfiles (void);
+
+  /**
+   * \param load Load value, in Amperes (A).
+   * \param expLifetime Expected lifetime.
+   * \return False if no error occurs.
+   *
+   * Runs simulation with constant load and checks the battery lifetime with
+   * known results.
+   */
+  bool ConstantLoadTest (double load, Time expLifetime);
+
+  /**
+   * \param loads Load profile.
+   * \param timeStamps Time stamps.
+   * \param expLifetime Expected lifetime.
+   * \returns False if no error occurs.
+   *
+   * Runs simulation with variable load and checks the battery lifetime with
+   * known results.
+   */
+  bool VariableLoadTest (std::vector<double> loads,
+                         std::vector<Time> timeStamps,
+                         Time expLifetime);
+
+  typedef struct LoadProfile
+  {
+    std::vector<double> loads;
+    std::vector<Time> timeStamps;
+    Time itsyLifetime;
+    Time dualFoilLifeTime;
+  } LoadProfile;
+
+  std::vector<LoadProfile> m_loadProfiles;
+  double m_alpha;
+  double m_beta;
+};
+
+BatteryLifetimeTest::BatteryLifetimeTest ()
+{
+  // Itsy battery
+  m_alpha = 35220;
+  m_beta = 0.637;
+}
+
+BatteryLifetimeTest::~BatteryLifetimeTest ()
+{
+}
+
+void
+BatteryLifetimeTest::CreateLoadProfiles (void)
+{
+  // create set of load profiles
+  LoadProfile profile;
+
+  std::vector<double> loads;
+  std::vector<Time> timeStamps;
+
+  // C1
+  loads.push_back (0.628);
+  loads.push_back (0);
+  loads.push_back (0.628);
+
+  timeStamps.push_back (Seconds (0));
+  timeStamps.push_back (Seconds (19.5 * 60));
+  timeStamps.push_back (Seconds (26.0 * 60));
+
+  profile.loads = loads;
+  profile.timeStamps = timeStamps;
+  profile.itsyLifetime = Seconds (55.0 * 60);     // 55.0 minutes
+  profile.dualFoilLifeTime = Seconds (36.2 * 60); // 36.2 minutes
+
+  m_loadProfiles.push_back (profile);
+
+  loads.clear ();
+  timeStamps.clear ();
+
+  // C2
+  loads.push_back (0.4947);
+  loads.push_back (0);
+  loads.push_back (0.4947);
+
+  timeStamps.push_back (Seconds (0));
+  timeStamps.push_back (Seconds (31.0 * 60));
+  timeStamps.push_back (Seconds (41.3 * 60));
+
+  profile.loads = loads;
+  profile.timeStamps = timeStamps;
+  profile.itsyLifetime = Seconds (73.9 * 60);     // 73.9 minutes
+  profile.dualFoilLifeTime = Seconds (55.8 * 60); // 55.8 minutes
+
+  m_loadProfiles.push_back (profile);
+
+  loads.clear ();
+  timeStamps.clear ();
+
+  // C3
+  loads.push_back (0.4256);
+  loads.push_back (0);
+  loads.push_back (0.4256);
+
+  timeStamps.push_back (Seconds (0));
+  timeStamps.push_back (Seconds (41.0 * 60));
+  timeStamps.push_back (Seconds (54.6 * 60));
+
+  profile.loads = loads;
+  profile.timeStamps = timeStamps;
+  profile.itsyLifetime = Seconds (88.8 * 60);     // 88.8 minutes
+  profile.dualFoilLifeTime = Seconds (71.8 * 60); // 71.8 minutes
+
+  m_loadProfiles.push_back (profile);
+
+  loads.clear ();
+  timeStamps.clear ();
+
+  // C4
+  loads.push_back (0.2923);
+  loads.push_back (0);
+  loads.push_back (0.2923);
+
+  timeStamps.push_back (Seconds (0));
+  timeStamps.push_back (Seconds (74.6 * 60));
+  timeStamps.push_back (Seconds (99.5 * 60));
+
+  profile.loads = loads;
+  profile.timeStamps = timeStamps;
+  profile.itsyLifetime = Seconds (137.8 * 60);      // 137.8 minutes
+  profile.dualFoilLifeTime = Seconds (124.9 * 60);  // 124.9 minutes
+
+  m_loadProfiles.push_back (profile);
+
+  loads.clear ();
+  timeStamps.clear ();
+
+  // C5
+  loads.push_back (0.2227);
+  loads.push_back (0);
+  loads.push_back (0.2227);
+
+  timeStamps.push_back (Seconds (0));
+  timeStamps.push_back (Seconds (105.7 * 60));
+  timeStamps.push_back (Seconds (140.9 * 60));
+
+  profile.loads = loads;
+  profile.timeStamps = timeStamps;
+  profile.itsyLifetime = Seconds (185.8 * 60);      // 185.8 minutes
+  profile.dualFoilLifeTime = Seconds (176.7 * 60);  // 176.7 minutes
+
+  m_loadProfiles.push_back (profile);
+
+  loads.clear ();
+  timeStamps.clear ();
+
+  // C6
+  loads.push_back (0.628);
+  loads.push_back (0);
+  loads.push_back (0.628);
+
+  timeStamps.push_back (Seconds (0));
+  timeStamps.push_back (Seconds (19.5 * 60));
+  timeStamps.push_back (Seconds (29.9 * 60));
+
+  profile.loads = loads;
+  profile.timeStamps = timeStamps;
+  profile.itsyLifetime = Seconds (58.9 * 60);     // 58.9 minutes
+  profile.dualFoilLifeTime = Seconds (41.0 * 60); // 41.0 minutes
+
+  m_loadProfiles.push_back (profile);
+
+  loads.clear ();
+  timeStamps.clear ();
+
+  // C7
+  loads.push_back (0.628);
+  loads.push_back (0);
+  loads.push_back (0.628);
+
+  timeStamps.push_back (Seconds (0));
+  timeStamps.push_back (Seconds (19.5 * 60));
+  timeStamps.push_back (Seconds (22.1 * 60));
+
+  profile.loads = loads;
+  profile.timeStamps = timeStamps;
+  profile.itsyLifetime = Seconds (51.1 * 60);     // 51.1 minutes
+  profile.dualFoilLifeTime = Seconds (30.8 * 60); // 30.8 minutes
+
+  m_loadProfiles.push_back (profile);
+
+  loads.clear ();
+  timeStamps.clear ();
+
+  // C8
+  loads.push_back (0.628);
+  loads.push_back (0);
+  loads.push_back (0.628);
+
+  timeStamps.push_back (Seconds (0));
+  timeStamps.push_back (Seconds (23.4 * 60));
+  timeStamps.push_back (Seconds (29.9 * 60));
+
+  profile.loads = loads;
+  profile.timeStamps = timeStamps;
+  profile.itsyLifetime = Seconds (55.0 * 60);     // 55.0 minutes
+  profile.dualFoilLifeTime = Seconds (37.4 * 60); // 37.4 minutes
+
+  m_loadProfiles.push_back (profile);
+
+  loads.clear ();
+  timeStamps.clear ();
+
+  // C9
+  loads.push_back (0.628);
+  loads.push_back (0);
+  loads.push_back (0.628);
+
+  timeStamps.push_back (Seconds (0));
+  timeStamps.push_back (Seconds (15.6 * 60));
+  timeStamps.push_back (Seconds (22.1 * 60));
+
+  profile.loads = loads;
+  profile.timeStamps = timeStamps;
+  profile.itsyLifetime = Seconds (55.0 * 60);     // 55.0 minutes
+  profile.dualFoilLifeTime = Seconds (35.2 * 60); // 35.2 minutes
+
+  m_loadProfiles.push_back (profile);
+
+  loads.clear ();
+  timeStamps.clear ();
+
+  // C10
+  loads.push_back (0.300);
+  loads.push_back (0.628);
+  loads.push_back (0.4947);
+  loads.push_back (0.2523);
+  loads.push_back (0.2341);
+  loads.push_back (0.1379);
+  loads.push_back (0.1139);
+  loads.push_back (0.2656);
+
+  timeStamps.push_back (Seconds (0));
+  timeStamps.push_back (Seconds (0.5 * 60));
+  timeStamps.push_back (Seconds (5.5 * 60));
+  timeStamps.push_back (Seconds (10.5 * 60));
+  timeStamps.push_back (Seconds (35.5 * 60));
+  timeStamps.push_back (Seconds (60.5 * 60));
+  timeStamps.push_back (Seconds (85.5 * 60));
+  timeStamps.push_back (Seconds (110.5 * 60));
+
+  profile.loads = loads;
+  profile.timeStamps = timeStamps;
+  profile.itsyLifetime = Seconds (144.3 * 60);      // 144.3 minutes
+  profile.dualFoilLifeTime = Seconds (132.6 * 60);  // 132.6 minutes
+
+  m_loadProfiles.push_back (profile);
+
+  loads.clear ();
+  timeStamps.clear ();
+
+  // C11
+  loads.push_back (0.300);
+  loads.push_back (0.1139);
+  loads.push_back (0.1379);
+  loads.push_back (0.2341);
+  loads.push_back (0.2523);
+  loads.push_back (0.4947);
+  loads.push_back (0.628);
+  loads.push_back (0.2656);
+
+  timeStamps.push_back (Seconds (0));
+  timeStamps.push_back (Seconds (0.5 * 60));
+  timeStamps.push_back (Seconds (25.5 * 60));
+  timeStamps.push_back (Seconds (50.5 * 60));
+  timeStamps.push_back (Seconds (75.5 * 60));
+  timeStamps.push_back (Seconds (100.5 * 60));
+  timeStamps.push_back (Seconds (105.5 * 60));
+  timeStamps.push_back (Seconds (110.5 * 60));
+
+  profile.loads = loads;
+  profile.timeStamps = timeStamps;
+  profile.itsyLifetime = Seconds (144.3 * 60);      // 144.3 minutes
+  profile.dualFoilLifeTime = Seconds (107.4 * 60);  // 107.4 minutes
+
+  m_loadProfiles.push_back (profile);
+
+  loads.clear ();
+  timeStamps.clear ();
+
+  // C12
+  loads.push_back (0.300);
+  loads.push_back (0.1139);
+  loads.push_back (0.1379);
+  loads.push_back (0.2341);
+  loads.push_back (0.2523);
+  loads.push_back (0.4947);
+  loads.push_back (0.0);
+  loads.push_back (0.300);
+  loads.push_back (0.628);
+  loads.push_back (0.2656);
+
+  timeStamps.push_back (Seconds (0));
+  timeStamps.push_back (Seconds (0.5 * 60));
+  timeStamps.push_back (Seconds (25.5 * 60));
+  timeStamps.push_back (Seconds (50.5 * 60));
+  timeStamps.push_back (Seconds (75.5 * 60));
+  timeStamps.push_back (Seconds (100.5 * 60));
+  timeStamps.push_back (Seconds (105.5 * 60));
+  timeStamps.push_back (Seconds (130.5 * 60));
+  timeStamps.push_back (Seconds (131.0 * 60));
+  timeStamps.push_back (Seconds (136.0 * 60));
+
+  profile.loads = loads;
+  profile.timeStamps = timeStamps;
+  profile.itsyLifetime = Seconds (169.3 * 60);      // 169.3 minutes
+  profile.dualFoilLifeTime = Seconds (155.4 * 60);  // 155.4 minutes
+
+  m_loadProfiles.push_back (profile);
+
+  loads.clear ();
+  timeStamps.clear ();
+
+  // C13
+  loads.push_back (0.300);
+  timeStamps.push_back (Seconds (0));
+
+  for (int i = 0; i < 5; i++)
+    {
+      loads.push_back (0.628);
+      loads.push_back (0.4947);
+      loads.push_back (0.2523);
+      loads.push_back (0.2341);
+      loads.push_back (0.1379);
+      loads.push_back (0.1139);
+
+      timeStamps.push_back (Seconds ((0.5 + i * 22.5) * 60));
+      timeStamps.push_back (Seconds ((1.5 + i * 22.5) * 60));
+      timeStamps.push_back (Seconds ((2.5 + i * 22.5) * 60));
+      timeStamps.push_back (Seconds ((7.5 + i * 22.5) * 60));
+      timeStamps.push_back (Seconds ((12.5 + i * 22.5) * 60));
+      timeStamps.push_back (Seconds ((17.5 + i * 22.5) * 60));
+    }
+
+  loads.push_back (0.2656);
+  timeStamps.push_back (Seconds (110.5 * 60));
+
+  profile.loads = loads;
+  profile.timeStamps = timeStamps;
+  profile.itsyLifetime = Seconds (144.3 * 60);      // 144.3 minutes
+  profile.dualFoilLifeTime = Seconds (131.7 * 60);  // 131.7 minutes
+
+  m_loadProfiles.push_back (profile);
+
+  loads.clear ();
+  timeStamps.clear ();
+
+  // C14, time stamp calculation in paper is off, using our own estimated value
+  loads.push_back (0.300);
+  timeStamps.push_back (Seconds (0));
+
+  for (int i = 0; i < 5; i++)
+    {
+      loads.push_back (0.1139);
+      loads.push_back (0.1379);
+      loads.push_back (0.2341);
+      loads.push_back (0.2523);
+      loads.push_back (0.4947);
+      loads.push_back (0.628);
+
+      timeStamps.push_back (Seconds ((0.5 + i * 22.5) * 60));
+      timeStamps.push_back (Seconds ((5.5 + i * 22.5) * 60));
+      timeStamps.push_back (Seconds ((10.5 + i * 22.5) * 60));
+      timeStamps.push_back (Seconds ((15.5 + i * 22.5) * 60));
+      timeStamps.push_back (Seconds ((20.5 + i * 22.5) * 60));
+      timeStamps.push_back (Seconds ((21.5 + i * 22.5) * 60));
+    }
+
+  loads.push_back (0.2656);
+  timeStamps.push_back (Seconds (112.5 * 60));
+
+  profile.loads = loads;
+  profile.timeStamps = timeStamps;
+  profile.itsyLifetime = Seconds (141.5 * 60);      // 141.5 minutes
+  profile.dualFoilLifeTime = Seconds (126.3 * 60);  // 126.3 minutes
+
+  m_loadProfiles.push_back (profile);
+
+  loads.clear ();
+  timeStamps.clear ();
+
+  // C15
+  loads.push_back (0.2227);
+  loads.push_back (0.2045);
+  loads.push_back (0.1083);
+  loads.push_back (0.0843);
+  loads.push_back (0.2227);
+
+  timeStamps.push_back (Seconds (0));
+  timeStamps.push_back (Seconds (50.0 * 60));
+  timeStamps.push_back (Seconds (100.0 * 60));
+  timeStamps.push_back (Seconds (150.0 * 60));
+  timeStamps.push_back (Seconds (200.0 * 60));
+
+  profile.loads = loads;
+  profile.timeStamps = timeStamps;
+  profile.itsyLifetime = Seconds (211.4 * 60);      // 211.4 minutes
+  profile.dualFoilLifeTime = Seconds (209.2 * 60);  // 209.2 minutes
+
+  m_loadProfiles.push_back (profile);
+
+  loads.clear ();
+  timeStamps.clear ();
+
+  // C16
+  loads.push_back (0.0843);
+  loads.push_back (0.1083);
+  loads.push_back (0.2045);
+  loads.push_back (0.2227);
+  loads.push_back (0.2227);
+
+  timeStamps.push_back (Seconds (0));
+  timeStamps.push_back (Seconds (50.0 * 60));
+  timeStamps.push_back (Seconds (100.0 * 60));
+  timeStamps.push_back (Seconds (150.0 * 60));
+  timeStamps.push_back (Seconds (200.0 * 60));
+
+  profile.loads = loads;
+  profile.timeStamps = timeStamps;
+  profile.itsyLifetime = Seconds (211.4 * 60);      // 211.4 minutes
+  profile.dualFoilLifeTime = Seconds (200.7 * 60);  // 200.7 minutes
+
+  m_loadProfiles.push_back (profile);
+
+  loads.clear ();
+  timeStamps.clear ();
+
+  // C17
+  loads.push_back (0.0843);
+  loads.push_back (0.1083);
+  loads.push_back (0.2045);
+  loads.push_back (0.0);
+  loads.push_back (0.2227);
+  loads.push_back (0.2227);
+
+  timeStamps.push_back (Seconds (0));
+  timeStamps.push_back (Seconds (50.0 * 60));
+  timeStamps.push_back (Seconds (100.0 * 60));
+  timeStamps.push_back (Seconds (150.0 * 60));
+  timeStamps.push_back (Seconds (200.0 * 60));
+  timeStamps.push_back (Seconds (250.0 * 60));
+
+  profile.loads = loads;
+  profile.timeStamps = timeStamps;
+  profile.itsyLifetime = Seconds (261.4 * 60);      // 261.4 minutes
+  profile.dualFoilLifeTime = Seconds (251.2 * 60);  // 251.2 minutes
+
+  m_loadProfiles.push_back (profile);
+
+  loads.clear ();
+  timeStamps.clear ();
+
+  // C18
+  for (int i = 0; i < 10; i++)
+    {
+      loads.push_back (0.0843);
+      loads.push_back (0.1083);
+      loads.push_back (0.2045);
+      loads.push_back (0.2227);
+
+      timeStamps.push_back (Seconds ((0.0 + i * 20.0) * 60));
+      timeStamps.push_back (Seconds ((5.0 + i * 20.0) * 60));
+      timeStamps.push_back (Seconds ((10.0 + i * 20.0) * 60));
+      timeStamps.push_back (Seconds ((15.0 + i * 20.0) * 60));
+    }
+
+  loads.push_back (0.2227);
+  timeStamps.push_back (Seconds (200.0));
+
+  profile.loads = loads;
+  profile.timeStamps = timeStamps;
+  profile.itsyLifetime = Seconds (211.4 * 60);      // 211.4 minutes
+  profile.dualFoilLifeTime = Seconds (204.6 * 60);  // 204.6 minutes
+
+  m_loadProfiles.push_back (profile);
+
+  loads.clear ();
+  timeStamps.clear ();
+
+  // C19
+  for (int i = 0; i < 10; i++)
+    {
+      loads.push_back (0.0755);
+      loads.push_back (0.0949);
+      loads.push_back (0.2045);
+      loads.push_back (0.2227);
+
+      timeStamps.push_back (Seconds ((0.0 + i * 20.0) * 60));
+      timeStamps.push_back (Seconds ((5.0 + i * 20.0) * 60));
+      timeStamps.push_back (Seconds ((10.0 + i * 20.0) * 60));
+      timeStamps.push_back (Seconds ((15.0 + i * 20.0) * 60));
+    }
+
+  loads.push_back (0.2227);
+  timeStamps.push_back (Seconds (200.0));
+
+  profile.loads = loads;
+  profile.timeStamps = timeStamps;
+  profile.itsyLifetime = Seconds (216.4 * 60);      // 216.4 minutes
+  profile.dualFoilLifeTime = Seconds (208.7 * 60);  // 208.7 minutes
+
+  m_loadProfiles.push_back (profile);
+
+  loads.clear ();
+  timeStamps.clear ();
+
+  // C20
+  for (int i = 0; i < 50; i++)
+    {
+      loads.push_back (0.4947);
+      loads.push_back (0.628);
+
+      timeStamps.push_back (Seconds ((0.0 + i * 2.0) * 60));
+      timeStamps.push_back (Seconds ((1.0 + i * 2.0) * 60));
+    }
+
+  profile.loads = loads;
+  profile.timeStamps = timeStamps;
+  profile.itsyLifetime = Seconds (55.3 * 60);       // 55.3 minutes
+  profile.dualFoilLifeTime = Seconds (33.2 * 60);   // 33.2 minutes
+
+  m_loadProfiles.push_back (profile);
+
+  loads.clear ();
+  timeStamps.clear ();
+
+  // C21
+  for (int i = 0; i < 50; i++)
+    {
+      loads.push_back (0.4947);
+      loads.push_back (0.628);
+      loads.push_back (0.0576);
+
+      timeStamps.push_back (Seconds ((0.0 + i * 3.0) * 60));
+      timeStamps.push_back (Seconds ((1.0 + i * 3.0) * 60));
+      timeStamps.push_back (Seconds ((2.0 + i * 3.0) * 60));
+    }
+
+  profile.loads = loads;
+  profile.timeStamps = timeStamps;
+  profile.itsyLifetime = Seconds (79.6 * 60);       // 79.6 minutes
+  profile.dualFoilLifeTime = Seconds (55.9 * 60);   // 55.9 minutes
+
+  m_loadProfiles.push_back (profile);
+
+  loads.clear ();
+  timeStamps.clear ();
+
+  // C22
+  for (int i = 0; i < 150; i++)
+    {
+      loads.push_back (0.005 + 0.005 * i);
+      timeStamps.push_back (Seconds ((0.0 + i * 1.0) * 60));
+    }
+
+  profile.loads = loads;
+  profile.timeStamps = timeStamps;
+  profile.itsyLifetime = Seconds (112.2 * 60);      // 112.2 minutes
+  profile.dualFoilLifeTime = Seconds (94.5 * 60);   // 94.5 minutes
+
+  m_loadProfiles.push_back (profile);
+
+  loads.clear ();
+  timeStamps.clear ();
+}
+
+int
+main (int argc, char **argv)
+{
+  NS_LOG_DEBUG ("Constant load run.");
+
+  BatteryLifetimeTest test;
+  int ret = 0;
+
+  if (test.ConstantLoadTest (0.640, Seconds (2844.0)))
+    {
+      ret = 1;
+      std::cerr << "Problems with constant load test (640mA)." << std::endl;
+    }
+  if (test.ConstantLoadTest (0.320, Seconds (6146.0)))
+    {
+      ret = 1;
+      std::cerr << "Problems with constant load test (320mA)." << std::endl;
+    }
+  if (test.ConstantLoadTest (0.128, Seconds (16052.0)))
+    {
+      ret = 1;
+      std::cerr << "Problems with constant load test (128mA)." << std::endl;
+    }
+  if (test.ConstantLoadTest (0.064, Seconds (32561.0)))
+    {
+      ret = 1;
+      std::cerr << "Problems with constant load test (64mA)." << std::endl;
+    }
+  if (test.ConstantLoadTest (0.032, Seconds (65580.0)))
+    {
+      ret = 1;
+      std::cerr << "Problems with constant load test (32mA)." << std::endl;
+    }
+
+  // create load profiles for variable load test
+  test.CreateLoadProfiles ();
+
+  // variable load with Itsy battery
+  NS_LOG_DEBUG ("\n\nItsy");
+  test.m_alpha = 35220;
+  test.m_beta = 0.637;
+  for (uint32_t i = 0; i < test.m_loadProfiles.size (); i++)
+    {
+      NS_LOG_DEBUG ("========");
+      NS_LOG_DEBUG ("Variable load profile C" << i + 1);
+      if (test.VariableLoadTest (test.m_loadProfiles[i].loads,
+                                 test.m_loadProfiles[i].timeStamps,
+                                 test.m_loadProfiles[i].itsyLifetime))
+        {
+          ret = 1;
+          std::cerr << "Problems with variable load test (Itsy)." << std::endl;
+        }
+    }
+
+  // variable load with DUALFOIL battery
+  NS_LOG_DEBUG ("\n\nDUALFOIL");
+  test.m_alpha = 40027;
+  test.m_beta = 0.276;
+  for (uint32_t i = 0; i < test.m_loadProfiles.size (); i++)
+    {
+      NS_LOG_DEBUG ("========");
+      NS_LOG_DEBUG ("Variable load profile C" << i + 1);
+      if (test.VariableLoadTest (test.m_loadProfiles[i].loads,
+                                 test.m_loadProfiles[i].timeStamps,
+                                 test.m_loadProfiles[i].dualFoilLifeTime))
+        {
+          ret = 1;
+          std::cerr << "Problems with variable load test (DUALFOIL)." << std::endl;
+        }
+    }
+
+  return ret;
+}
+
+bool
+BatteryLifetimeTest::ConstantLoadTest (double load, Time expLifetime)
+{
+  // create single node
+  NodeContainer c;
+  c.Create (1);
+
+  std::string phyMode ("DsssRate1Mbps");
+
+  // disable fragmentation for frames below 2200 bytes
+  Config::SetDefault ("ns3::WifiRemoteStationManager::FragmentationThreshold",
+                      StringValue ("2200"));
+  // turn off RTS/CTS for frames below 2200 bytes
+  Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold",
+                      StringValue ("2200"));
+  // Fix non-unicast data rate to be the same as that of unicast
+  Config::SetDefault ("ns3::WifiRemoteStationManager::NonUnicastMode",
+                      StringValue (phyMode));
+
+  // install YansWifiPhy
+  WifiHelper wifi;
+  wifi.SetStandard (WIFI_PHY_STANDARD_80211b);
+
+  YansWifiPhyHelper wifiPhy =  YansWifiPhyHelper::Default ();
+  /*
+   * This is one parameter that matters when using FixedRssLossModel, set it to
+   * zero; otherwise, gain will be added.
+   */
+  wifiPhy.Set ("RxGain", DoubleValue (0));
+  // ns-3 supports RadioTap and Prism tracing extensions for 802.11b
+  wifiPhy.SetPcapDataLinkType (YansWifiPhyHelper::DLT_IEEE802_11_RADIO);
+
+  YansWifiChannelHelper wifiChannel;
+  wifiChannel.SetPropagationDelay ("ns3::ConstantSpeedPropagationDelayModel");
+  wifiPhy.SetChannel (wifiChannel.Create ());
+
+  // Add a non-QoS upper MAC, and disable rate control
+  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
+                                "DataMode", StringValue (phyMode),
+                                "ControlMode", StringValue (phyMode));
+  // Set it to ad-hoc mode
+  wifiMac.SetType ("ns3::AdhocWifiMac");
+  NetDeviceContainer devices = wifi.Install (wifiPhy, wifiMac, c);
+
+  // Create and install battery model and device models
+  // RV battery model
+  RvBatteryModelHelper rvModelHelper;
+  // Set alpha & beta values
+  rvModelHelper.Set ("RvBatteryModelAlphaValue", DoubleValue (m_alpha));
+  rvModelHelper.Set ("RvBatteryModelBetaValue", DoubleValue (m_beta));
+  rvModelHelper.Set ("RvBatteryModelLowBatteryThreshold", DoubleValue (0.0));
+  // install source
+  EnergySourceContainer sources = rvModelHelper.Install (c);
+  // device energy model
+  WifiRadioEnergyModelHelper radioEnergyHelper;
+  // set VariableLoadTestIDLE current, which will be the constant load
+  radioEnergyHelper.Set ("IdleCurrentA", DoubleValue (load));
+  // install on node
+  DeviceEnergyModelContainer deviceModels = radioEnergyHelper.Install (devices, sources);
+
+  // run simulation
+  Simulator::Stop (Seconds (70000.0));
+  Simulator::Run ();
+
+  Time actualLifetime;
+  Ptr<RvBatteryModel> srcPtr = DynamicCast<RvBatteryModel> (sources.Get (0));
+  actualLifetime = srcPtr->GetLifetime ();
+
+  NS_LOG_DEBUG ("Expected lifetime = " << expLifetime.GetSeconds () << "s");
+  NS_LOG_DEBUG ("Actual lifetime = " << actualLifetime.GetSeconds () << "s");
+
+  Simulator::Destroy ();
+
+  if (actualLifetime != expLifetime)
+    {
+      std::cerr << "ConstantLoadTest: Incorrect lifetime for load " << load << std::endl;
+      return true;
+    }
+
+  return false; // error free
+}
+
+bool
+BatteryLifetimeTest::VariableLoadTest (std::vector<double> loads,
+                                       std::vector<Time> timeStamps,
+                                       Time expLifetime)
+{
+  NS_ASSERT (loads.size () == timeStamps.size ());
+
+  // create single node
+  NodeContainer c;
+  c.Create (1);
+
+  std::string phyMode ("DsssRate1Mbps");
+
+  // disable fragmentation for frames below 2200 bytes
+  Config::SetDefault ("ns3::WifiRemoteStationManager::FragmentationThreshold",
+                      StringValue ("2200"));
+  // turn off RTS/CTS for frames below 2200 bytes
+  Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold",
+                      StringValue ("2200"));
+  // Fix non-unicast data rate to be the same as that of unicast
+  Config::SetDefault ("ns3::WifiRemoteStationManager::NonUnicastMode",
+                      StringValue (phyMode));
+
+  // install YansWifiPhy
+  WifiHelper wifi;
+  wifi.SetStandard (WIFI_PHY_STANDARD_80211b);
+
+  YansWifiPhyHelper wifiPhy =  YansWifiPhyHelper::Default ();
+  /*
+   * This is one parameter that matters when using FixedRssLossModel, set it to
+   * zero; otherwise, gain will be added.
+   */
+  wifiPhy.Set ("RxGain", DoubleValue (0));
+  // ns-3 supports RadioTap and Prism tracing extensions for 802.11b
+  wifiPhy.SetPcapDataLinkType (YansWifiPhyHelper::DLT_IEEE802_11_RADIO);
+
+  YansWifiChannelHelper wifiChannel;
+  wifiChannel.SetPropagationDelay ("ns3::ConstantSpeedPropagationDelayModel");
+  wifiPhy.SetChannel (wifiChannel.Create ());
+
+  // Add a non-QoS upper MAC, and disable rate control
+  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
+                                "DataMode", StringValue (phyMode),
+                                "ControlMode", StringValue (phyMode));
+  // Set it to ad-hoc mode
+  wifiMac.SetType ("ns3::AdhocWifiMac");
+  NetDeviceContainer devices = wifi.Install (wifiPhy, wifiMac, c);
+
+  // Create and install battery model and device models
+  // RV battery model
+  RvBatteryModelHelper rvModelHelper;
+  // Set alpha & beta values
+  rvModelHelper.Set ("RvBatteryModelAlphaValue", DoubleValue (m_alpha));
+  rvModelHelper.Set ("RvBatteryModelBetaValue", DoubleValue (m_beta));
+  rvModelHelper.Set ("RvBatteryModelLowBatteryThreshold", DoubleValue (0.0));
+  // install source
+  EnergySourceContainer sources = rvModelHelper.Install (c);
+  // device energy model
+  WifiRadioEnergyModelHelper radioEnergyHelper;
+  // set VariableLoadTestIDLE current, which will be the constant load
+  radioEnergyHelper.Set ("IdleCurrentA", DoubleValue (loads[0]));
+  // install on node
+  DeviceEnergyModelContainer deviceModels = radioEnergyHelper.Install (devices, sources);
+
+
+  Ptr<WifiRadioEnergyModel> wifiDevicePtr = DynamicCast<WifiRadioEnergyModel> (deviceModels.Get (0));
+  // schedule load change events
+  for (uint32_t i = 1; i < loads.size (); i++)
+    {
+      Simulator::Schedule (timeStamps[i], &WifiRadioEnergyModel::SetIdleCurrentA,
+                           wifiDevicePtr, loads[i]);
+    }
+
+  // run simulation
+  Simulator::Stop (Seconds (70000.0));
+  Simulator::Run ();
+
+  Time actualLifetime;
+  Ptr<RvBatteryModel> srcPtr = DynamicCast<RvBatteryModel> (sources.Get (0));
+  actualLifetime = srcPtr->GetLifetime ();
+
+  NS_LOG_DEBUG ("Expected lifetime = " << expLifetime.GetSeconds () << "s");
+  NS_LOG_DEBUG ("Actual lifetime = " << actualLifetime.GetSeconds () << "s");
+  NS_LOG_DEBUG ("Difference = " << expLifetime.GetSeconds () - actualLifetime.GetSeconds () << "s");
+
+  Simulator::Destroy ();
+
+  // error tolerance = 120s
+  if ((actualLifetime.GetSeconds ()) > (expLifetime.GetSeconds ()) + (120) ||
+      (actualLifetime.GetSeconds ()) < (expLifetime.GetSeconds ()) - (120))
+    {
+      std::cerr << "VariableLoadTest: Incorrect lifetime." << std::endl;
+      return true;
+    }
+
+  return false;   // error free
+}
+
diff -Naur ns-3.23/src/energy/examples/wscript ns-3.24/src/energy/examples/wscript
--- ns-3.23/src/energy/examples/wscript	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/energy/examples/wscript	2015-09-15 11:18:44.000000000 -0700
@@ -6,3 +6,9 @@
 
     obj = bld.create_ns3_program('li-ion-energy-source', ['core', 'energy'])
     obj.source = 'li-ion-energy-source.cc'
+
+    obj = bld.create_ns3_program('rv-battery-model-test', ['core', 'energy', 'wifi'])
+    obj.source = 'rv-battery-model-test.cc'
+    
+    obj = bld.create_ns3_program('basic-energy-model-test', ['core', 'energy', 'wifi'])
+    obj.source = 'basic-energy-model-test.cc'
diff -Naur ns-3.23/src/energy/helper/wifi-radio-energy-model-helper.cc ns-3.24/src/energy/helper/wifi-radio-energy-model-helper.cc
--- ns-3.23/src/energy/helper/wifi-radio-energy-model-helper.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/energy/helper/wifi-radio-energy-model-helper.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,143 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2010 Network Security Lab, University of Washington, Seattle.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Authors: Sidharth Nabar <snabar@uw.edu>, He Wu <mdzz@u.washington.edu>
- */
-
-#include "wifi-radio-energy-model-helper.h"
-#include "basic-energy-source-helper.h"
-#include "ns3/wifi-phy.h"
-#include "ns3/wifi-net-device.h"
-#include "ns3/config.h"
-#include "ns3/names.h"
-#include "ns3/wifi-tx-current-model.h"
-
-namespace ns3 {
-
-WifiRadioEnergyModelHelper::WifiRadioEnergyModelHelper ()
-{
-  m_radioEnergy.SetTypeId ("ns3::WifiRadioEnergyModel");
-  m_depletionCallback.Nullify ();
-  m_rechargedCallback.Nullify ();
-}
-
-WifiRadioEnergyModelHelper::~WifiRadioEnergyModelHelper ()
-{
-}
-
-void
-WifiRadioEnergyModelHelper::Set (std::string name, const AttributeValue &v)
-{
-  m_radioEnergy.Set (name, v);
-}
-
-void
-WifiRadioEnergyModelHelper::SetDepletionCallback (
-  WifiRadioEnergyModel::WifiRadioEnergyDepletionCallback callback)
-{
-  m_depletionCallback = callback;
-}
-
-void
-WifiRadioEnergyModelHelper::SetRechargedCallback (
-  WifiRadioEnergyModel::WifiRadioEnergyRechargedCallback callback)
-{
-  m_rechargedCallback = callback;
-}
-
-void
-WifiRadioEnergyModelHelper::SetTxCurrentModel (std::string name,
-                                               std::string n0, const AttributeValue& v0,
-                                               std::string n1, const AttributeValue& v1,
-                                               std::string n2, const AttributeValue& v2,
-                                               std::string n3, const AttributeValue& v3,
-                                               std::string n4, const AttributeValue& v4,
-                                               std::string n5, const AttributeValue& v5,
-                                               std::string n6, const AttributeValue& v6,
-                                               std::string n7, const AttributeValue& v7)
-{
-  ObjectFactory factory;
-  factory.SetTypeId (name);
-  factory.Set (n0, v0);
-  factory.Set (n1, v1);
-  factory.Set (n2, v2);
-  factory.Set (n3, v3);
-  factory.Set (n4, v4);
-  factory.Set (n5, v5);
-  factory.Set (n6, v6);
-  factory.Set (n7, v7);
-  m_txCurrentModel = factory;
-}
-
-
-/*
- * Private function starts here.
- */
-
-Ptr<DeviceEnergyModel>
-WifiRadioEnergyModelHelper::DoInstall (Ptr<NetDevice> device,
-                                       Ptr<EnergySource> source) const
-{
-  NS_ASSERT (device != NULL);
-  NS_ASSERT (source != NULL);
-  // check if device is WifiNetDevice
-  std::string deviceName = device->GetInstanceTypeId ().GetName ();
-  if (deviceName.compare ("ns3::WifiNetDevice") != 0)
-    {
-      NS_FATAL_ERROR ("NetDevice type is not WifiNetDevice!");
-    }
-  Ptr<Node> node = device->GetNode ();
-  Ptr<WifiRadioEnergyModel> model = m_radioEnergy.Create ()->GetObject<WifiRadioEnergyModel> ();
-  NS_ASSERT (model != NULL);
-  // set energy source pointer
-  model->SetEnergySource (source);
-  // set energy depletion callback
-  // if none is specified, make a callback to WifiPhy::SetSleepMode
-  Ptr<WifiNetDevice> wifiDevice = DynamicCast<WifiNetDevice> (device);
-  Ptr<WifiPhy> wifiPhy = wifiDevice->GetPhy ();
-  if (m_depletionCallback.IsNull ())
-    {
-      model->SetEnergyDepletionCallback (MakeCallback (&WifiPhy::SetSleepMode, wifiPhy));
-    }
-  else
-    {
-      model->SetEnergyDepletionCallback (m_depletionCallback);
-    }
-  // set energy recharged callback
-  // if none is specified, make a callback to WifiPhy::ResumeFromSleep
-  if (m_rechargedCallback.IsNull ())
-    {
-      model->SetEnergyRechargedCallback (MakeCallback (&WifiPhy::ResumeFromSleep, wifiPhy));
-    }
-  else
-    {
-      model->SetEnergyRechargedCallback (m_rechargedCallback);
-    }
-  // add model to device model list in energy source
-  source->AppendDeviceEnergyModel (model);
-  // create and register energy model phy listener
-  wifiPhy->RegisterListener (model->GetPhyListener ());
-  //
-  if (m_txCurrentModel.GetTypeId ().GetUid ())
-    {
-      Ptr<WifiTxCurrentModel> txcurrent = m_txCurrentModel.Create<WifiTxCurrentModel> ();
-      model->SetTxCurrentModel (txcurrent);
-    }
-  return model;
-}
-
-} // namespace ns3
diff -Naur ns-3.23/src/energy/helper/wifi-radio-energy-model-helper.h ns-3.24/src/energy/helper/wifi-radio-energy-model-helper.h
--- ns-3.23/src/energy/helper/wifi-radio-energy-model-helper.h	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/energy/helper/wifi-radio-energy-model-helper.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,124 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
-* Copyright (c) 2010 Network Security Lab, University of Washington, Seattle.
-*
-* This program is free software; you can redistribute it and/or modify
-* it under the terms of the GNU General Public License version 2 as
-* published by the Free Software Foundation;
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-*
-* Author: Sidharth Nabar <snabar@uw.edu>, He Wu <mdzz@u.washington.edu>
-*/
-
-#ifndef WIFI_RADIO_ENERGY_MODEL_HELPER_H
-#define WIFI_RADIO_ENERGY_MODEL_HELPER_H
-
-#include "energy-model-helper.h"
-#include "ns3/wifi-radio-energy-model.h"
-
-namespace ns3 {
-
-/**
- * \ingroup energy
- * \brief Assign WifiRadioEnergyModel to wifi devices.
- *
- * This installer installs WifiRadioEnergyModel for only WifiNetDevice objects.
- *
- */
-class WifiRadioEnergyModelHelper : public DeviceEnergyModelHelper
-{
-public:
-  /**
-   * Construct a helper which is used to add a radio energy model to a node
-   */
-  WifiRadioEnergyModelHelper ();
-
-  /**
-   * Destroy a RadioEnergy Helper
-   */
-  ~WifiRadioEnergyModelHelper ();
-
-  /**
-   * \param name the name of the attribute to set
-   * \param v the value of the attribute
-   *
-   * Sets an attribute of the underlying PHY object.
-   */
-  void Set (std::string name, const AttributeValue &v);
-
-  /**
-   * \param callback Callback function for energy depletion handling.
-   *
-   * Sets the callback to be invoked when energy is depleted.
-   */
-  void SetDepletionCallback (
-    WifiRadioEnergyModel::WifiRadioEnergyDepletionCallback callback);
-
-  /**
-   * \param callback Callback function for energy recharged handling.
-   *
-   * Sets the callback to be invoked when energy is recharged.
-   */
-  void SetRechargedCallback (
-    WifiRadioEnergyModel::WifiRadioEnergyRechargedCallback callback);
-
-  /**
-   * \param name the name of the model to set
-   * \param n0 the name of the attribute to set
-   * \param v0 the value of the attribute to set
-   * \param n1 the name of the attribute to set
-   * \param v1 the value of the attribute to set
-   * \param n2 the name of the attribute to set
-   * \param v2 the value of the attribute to set
-   * \param n3 the name of the attribute to set
-   * \param v3 the value of the attribute to set
-   * \param n4 the name of the attribute to set
-   * \param v4 the value of the attribute to set
-   * \param n5 the name of the attribute to set
-   * \param v5 the value of the attribute to set
-   * \param n6 the name of the attribute to set
-   * \param v6 the value of the attribute to set
-   * \param n7 the name of the attribute to set
-   * \param v7 the value of the attribute to set
-   *
-   * Configure a propagation delay for this channel.
-   */
-  void SetTxCurrentModel (std::string name,
-                          std::string n0 = "", const AttributeValue &v0 = EmptyAttributeValue (),
-                          std::string n1 = "", const AttributeValue &v1 = EmptyAttributeValue (),
-                          std::string n2 = "", const AttributeValue &v2 = EmptyAttributeValue (),
-                          std::string n3 = "", const AttributeValue &v3 = EmptyAttributeValue (),
-                          std::string n4 = "", const AttributeValue &v4 = EmptyAttributeValue (),
-                          std::string n5 = "", const AttributeValue &v5 = EmptyAttributeValue (),
-                          std::string n6 = "", const AttributeValue &v6 = EmptyAttributeValue (),
-                          std::string n7 = "", const AttributeValue &v7 = EmptyAttributeValue ());
-
-private:
-  /**
-   * \param device Pointer to the NetDevice to install DeviceEnergyModel.
-   * \param source Pointer to EnergySource to install.
-   *
-   * Implements DeviceEnergyModel::Install.
-   */
-  virtual Ptr<DeviceEnergyModel> DoInstall (Ptr<NetDevice> device,
-                                            Ptr<EnergySource> source) const;
-
-private:
-  ObjectFactory m_radioEnergy;
-  WifiRadioEnergyModel::WifiRadioEnergyDepletionCallback m_depletionCallback;
-  WifiRadioEnergyModel::WifiRadioEnergyRechargedCallback m_rechargedCallback;
-  ObjectFactory m_txCurrentModel;
-
-};
-
-} // namespace ns3
-
-#endif /* WIFI_RADIO_ENERGY_MODEL_HELPER_H */
diff -Naur ns-3.23/src/energy/model/basic-energy-harvester.cc ns-3.24/src/energy/model/basic-energy-harvester.cc
--- ns-3.23/src/energy/model/basic-energy-harvester.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/energy/model/basic-energy-harvester.cc	2015-09-15 11:18:44.000000000 -0700
@@ -55,11 +55,11 @@
   .AddTraceSource ("HarvestedPower",
                    "Harvested power by the BasicEnergyHarvester.",
                    MakeTraceSourceAccessor (&BasicEnergyHarvester::m_harvestedPower),
-                   "ns3::TracedValue::DoubleCallback")
+                   "ns3::TracedValueCallback::Double")
   .AddTraceSource ("TotalEnergyHarvested",
                    "Total energy harvested by the harvester.",
                    MakeTraceSourceAccessor (&BasicEnergyHarvester::m_totalEnergyHarvestedJ),
-                   "ns3::TracedValue::DoubleCallback")
+                   "ns3::TracedValueCallback::Double")
   ;
   return tid;
 }
diff -Naur ns-3.23/src/energy/model/basic-energy-source.cc ns-3.24/src/energy/model/basic-energy-source.cc
--- ns-3.23/src/energy/model/basic-energy-source.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/energy/model/basic-energy-source.cc	2015-09-15 11:18:44.000000000 -0700
@@ -69,7 +69,7 @@
     .AddTraceSource ("RemainingEnergy",
                      "Remaining energy at BasicEnergySource.",
                      MakeTraceSourceAccessor (&BasicEnergySource::m_remainingEnergyJ),
-                     "ns3::TracedValue::DoubleCallback")
+                     "ns3::TracedValueCallback::Double")
   ;
   return tid;
 }
diff -Naur ns-3.23/src/energy/model/li-ion-energy-source.cc ns-3.24/src/energy/model/li-ion-energy-source.cc
--- ns-3.23/src/energy/model/li-ion-energy-source.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/energy/model/li-ion-energy-source.cc	2015-09-15 11:18:44.000000000 -0700
@@ -106,7 +106,7 @@
     .AddTraceSource ("RemainingEnergy",
                      "Remaining energy at BasicEnergySource.",
                      MakeTraceSourceAccessor (&LiIonEnergySource::m_remainingEnergyJ),
-                     "ns3::TracedValue::DoubleCallback")
+                     "ns3::TracedValueCallback::Double")
   ;
   return tid;
 }
diff -Naur ns-3.23/src/energy/model/rv-battery-model.cc ns-3.24/src/energy/model/rv-battery-model.cc
--- ns-3.23/src/energy/model/rv-battery-model.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/energy/model/rv-battery-model.cc	2015-09-15 11:18:44.000000000 -0700
@@ -83,7 +83,7 @@
     .AddTraceSource ("RvBatteryModelBatteryLevel",
                      "RV battery model battery level.",
                      MakeTraceSourceAccessor (&RvBatteryModel::m_batteryLevel),
-                     "ns3::TracedValue::DoubleCallback")
+                     "ns3::TracedValueCallback::Double")
     .AddTraceSource ("RvBatteryModelBatteryLifetime",
                      "RV battery model battery lifetime.",
                      MakeTraceSourceAccessor (&RvBatteryModel::m_lifetime),
diff -Naur ns-3.23/src/energy/model/simple-device-energy-model.cc ns-3.24/src/energy/model/simple-device-energy-model.cc
--- ns-3.23/src/energy/model/simple-device-energy-model.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/energy/model/simple-device-energy-model.cc	2015-09-15 11:18:44.000000000 -0700
@@ -40,7 +40,7 @@
     .AddTraceSource ("TotalEnergyConsumption",
                      "Total energy consumption of the radio device.",
                      MakeTraceSourceAccessor (&SimpleDeviceEnergyModel::m_totalEnergyConsumption),
-                     "ns3::TracedValue::DoubleCallback")
+                     "ns3::TracedValueCallback::Double")
   ;
   return tid;
 }
diff -Naur ns-3.23/src/energy/model/wifi-radio-energy-model.cc ns-3.24/src/energy/model/wifi-radio-energy-model.cc
--- ns-3.23/src/energy/model/wifi-radio-energy-model.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/energy/model/wifi-radio-energy-model.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,572 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2010 Network Security Lab, University of Washington, Seattle.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Sidharth Nabar <snabar@uw.edu>, He Wu <mdzz@u.washington.edu>
- */
-
-#include "ns3/log.h"
-#include "ns3/double.h"
-#include "ns3/simulator.h"
-#include "ns3/trace-source-accessor.h"
-#include "ns3/pointer.h"
-#include "energy-source.h"
-#include "wifi-radio-energy-model.h"
-#include "wifi-tx-current-model.h"
-
-namespace ns3 {
-
-NS_LOG_COMPONENT_DEFINE ("WifiRadioEnergyModel");
-
-NS_OBJECT_ENSURE_REGISTERED (WifiRadioEnergyModel);
-
-TypeId
-WifiRadioEnergyModel::GetTypeId (void)
-{
-  static TypeId tid = TypeId ("ns3::WifiRadioEnergyModel")
-    .SetParent<DeviceEnergyModel> ()
-    .SetGroupName ("Energy")
-    .AddConstructor<WifiRadioEnergyModel> ()
-    .AddAttribute ("IdleCurrentA",
-                   "The default radio Idle current in Ampere.",
-                   DoubleValue (0.273),  // idle mode = 273mA
-                   MakeDoubleAccessor (&WifiRadioEnergyModel::SetIdleCurrentA,
-                                       &WifiRadioEnergyModel::GetIdleCurrentA),
-                   MakeDoubleChecker<double> ())
-    .AddAttribute ("CcaBusyCurrentA",
-                   "The default radio CCA Busy State current in Ampere.",
-                   DoubleValue (0.273),  // default to be the same as idle mode
-                   MakeDoubleAccessor (&WifiRadioEnergyModel::SetCcaBusyCurrentA,
-                                       &WifiRadioEnergyModel::GetCcaBusyCurrentA),
-                   MakeDoubleChecker<double> ())
-    .AddAttribute ("TxCurrentA",
-                   "The radio Tx current in Ampere.",
-                   DoubleValue (0.380),    // transmit at 0dBm = 380mA
-                   MakeDoubleAccessor (&WifiRadioEnergyModel::SetTxCurrentA,
-                                       &WifiRadioEnergyModel::GetTxCurrentA),
-                   MakeDoubleChecker<double> ())
-    .AddAttribute ("RxCurrentA",
-                   "The radio Rx current in Ampere.",
-                   DoubleValue (0.313),    // receive mode = 313mA
-                   MakeDoubleAccessor (&WifiRadioEnergyModel::SetRxCurrentA,
-                                       &WifiRadioEnergyModel::GetRxCurrentA),
-                   MakeDoubleChecker<double> ())
-    .AddAttribute ("SwitchingCurrentA",
-                   "The default radio Channel Switch current in Ampere.",
-                   DoubleValue (0.273),  // default to be the same as idle mode
-                   MakeDoubleAccessor (&WifiRadioEnergyModel::SetSwitchingCurrentA,
-                                       &WifiRadioEnergyModel::GetSwitchingCurrentA),
-                   MakeDoubleChecker<double> ())
-    .AddAttribute ("SleepCurrentA",
-                   "The radio Sleep current in Ampere.",
-                   DoubleValue (0.033),  // sleep mode = 33mA
-                   MakeDoubleAccessor (&WifiRadioEnergyModel::SetSleepCurrentA,
-                                       &WifiRadioEnergyModel::GetSleepCurrentA),
-                   MakeDoubleChecker<double> ())
-    .AddAttribute ("TxCurrentModel", "A pointer to the attached tx current model.",
-                   PointerValue (),
-                   MakePointerAccessor (&WifiRadioEnergyModel::m_txCurrentModel),
-                   MakePointerChecker<WifiTxCurrentModel> ())
-    .AddTraceSource ("TotalEnergyConsumption",
-                     "Total energy consumption of the radio device.",
-                     MakeTraceSourceAccessor (&WifiRadioEnergyModel::m_totalEnergyConsumption),
-                     "ns3::TracedValue::DoubleCallback")
-  ; 
-  return tid;
-}
-
-WifiRadioEnergyModel::WifiRadioEnergyModel ()
-{
-  NS_LOG_FUNCTION (this);
-  m_currentState = WifiPhy::IDLE;  // initially IDLE
-  m_lastUpdateTime = Seconds (0.0);
-  m_nPendingChangeState = 0;
-  m_isSupersededChangeState = false;
-  m_energyDepletionCallback.Nullify ();
-  m_source = NULL;
-  // set callback for WifiPhy listener
-  m_listener = new WifiRadioEnergyModelPhyListener;
-  m_listener->SetChangeStateCallback (MakeCallback (&DeviceEnergyModel::ChangeState, this));
-  // set callback for updating the tx current
-  m_listener->SetUpdateTxCurrentCallback (MakeCallback (&WifiRadioEnergyModel::SetTxCurrentFromModel, this));
-}
-
-WifiRadioEnergyModel::~WifiRadioEnergyModel ()
-{
-  NS_LOG_FUNCTION (this);
-  delete m_listener;
-}
-
-void
-WifiRadioEnergyModel::SetEnergySource (Ptr<EnergySource> source)
-{
-  NS_LOG_FUNCTION (this << source);
-  NS_ASSERT (source != NULL);
-  m_source = source;
-}
-
-double
-WifiRadioEnergyModel::GetTotalEnergyConsumption (void) const
-{
-  NS_LOG_FUNCTION (this);
-  return m_totalEnergyConsumption;
-}
-
-double
-WifiRadioEnergyModel::GetIdleCurrentA (void) const
-{
-  NS_LOG_FUNCTION (this);
-  return m_idleCurrentA;
-}
-
-void
-WifiRadioEnergyModel::SetIdleCurrentA (double idleCurrentA)
-{
-  NS_LOG_FUNCTION (this << idleCurrentA);
-  m_idleCurrentA = idleCurrentA;
-}
-
-double
-WifiRadioEnergyModel::GetCcaBusyCurrentA (void) const
-{
-  NS_LOG_FUNCTION (this);
-  return m_ccaBusyCurrentA;
-}
-
-void
-WifiRadioEnergyModel::SetCcaBusyCurrentA (double CcaBusyCurrentA)
-{
-  NS_LOG_FUNCTION (this << CcaBusyCurrentA);
-  m_ccaBusyCurrentA = CcaBusyCurrentA;
-}
-
-double
-WifiRadioEnergyModel::GetTxCurrentA (void) const
-{
-  NS_LOG_FUNCTION (this);
-  return m_txCurrentA;
-}
-
-void
-WifiRadioEnergyModel::SetTxCurrentA (double txCurrentA)
-{
-  NS_LOG_FUNCTION (this << txCurrentA);
-  m_txCurrentA = txCurrentA;
-}
-
-double
-WifiRadioEnergyModel::GetRxCurrentA (void) const
-{
-  NS_LOG_FUNCTION (this);
-  return m_rxCurrentA;
-}
-
-void
-WifiRadioEnergyModel::SetRxCurrentA (double rxCurrentA)
-{
-  NS_LOG_FUNCTION (this << rxCurrentA);
-  m_rxCurrentA = rxCurrentA;
-}
-
-double
-WifiRadioEnergyModel::GetSwitchingCurrentA (void) const
-{
-  NS_LOG_FUNCTION (this);
-  return m_switchingCurrentA;
-}
-
-void
-WifiRadioEnergyModel::SetSwitchingCurrentA (double switchingCurrentA)
-{
-  NS_LOG_FUNCTION (this << switchingCurrentA);
-  m_switchingCurrentA = switchingCurrentA;
-}
-
-double
-WifiRadioEnergyModel::GetSleepCurrentA (void) const
-{
-  NS_LOG_FUNCTION (this);
-  return m_sleepCurrentA;
-}
-
-void
-WifiRadioEnergyModel::SetSleepCurrentA (double sleepCurrentA)
-{
-  NS_LOG_FUNCTION (this << sleepCurrentA);
-  m_sleepCurrentA = sleepCurrentA;
-}
-
-WifiPhy::State
-WifiRadioEnergyModel::GetCurrentState (void) const
-{
-  NS_LOG_FUNCTION (this);
-  return m_currentState;
-}
-
-void
-WifiRadioEnergyModel::SetEnergyDepletionCallback (
-  WifiRadioEnergyDepletionCallback callback)
-{
-  NS_LOG_FUNCTION (this);
-  if (callback.IsNull ())
-    {
-      NS_LOG_DEBUG ("WifiRadioEnergyModel:Setting NULL energy depletion callback!");
-    }
-  m_energyDepletionCallback = callback;
-}
-
-void
-WifiRadioEnergyModel::SetEnergyRechargedCallback (
-  WifiRadioEnergyRechargedCallback callback)
-{
-  NS_LOG_FUNCTION (this);
-  if (callback.IsNull ())
-    {
-      NS_LOG_DEBUG ("WifiRadioEnergyModel:Setting NULL energy recharged callback!");
-    }
-  m_energyRechargedCallback = callback;
-}
-
-void
-WifiRadioEnergyModel::SetTxCurrentModel (Ptr<WifiTxCurrentModel> model)
-{
-  m_txCurrentModel = model;
-}
-
-void
-WifiRadioEnergyModel::SetTxCurrentFromModel (double txPowerDbm)
-{
-  if (m_txCurrentModel)
-    {
-      m_txCurrentA = m_txCurrentModel->CalcTxCurrent (txPowerDbm);
-    }
-}
-
-void
-WifiRadioEnergyModel::ChangeState (int newState)
-{
-  NS_LOG_FUNCTION (this << newState);
-
-  Time duration = Simulator::Now () - m_lastUpdateTime;
-  NS_ASSERT (duration.GetNanoSeconds () >= 0); // check if duration is valid
-
-  // energy to decrease = current * voltage * time
-  double energyToDecrease = 0.0;
-  double supplyVoltage = m_source->GetSupplyVoltage ();
-  switch (m_currentState)
-    {
-    case WifiPhy::IDLE:
-      energyToDecrease = duration.GetSeconds () * m_idleCurrentA * supplyVoltage;
-      break;
-    case WifiPhy::CCA_BUSY:
-      energyToDecrease = duration.GetSeconds () * m_ccaBusyCurrentA * supplyVoltage;
-      break;
-    case WifiPhy::TX:
-      energyToDecrease = duration.GetSeconds () * m_txCurrentA * supplyVoltage;
-      break;
-    case WifiPhy::RX:
-      energyToDecrease = duration.GetSeconds () * m_rxCurrentA * supplyVoltage;
-      break;
-    case WifiPhy::SWITCHING:
-      energyToDecrease = duration.GetSeconds () * m_switchingCurrentA * supplyVoltage;
-      break;
-    case WifiPhy::SLEEP:
-      energyToDecrease = duration.GetSeconds () * m_sleepCurrentA * supplyVoltage;
-      break;
-    default:
-      NS_FATAL_ERROR ("WifiRadioEnergyModel:Undefined radio state: " << m_currentState);
-    }
-
-  // update total energy consumption
-  m_totalEnergyConsumption += energyToDecrease;
-
-  // update last update time stamp
-  m_lastUpdateTime = Simulator::Now ();
-
-  m_nPendingChangeState++;
-
-  // notify energy source
-  m_source->UpdateEnergySource ();
-
-  // in case the energy source is found to be depleted during the last update, a callback might be
-  // invoked that might cause a change in the Wifi PHY state (e.g., the PHY is put into SLEEP mode).
-  // This in turn causes a new call to this member function, with the consequence that the previous
-  // instance is resumed after the termination of the new instance. In particular, the state set
-  // by the previous instance is erroneously the final state stored in m_currentState. The check below
-  // ensures that previous instances do not change m_currentState.
-
-  if (!m_isSupersededChangeState)
-    {
-      // update current state & last update time stamp
-      SetWifiRadioState ((WifiPhy::State) newState);
-
-      // some debug message
-      NS_LOG_DEBUG ("WifiRadioEnergyModel:Total energy consumption is " <<
-                    m_totalEnergyConsumption << "J");
-    }
-
-  m_isSupersededChangeState = (m_nPendingChangeState > 1);
-
-  m_nPendingChangeState--;
-}
-
-void
-WifiRadioEnergyModel::HandleEnergyDepletion (void)
-{
-  NS_LOG_FUNCTION (this);
-  NS_LOG_DEBUG ("WifiRadioEnergyModel:Energy is depleted!");
-  // invoke energy depletion callback, if set.
-  if (!m_energyDepletionCallback.IsNull ())
-    {
-      m_energyDepletionCallback ();
-    }
-}
-
-void
-WifiRadioEnergyModel::HandleEnergyRecharged (void)
-{
-  NS_LOG_FUNCTION (this);
-  NS_LOG_DEBUG ("WifiRadioEnergyModel:Energy is recharged!");
-  // invoke energy recharged callback, if set.
-  if (!m_energyRechargedCallback.IsNull ())
-    {
-      m_energyRechargedCallback ();
-    }
-}
-
-WifiRadioEnergyModelPhyListener *
-WifiRadioEnergyModel::GetPhyListener (void)
-{
-  NS_LOG_FUNCTION (this);
-  return m_listener;
-}
-
-/*
- * Private functions start here.
- */
-
-void
-WifiRadioEnergyModel::DoDispose (void)
-{
-  NS_LOG_FUNCTION (this);
-  m_source = NULL;
-  m_energyDepletionCallback.Nullify ();
-}
-
-double
-WifiRadioEnergyModel::DoGetCurrentA (void) const
-{
-  NS_LOG_FUNCTION (this);
-  switch (m_currentState)
-    {
-    case WifiPhy::IDLE:
-      return m_idleCurrentA;
-    case WifiPhy::CCA_BUSY:
-      return m_ccaBusyCurrentA;
-    case WifiPhy::TX:
-      return m_txCurrentA;
-    case WifiPhy::RX:
-      return m_rxCurrentA;
-    case WifiPhy::SWITCHING:
-      return m_switchingCurrentA;
-    case WifiPhy::SLEEP:
-      return m_sleepCurrentA;
-    default:
-      NS_FATAL_ERROR ("WifiRadioEnergyModel:Undefined radio state:" << m_currentState);
-    }
-}
-
-void
-WifiRadioEnergyModel::SetWifiRadioState (const WifiPhy::State state)
-{
-  NS_LOG_FUNCTION (this << state);
-  m_currentState = state;
-  std::string stateName;
-  switch (state)
-    {
-    case WifiPhy::IDLE:
-      stateName = "IDLE";
-      break;
-    case WifiPhy::CCA_BUSY:
-      stateName = "CCA_BUSY";
-      break;
-    case WifiPhy::TX:
-      stateName = "TX";
-      break;
-    case WifiPhy::RX:
-      stateName = "RX";
-      break;
-    case WifiPhy::SWITCHING:
-      stateName = "SWITCHING";
-      break;
-    case WifiPhy::SLEEP:
-      stateName = "SLEEP";
-      break;
-    }
-  NS_LOG_DEBUG ("WifiRadioEnergyModel:Switching to state: " << stateName <<
-                " at time = " << Simulator::Now ());
-}
-
-// -------------------------------------------------------------------------- //
-
-WifiRadioEnergyModelPhyListener::WifiRadioEnergyModelPhyListener ()
-{
-  NS_LOG_FUNCTION (this);
-  m_changeStateCallback.Nullify ();
-  m_updateTxCurrentCallback.Nullify ();
-}
-
-WifiRadioEnergyModelPhyListener::~WifiRadioEnergyModelPhyListener ()
-{
-  NS_LOG_FUNCTION (this);
-}
-
-void
-WifiRadioEnergyModelPhyListener::SetChangeStateCallback (DeviceEnergyModel::ChangeStateCallback callback)
-{
-  NS_LOG_FUNCTION (this << &callback);
-  NS_ASSERT (!callback.IsNull ());
-  m_changeStateCallback = callback;
-}
-
-void
-WifiRadioEnergyModelPhyListener::SetUpdateTxCurrentCallback (UpdateTxCurrentCallback callback)
-{
-  NS_LOG_FUNCTION (this << &callback);
-  NS_ASSERT (!callback.IsNull ());
-  m_updateTxCurrentCallback = callback;
-}
-
-void
-WifiRadioEnergyModelPhyListener::NotifyRxStart (Time duration)
-{
-  NS_LOG_FUNCTION (this << duration);
-  if (m_changeStateCallback.IsNull ())
-    {
-      NS_FATAL_ERROR ("WifiRadioEnergyModelPhyListener:Change state callback not set!");
-    }
-  m_changeStateCallback (WifiPhy::RX);
-  m_switchToIdleEvent.Cancel ();
-}
-
-void
-WifiRadioEnergyModelPhyListener::NotifyRxEndOk (void)
-{
-  NS_LOG_FUNCTION (this);
-  if (m_changeStateCallback.IsNull ())
-    {
-      NS_FATAL_ERROR ("WifiRadioEnergyModelPhyListener:Change state callback not set!");
-    }
-  m_changeStateCallback (WifiPhy::IDLE);
-}
-
-void
-WifiRadioEnergyModelPhyListener::NotifyRxEndError (void)
-{
-  NS_LOG_FUNCTION (this);
-  if (m_changeStateCallback.IsNull ())
-    {
-      NS_FATAL_ERROR ("WifiRadioEnergyModelPhyListener:Change state callback not set!");
-    }
-  m_changeStateCallback (WifiPhy::IDLE);
-}
-
-void
-WifiRadioEnergyModelPhyListener::NotifyTxStart (Time duration, double txPowerDbm)
-{
-  NS_LOG_FUNCTION (this << duration << txPowerDbm);
-  if (m_updateTxCurrentCallback.IsNull ())
-    {
-      NS_FATAL_ERROR ("WifiRadioEnergyModelPhyListener:Update tx current callback not set!");
-    }
-  m_updateTxCurrentCallback (txPowerDbm);
-  if (m_changeStateCallback.IsNull ())
-    {
-      NS_FATAL_ERROR ("WifiRadioEnergyModelPhyListener:Change state callback not set!");
-    }
-  m_changeStateCallback (WifiPhy::TX);
-  // schedule changing state back to IDLE after TX duration
-  m_switchToIdleEvent.Cancel ();
-  m_switchToIdleEvent = Simulator::Schedule (duration, &WifiRadioEnergyModelPhyListener::SwitchToIdle, this);
-}
-
-void
-WifiRadioEnergyModelPhyListener::NotifyMaybeCcaBusyStart (Time duration)
-{
-  NS_LOG_FUNCTION (this << duration);
-  if (m_changeStateCallback.IsNull ())
-    {
-      NS_FATAL_ERROR ("WifiRadioEnergyModelPhyListener:Change state callback not set!");
-    }
-  m_changeStateCallback (WifiPhy::CCA_BUSY);
-  // schedule changing state back to IDLE after CCA_BUSY duration
-  m_switchToIdleEvent.Cancel ();
-  m_switchToIdleEvent = Simulator::Schedule (duration, &WifiRadioEnergyModelPhyListener::SwitchToIdle, this);
-}
-
-void
-WifiRadioEnergyModelPhyListener::NotifySwitchingStart (Time duration)
-{
-  NS_LOG_FUNCTION (this << duration);
-  if (m_changeStateCallback.IsNull ())
-    {
-      NS_FATAL_ERROR ("WifiRadioEnergyModelPhyListener:Change state callback not set!");
-    }
-  m_changeStateCallback (WifiPhy::SWITCHING);
-  // schedule changing state back to IDLE after CCA_BUSY duration
-  m_switchToIdleEvent.Cancel ();
-  m_switchToIdleEvent = Simulator::Schedule (duration, &WifiRadioEnergyModelPhyListener::SwitchToIdle, this);
-}
-
-void
-WifiRadioEnergyModelPhyListener::NotifySleep (void)
-{
-  NS_LOG_FUNCTION (this);
-  if (m_changeStateCallback.IsNull ())
-    {
-      NS_FATAL_ERROR ("WifiRadioEnergyModelPhyListener:Change state callback not set!");
-    }
-  m_changeStateCallback (WifiPhy::SLEEP);
-  m_switchToIdleEvent.Cancel ();
-}
-
-void
-WifiRadioEnergyModelPhyListener::NotifyWakeup(void)
-{
-  NS_LOG_FUNCTION (this);
-  if (m_changeStateCallback.IsNull ())
-    {
-      NS_FATAL_ERROR ("WifiRadioEnergyModelPhyListener:Change state callback not set!");
-    }
-  m_changeStateCallback (WifiPhy::IDLE);
-}
-
-/*
- * Private function state here.
- */
-
-void
-WifiRadioEnergyModelPhyListener::SwitchToIdle (void)
-{
-  NS_LOG_FUNCTION (this);
-  if (m_changeStateCallback.IsNull ())
-    {
-      NS_FATAL_ERROR ("WifiRadioEnergyModelPhyListener:Change state callback not set!");
-    }
-  m_changeStateCallback (WifiPhy::IDLE);
-}
-
-} // namespace ns3
diff -Naur ns-3.23/src/energy/model/wifi-radio-energy-model.h ns-3.24/src/energy/model/wifi-radio-energy-model.h
--- ns-3.23/src/energy/model/wifi-radio-energy-model.h	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/energy/model/wifi-radio-energy-model.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,363 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2010 Network Security Lab, University of Washington, Seattle.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Authors: Sidharth Nabar <snabar@uw.edu>, He Wu <mdzz@u.washington.edu>
- */
-
-#ifndef WIFI_RADIO_ENERGY_MODEL_H
-#define WIFI_RADIO_ENERGY_MODEL_H
-
-#include "ns3/device-energy-model.h"
-#include "ns3/nstime.h"
-#include "ns3/event-id.h"
-#include "ns3/traced-value.h"
-#include "ns3/wifi-phy.h"
-
-namespace ns3 {
-
-class WifiTxCurrentModel;
-
-/**
- * \ingroup energy
- * A WifiPhy listener class for notifying the WifiRadioEnergyModel of Wifi radio
- * state change.
- *
- */
-class WifiRadioEnergyModelPhyListener : public WifiPhyListener
-{
-public:
-  /**
-   * Callback type for updating the transmit current based on the nominal tx power.
-   */
-  typedef Callback<void, double> UpdateTxCurrentCallback;
-
-  WifiRadioEnergyModelPhyListener ();
-  virtual ~WifiRadioEnergyModelPhyListener ();
-
-  /**
-   * \brief Sets the change state callback. Used by helper class.
-   *
-   * \param callback Change state callback.
-   */
-  void SetChangeStateCallback (DeviceEnergyModel::ChangeStateCallback callback);
-
-  /**
-   * \brief Sets the update tx current callback.
-   *
-   * \param callback Update tx current callback.
-   */
-  void SetUpdateTxCurrentCallback (UpdateTxCurrentCallback callback);
-
-  /**
-   * \brief Switches the WifiRadioEnergyModel to RX state.
-   *
-   * \param duration the expected duration of the packet reception.
-   *
-   * Defined in ns3::WifiPhyListener
-   */
-  virtual void NotifyRxStart (Time duration);
-
-  /**
-   * \brief Switches the WifiRadioEnergyModel back to IDLE state.
-   *
-   * Defined in ns3::WifiPhyListener
-   *
-   * Note that for the WifiRadioEnergyModel, the behavior of the function is the
-   * same as NotifyRxEndError.
-   */
-  virtual void NotifyRxEndOk (void);
-
-  /**
-   * \brief Switches the WifiRadioEnergyModel back to IDLE state.
-   *
-   * Defined in ns3::WifiPhyListener
-   *
-   * Note that for the WifiRadioEnergyModel, the behavior of the function is the
-   * same as NotifyRxEndOk.
-   */
-  virtual void NotifyRxEndError (void);
-
-  /**
-   * \brief Switches the WifiRadioEnergyModel to TX state and switches back to
-   * IDLE after TX duration.
-   *
-   * \param duration the expected transmission duration.
-   * \param txPowerDbm the nominal tx power in dBm
-   *
-   * Defined in ns3::WifiPhyListener
-   */
-  virtual void NotifyTxStart (Time duration, double txPowerDbm);
-
-  /**
-   * \param duration the expected busy duration.
-   *
-   * Defined in ns3::WifiPhyListener
-   */
-  virtual void NotifyMaybeCcaBusyStart (Time duration);
-
-  /**
-   * \param duration the expected channel switching duration.
-   *
-   * Defined in ns3::WifiPhyListener
-   */
-  virtual void NotifySwitchingStart (Time duration);
-
-  /**
-   * Defined in ns3::WifiPhyListener
-   */
-  virtual void NotifySleep (void);
-
-  /**
-   * Defined in ns3::WifiPhyListener
-   */
-  virtual void NotifyWakeup (void);
-
-private:
-  /**
-   * A helper function that makes scheduling m_changeStateCallback possible.
-   */
-  void SwitchToIdle (void);
-
-private:
-  /**
-   * Change state callback used to notify the WifiRadioEnergyModel of a state
-   * change.
-   */
-  DeviceEnergyModel::ChangeStateCallback m_changeStateCallback;
-
-  /**
-   * Callback used to update the tx current stored in WifiRadioEnergyModel based on 
-   * the nominal tx power used to transmit the current frame.
-   */
-  UpdateTxCurrentCallback m_updateTxCurrentCallback;
-
-  EventId m_switchToIdleEvent;
-};
-
-// -------------------------------------------------------------------------- //
-
-/**
- * \ingroup energy
- * \brief A WiFi radio energy model.
- * 
- * 4 states are defined for the radio: TX, RX, IDLE, SLEEP. Default state is
- * IDLE.
- * The different types of transactions that are defined are: 
- *  1. Tx: State goes from IDLE to TX, radio is in TX state for TX_duration,
- *     then state goes from TX to IDLE.
- *  2. Rx: State goes from IDLE to RX, radio is in RX state for RX_duration,
- *     then state goes from RX to IDLE.
- *  3. Go_to_Sleep: State goes from IDLE to SLEEP.
- *  4. End_of_Sleep: State goes from SLEEP to IDLE.
- * The class keeps track of what state the radio is currently in.
- *
- * Energy calculation: For each transaction, this model notifies EnergySource
- * object. The EnergySource object will query this model for the total current.
- * Then the EnergySource object uses the total current to calculate energy.
- *
- * Default values for power consumption are based on measurements reported in:
- * 
- * Daniel Halperin, Ben Greenstein, Anmol Sheth, David Wetherall,
- * "Demystifying 802.11n power consumption", Proceedings of HotPower'10 
- * 
- * Power consumption in Watts (single antenna):
- * 
- * \f$ P_{tx} = 1.14 \f$ (transmit at 0dBm)
- * 
- * \f$ P_{rx} = 0.94 \f$
- * 
- * \f$ P_{idle} = 0.82 \f$
- * 
- * \f$ P_{sleep} = 0.10 \f$
- * 
- * Hence, considering the default supply voltage of 3.0 V for the basic energy
- * source, the default current values in Ampere are:
- * 
- * \f$ I_{tx} = 0.380 \f$
- * 
- * \f$ I_{rx} = 0.313 \f$
- * 
- * \f$ I_{idle} = 0.273 \f$
- * 
- * \f$ I_{sleep} = 0.033 \f$
- * 
- * The dependence of the power consumption in transmission mode on the nominal
- * transmit power can also be achieved through a wifi tx current model.
- *
- */
-class WifiRadioEnergyModel : public DeviceEnergyModel
-{
-public:
-  /**
-   * Callback type for energy depletion handling.
-   */
-  typedef Callback<void> WifiRadioEnergyDepletionCallback;
-
-  /**
-   * Callback type for energy recharged handling.
-   */
-  typedef Callback<void> WifiRadioEnergyRechargedCallback;
-
-public:
-  static TypeId GetTypeId (void);
-  WifiRadioEnergyModel ();
-  virtual ~WifiRadioEnergyModel ();
-
-  /**
-   * \brief Sets pointer to EnergySouce installed on node.
-   *
-   * \param source Pointer to EnergySource installed on node.
-   *
-   * Implements DeviceEnergyModel::SetEnergySource.
-   */
-  virtual void SetEnergySource (Ptr<EnergySource> source);
-
-  /**
-   * \returns Total energy consumption of the wifi device.
-   *
-   * Implements DeviceEnergyModel::GetTotalEnergyConsumption.
-   */
-  virtual double GetTotalEnergyConsumption (void) const;
-
-  // Setter & getters for state power consumption.
-  double GetIdleCurrentA (void) const;
-  void SetIdleCurrentA (double idleCurrentA);
-  double GetCcaBusyCurrentA (void) const;
-  void SetCcaBusyCurrentA (double ccaBusyCurrentA);
-  double GetTxCurrentA (void) const;
-  void SetTxCurrentA (double txCurrentA);
-  double GetRxCurrentA (void) const;
-  void SetRxCurrentA (double rxCurrentA);
-  double GetSwitchingCurrentA (void) const;
-  void SetSwitchingCurrentA (double switchingCurrentA);
-  double GetSleepCurrentA (void) const;
-  void SetSleepCurrentA (double sleepCurrentA);
-
-  /**
-   * \returns Current state.
-   */
-  WifiPhy::State GetCurrentState (void) const;
-
-  /**
-   * \param callback Callback function.
-   *
-   * Sets callback for energy depletion handling.
-   */
-  void SetEnergyDepletionCallback (WifiRadioEnergyDepletionCallback callback);
-
-  /**
-   * \param callback Callback function.
-   *
-   * Sets callback for energy recharged handling.
-   */
-  void SetEnergyRechargedCallback (WifiRadioEnergyRechargedCallback callback);
-
-  /**
-   * \param model the model used to compute the wifi tx current.
-   */
-  void SetTxCurrentModel (Ptr<WifiTxCurrentModel> model);
-
-  /**
-   * \brief Calls the CalcTxCurrent method of the tx current model to
-   *        compute the tx current based on such model
-   * 
-   * \param txPowerDbm the nominal tx power in dBm
-   */
-  void SetTxCurrentFromModel (double txPowerDbm);
-
-  /**
-   * \brief Changes state of the WifiRadioEnergyMode.
-   *
-   * \param newState New state the wifi radio is in.
-   *
-   * Implements DeviceEnergyModel::ChangeState.
-   */
-  virtual void ChangeState (int newState);
-
-  /**
-   * \brief Handles energy depletion.
-   *
-   * Implements DeviceEnergyModel::HandleEnergyDepletion
-   */
-  virtual void HandleEnergyDepletion (void);
-
-  /**
-   * \brief Handles energy recharged.
-   *
-   * Implements DeviceEnergyModel::HandleEnergyRecharged
-   */
-  virtual void HandleEnergyRecharged (void);
-
-  /**
-   * \returns Pointer to the PHY listener.
-   */
-  WifiRadioEnergyModelPhyListener * GetPhyListener (void);
-
-
-private:
-  void DoDispose (void);
-
-  /**
-   * \returns Current draw of device, at current state.
-   *
-   * Implements DeviceEnergyModel::GetCurrentA.
-   */
-  virtual double DoGetCurrentA (void) const;
-
-  /**
-   * \param state New state the radio device is currently in.
-   *
-   * Sets current state. This function is private so that only the energy model
-   * can change its own state.
-   */
-  void SetWifiRadioState (const WifiPhy::State state);
-
-private:
-  Ptr<EnergySource> m_source;
-
-  // Member variables for current draw in different radio modes.
-  double m_txCurrentA;
-  double m_rxCurrentA;
-  double m_idleCurrentA;
-  double m_ccaBusyCurrentA;
-  double m_switchingCurrentA;
-  double m_sleepCurrentA;
-  Ptr<WifiTxCurrentModel> m_txCurrentModel;
-
-  // This variable keeps track of the total energy consumed by this model.
-  TracedValue<double> m_totalEnergyConsumption;
-
-  // State variables.
-  WifiPhy::State m_currentState;  // current state the radio is in
-  Time m_lastUpdateTime;          // time stamp of previous energy update
-
-  uint8_t m_nPendingChangeState;
-  bool m_isSupersededChangeState;
-
-  // Energy depletion callback
-  WifiRadioEnergyDepletionCallback m_energyDepletionCallback;
-
-  // Energy recharged callback
-  WifiRadioEnergyRechargedCallback m_energyRechargedCallback;
-
-  // WifiPhy listener
-  WifiRadioEnergyModelPhyListener *m_listener;
-};
-
-} // namespace ns3
-
-#endif /* WIFI_RADIO_ENERGY_MODEL_H */
diff -Naur ns-3.23/src/energy/model/wifi-tx-current-model.cc ns-3.24/src/energy/model/wifi-tx-current-model.cc
--- ns-3.23/src/energy/model/wifi-tx-current-model.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/energy/model/wifi-tx-current-model.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,143 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2014 Universita' degli Studi di Napoli "Federico II"
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as 
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Stefano Avallone <stefano.avallone@unina.it>
- */
-
-#include "wifi-tx-current-model.h"
-#include "ns3/log.h"
-#include "ns3/boolean.h"
-#include "ns3/double.h"
-#include "ns3/string.h"
-#include "ns3/pointer.h"
-#include <cmath>
-
-namespace ns3 {
-
-NS_LOG_COMPONENT_DEFINE ("WifiTxCurrentModel");
-
-// ------------------------------------------------------------------------- //
-
-NS_OBJECT_ENSURE_REGISTERED (WifiTxCurrentModel);
-
-TypeId 
-WifiTxCurrentModel::GetTypeId (void)
-{
-  static TypeId tid = TypeId ("ns3::WifiTxCurrentModel")
-    .SetParent<Object> ()
-    .SetGroupName ("Energy")
-  ;
-  return tid;
-}
-
-WifiTxCurrentModel::WifiTxCurrentModel()
-{
-}
-
-WifiTxCurrentModel::~WifiTxCurrentModel()
-{
-}
-
-double
-WifiTxCurrentModel::DbmToW (double dbm)
-{
-  double mW = std::pow (10.0, dbm / 10.0);
-  return mW / 1000.0;
-}
-
-// ------------------------------------------------------------------------- //
-
-NS_OBJECT_ENSURE_REGISTERED (LinearWifiTxCurrentModel);
-
-TypeId 
-LinearWifiTxCurrentModel::GetTypeId (void)
-{
-  static TypeId tid = TypeId ("ns3::LinearWifiTxCurrentModel")
-    .SetParent<WifiTxCurrentModel> ()
-    .AddConstructor<LinearWifiTxCurrentModel> ()
-    .AddAttribute ("Eta", "The efficiency of the power amplifier.",
-                   DoubleValue (0.10),
-                   MakeDoubleAccessor (&LinearWifiTxCurrentModel::SetEta,
-                                       &LinearWifiTxCurrentModel::GetEta),
-                   MakeDoubleChecker<double> ())
-    .AddAttribute ("Voltage", "The supply voltage (in Volts).",
-                   DoubleValue (3.0),
-                   MakeDoubleAccessor (&LinearWifiTxCurrentModel::SetVoltage,
-                                       &LinearWifiTxCurrentModel::GetVoltage),
-                   MakeDoubleChecker<double> ())
-    .AddAttribute ("IdleCurrent", "The current in the IDLE state (in Watts).",
-                   DoubleValue (0.273333),
-                   MakeDoubleAccessor (&LinearWifiTxCurrentModel::SetIdleCurrent,
-                                       &LinearWifiTxCurrentModel::GetIdleCurrent),
-                   MakeDoubleChecker<double> ())
-  ;
-  return tid;
-}
-
-LinearWifiTxCurrentModel::LinearWifiTxCurrentModel ()
-{
-}
-
-LinearWifiTxCurrentModel::~LinearWifiTxCurrentModel()
-{
-}
-
-void
-LinearWifiTxCurrentModel::SetEta (double eta)
-{
-  m_eta = eta;
-}
-
-void
-LinearWifiTxCurrentModel::SetVoltage (double voltage)
-{
-  m_voltage = voltage;
-}
-
-void
-LinearWifiTxCurrentModel::SetIdleCurrent (double idleCurrent)
-{
-  m_idleCurrent = idleCurrent;
-}
-
-double
-LinearWifiTxCurrentModel::GetEta (void) const
-{
-  return m_eta;
-}
-
-double
-LinearWifiTxCurrentModel::GetVoltage (void) const
-{
-  return m_voltage;
-}
-
-double
-LinearWifiTxCurrentModel::GetIdleCurrent (void) const
-{
-  return m_idleCurrent;
-}
-
-double
-LinearWifiTxCurrentModel::CalcTxCurrent (double txPowerDbm) const
-{
-  return DbmToW (txPowerDbm) / (m_voltage * m_eta) + m_idleCurrent;
-}
-
-// ------------------------------------------------------------------------- //
-
-} // namespace ns3
diff -Naur ns-3.23/src/energy/model/wifi-tx-current-model.h ns-3.24/src/energy/model/wifi-tx-current-model.h
--- ns-3.23/src/energy/model/wifi-tx-current-model.h	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/energy/model/wifi-tx-current-model.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,142 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2014 Universita' degli Studi di Napoli "Federico II"
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as 
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Stefano Avallone <stefano.avallone@unina.it>
- */
-
-#ifndef WIFI_TX_CURRENT_MODEL_H
-#define WIFI_TX_CURRENT_MODEL_H
-
-#include "ns3/object.h"
-
-namespace ns3 {
-
-/**
- * \ingroup energy
- * 
- * \brief Modelize the transmit current as a function of the transmit power and mode
- *
- */
-class WifiTxCurrentModel : public Object
-{
-public:
-  static TypeId GetTypeId (void);
-
-  WifiTxCurrentModel ();
-  virtual ~WifiTxCurrentModel ();
-
-  /**
-   * \param txPowerDbm the nominal tx power in dBm
-   * \returns the transmit current (in Ampere)
-   */
-  virtual double CalcTxCurrent (double txPowerDbm) const = 0;
-
-  /**
-   * Convert from dBm to Watts.
-   *
-   * \param dbm the power in dBm
-   * \return the equivalent Watts for the given dBm
-   */
-  static double DbmToW (double dbm);
-};
-
-/**
- * \ingroup energy
- *
- * \brief a linear model of the Wifi transmit current
- *
- * This model assumes that the transmit current is a linear function
- * of the nominal transmit power used to send the frame.
- * In particular, the power absorbed during the transmission of a frame \f$ W_{tx} \f$
- * is given by the power absorbed by the power amplifier \f$ W_{pa} \f$ plus the power
- * absorbed by the RF subsystem. The latter is assumed to be the same as the power
- * absorbed in the IDLE state \f$ W_{idle} \f$.
- * 
- * The efficiency \f$ \eta \f$ of the power amplifier is given by 
- * \f$ \eta = \frac{P_{tx}}{W_{pa}} \f$, where \f$ P_{tx} \f$ is the output power, i.e.,
- * the nominal transmit power. Hence, \f$ W_{pa} = \frac{P_{tx}}{\eta} \f$
- * 
- * It turns out that \f$ W_{tx} = \frac{P_{tx}}{\eta} + W_{idle} \f$. By dividing both
- * sides by the supply voltage \f$ V \f$: \f$ I_{tx} = \frac{P_{tx}}{V \cdot \eta} + I_{idle} \f$,
- * where \f$ I_{tx} \f$ and \f$ I_{idle} \f$ are, respectively, the transmit current and
- * the idle current.
- * 
- * For more information, refer to:
- * Francesco Ivan Di Piazza, Stefano Mangione, and Ilenia Tinnirello.
- * "On the Effects of Transmit Power Control on the Energy Consumption of WiFi Network Cards",
- * Proceedings of ICST QShine 2009, pp. 463--475
- * 
- * If the tx current corresponding to a given nominal transmit power is known, the efficiency
- * of the power amplifier is given by the above formula:
- * \f$ \eta = \frac{P_{tx}}{(I_{tx}-I_{idle})\cdot V} \f$
- * 
- */
-class LinearWifiTxCurrentModel : public WifiTxCurrentModel
-{
-public:
-  static TypeId GetTypeId (void);
-
-  LinearWifiTxCurrentModel ();
-  virtual ~LinearWifiTxCurrentModel ();
-  
-  /**
-   * \param eta (dimension-less)
-   *
-   * Set the power amplifier efficiency.
-   */
-  void SetEta (double eta);
-
-  /**
-   * \param voltage (Volts)
-   *
-   * Set the supply voltage.
-   */
-  void SetVoltage (double voltage);
-
-  /**
-   * \param idleCurrent (Ampere)
-   *
-   * Set the current in the IDLE state.
-   */
-  void SetIdleCurrent (double idleCurrent);
-
-  /**
-   * \return the power amplifier efficiency.
-   */
-  double GetEta (void) const;
-
-  /**
-   * \return the supply voltage.
-   */
-  double GetVoltage (void) const;
-
-  /**
-   * \return the current in the IDLE state.
-   */
-  double GetIdleCurrent (void) const;
-
-  double CalcTxCurrent (double txPowerDbm) const;
-
-private:
-  double m_eta;
-  double m_voltage;
-  double m_idleCurrent;
-};
-
-} // namespace ns3
-
-#endif /* WIFI_TX_CURRENT_MODEL_H */
diff -Naur ns-3.23/src/energy/test/basic-energy-model-test.cc ns-3.24/src/energy/test/basic-energy-model-test.cc
--- ns-3.23/src/energy/test/basic-energy-model-test.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/energy/test/basic-energy-model-test.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,393 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2010 Network Security Lab, University of Washington, Seattle.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: He Wu <mdzz@u.washington.edu>
- */
-
-#include "ns3/basic-energy-source.h"
-#include "ns3/wifi-radio-energy-model.h"
-#include "ns3/basic-energy-source-helper.h"
-#include "ns3/wifi-radio-energy-model-helper.h"
-#include "ns3/energy-source-container.h"
-#include "ns3/device-energy-model-container.h"
-#include "ns3/log.h"
-#include "ns3/test.h"
-#include "ns3/node.h"
-#include "ns3/simulator.h"
-#include "ns3/double.h"
-#include "ns3/config.h"
-#include "ns3/string.h"
-#include "ns3/yans-wifi-helper.h"
-#include "ns3/nqos-wifi-mac-helper.h"
-#include <cmath>
-
-using namespace ns3;
-
-NS_LOG_COMPONENT_DEFINE ("BasicEnergyModelTestSuite");
-
-/**
- * Test case of update remaining energy for BasicEnergySource and
- * WifiRadioEnergyModel.
- */
-class BasicEnergyUpdateTest : public TestCase
-{
-public:
-  BasicEnergyUpdateTest ();
-  virtual ~BasicEnergyUpdateTest ();
-
-private:
-  void DoRun (void);
-
-  /**
-   * \param state Radio state to switch to.
-   * \return False if no error occurs.
-   *
-   * Runs simulation for a while, check if final state & remaining energy is
-   * correctly updated.
-   */
-  bool StateSwitchTest (WifiPhy::State state);
-
-private:
-  double m_timeS;     // in seconds
-  double m_tolerance; // tolerance for power estimation
-
-  ObjectFactory m_energySource;
-  ObjectFactory m_deviceEnergyModel;
-};
-
-BasicEnergyUpdateTest::BasicEnergyUpdateTest ()
-  : TestCase ("Basic energy model update remaining energy test case")
-{
-  m_timeS = 15.5; // idle for 15 seconds before changing state
-  m_tolerance = 1.0e-13;  //
-}
-
-BasicEnergyUpdateTest::~BasicEnergyUpdateTest ()
-{
-}
-
-void
-BasicEnergyUpdateTest::DoRun (void)
-{
-  // set types
-  m_energySource.SetTypeId ("ns3::BasicEnergySource");
-  m_deviceEnergyModel.SetTypeId ("ns3::WifiRadioEnergyModel");
-
-  // run state switch tests
-  NS_TEST_ASSERT_MSG_EQ (StateSwitchTest (WifiPhy::IDLE), false, "Problem with state switch test (WifiPhy idle).");
-  NS_TEST_ASSERT_MSG_EQ (StateSwitchTest (WifiPhy::CCA_BUSY), false, "Problem with state switch test (WifiPhy cca busy).");
-  NS_TEST_ASSERT_MSG_EQ (StateSwitchTest (WifiPhy::TX), false, "Problem with state switch test (WifiPhy tx).");
-  NS_TEST_ASSERT_MSG_EQ (StateSwitchTest (WifiPhy::RX), false, "Problem with state switch test (WifiPhy rx).");
-  NS_TEST_ASSERT_MSG_EQ (StateSwitchTest (WifiPhy::SWITCHING), false, "Problem with state switch test (WifiPhy switching).");
-  NS_TEST_ASSERT_MSG_EQ (StateSwitchTest (WifiPhy::SLEEP), false, "Problem with state switch test (WifiPhy sleep).");
-}
-
-bool
-BasicEnergyUpdateTest::StateSwitchTest (WifiPhy::State state)
-{
-  // create node
-  Ptr<Node> node = CreateObject<Node> ();
-
-  // create energy source
-  Ptr<BasicEnergySource> source = m_energySource.Create<BasicEnergySource> ();
-  // aggregate energy source to node
-  node->AggregateObject (source);
-
-  // create device energy model
-  Ptr<WifiRadioEnergyModel> model =
-    m_deviceEnergyModel.Create<WifiRadioEnergyModel> ();
-  // set energy source pointer
-  model->SetEnergySource (source);
-  // add device energy model to model list in energy source
-  source->AppendDeviceEnergyModel (model);
-
-  // retrieve device energy model from energy source
-  DeviceEnergyModelContainer models =
-    source->FindDeviceEnergyModels ("ns3::WifiRadioEnergyModel");
-  // check list
-  NS_TEST_ASSERT_MSG_EQ_RETURNS_BOOL (false, (models.GetN () == 0), "Model list is empty!");
-  // get pointer
-  Ptr<WifiRadioEnergyModel> devModel =
-    DynamicCast<WifiRadioEnergyModel> (models.Get (0));
-  // check pointer
-  NS_TEST_ASSERT_MSG_NE_RETURNS_BOOL (0, devModel, "NULL pointer to device model!");
-
-  /*
-   * The radio will stay IDLE for m_timeS seconds. Then it will switch into a
-   * different state.
-   */
-
-  // schedule change of state
-  Simulator::Schedule (Seconds (m_timeS),
-                       &WifiRadioEnergyModel::ChangeState, devModel, state);
-
-  // Calculate remaining energy at simulation stop time
-  Simulator::Schedule (Seconds (m_timeS * 2), 
-                       &BasicEnergySource::UpdateEnergySource, source);
-
-  double timeDelta = 0.000000001; // 1 nanosecond
-  // run simulation; stop just after last scheduled event
-  Simulator::Stop (Seconds (m_timeS * 2 + timeDelta));
-  Simulator::Run ();
-
-  // energy = current * voltage * time
-
-  // calculate idle power consumption
-  double estRemainingEnergy = source->GetInitialEnergy ();
-  double voltage = source->GetSupplyVoltage ();
-  estRemainingEnergy -= devModel->GetIdleCurrentA () * voltage * m_timeS;
-
-  /*
-   * Manually calculate the number of periodic updates performed by the source.
-   * This is to check if the periodic updates are performed correctly.
-   */
-  double actualTime = m_timeS;
-  actualTime /= source->GetEnergyUpdateInterval ().GetSeconds ();
-  actualTime = floor (actualTime); // rounding for update interval
-  actualTime *= source->GetEnergyUpdateInterval ().GetSeconds ();
-
-  // calculate new state power consumption
-  double current = 0.0;
-  switch (state)
-    {
-    case WifiPhy::IDLE:
-      current = devModel->GetIdleCurrentA ();
-      break;
-    case WifiPhy::CCA_BUSY:
-      current = devModel->GetCcaBusyCurrentA ();
-      break;
-    case WifiPhy::TX:
-      current = devModel->GetTxCurrentA ();
-      break;
-    case WifiPhy::RX:
-      current = devModel->GetRxCurrentA ();
-      break;
-    case WifiPhy::SWITCHING:
-      current = devModel->GetSwitchingCurrentA ();
-      break;
-    case WifiPhy::SLEEP:
-      current = devModel->GetSleepCurrentA ();
-      break;
-    default:
-      NS_FATAL_ERROR ("Undefined radio state: " << state);
-      break;
-    }
-  estRemainingEnergy -= current * voltage * m_timeS;
-
-  // obtain remaining energy from source
-  double remainingEnergy = source->GetRemainingEnergy ();
-  NS_LOG_DEBUG ("Remaining energy is " << remainingEnergy);
-  NS_LOG_DEBUG ("Estimated remaining energy is " << estRemainingEnergy);
-  NS_LOG_DEBUG ("Difference is " << estRemainingEnergy - remainingEnergy);
-  // check remaining energy
-  NS_TEST_ASSERT_MSG_EQ_TOL_RETURNS_BOOL (remainingEnergy, estRemainingEnergy, m_tolerance,
-                                          "Incorrect remaining energy!");
-
-  // obtain radio state
-  WifiPhy::State endState = devModel->GetCurrentState ();
-  NS_LOG_DEBUG ("Radio state is " << endState);
-  // check end state
-  NS_TEST_ASSERT_MSG_EQ_RETURNS_BOOL (endState, state,  "Incorrect end state!");
-  Simulator::Destroy ();
-
-  return false; // no error
-}
-
-// -------------------------------------------------------------------------- //
-
-/**
- * Test case of energy depletion handling for BasicEnergySource and
- * WifiRadioEnergyModel.
- */
-class BasicEnergyDepletionTest : public TestCase
-{
-public:
-  BasicEnergyDepletionTest ();
-  virtual ~BasicEnergyDepletionTest ();
-
-private:
-  void DoRun (void);
-
-  /**
-   * Callback invoked when energy is drained from source.
-   */
-  void DepletionHandler (void);
-
-  /**
-   * \param simTimeS Simulation time, in seconds.
-   * \param updateIntervalS Device model update interval, in seconds.
-   * \return False if all is good.
-   *
-   * Runs simulation with specified simulation time and update interval.
-   */
-  bool DepletionTestCase (double simTimeS, double updateIntervalS);
-
-private:
-  int m_numOfNodes;         // number of nodes in simulation
-  int m_callbackCount;      // counter for # of callbacks invoked
-  double m_simTimeS;        // maximum simulation time, in seconds
-  double m_timeStepS;       // simulation time step size, in seconds
-  double m_updateIntervalS; // update interval of each device model
-
-};
-
-BasicEnergyDepletionTest::BasicEnergyDepletionTest ()
-  : TestCase ("Basic energy model energy depletion test case")
-{
-  m_numOfNodes = 10;
-  m_callbackCount = 0;
-  m_simTimeS = 4.5;
-  m_timeStepS = 0.5;
-  m_updateIntervalS = 1.5;
-}
-
-BasicEnergyDepletionTest::~BasicEnergyDepletionTest ()
-{
-}
-
-void
-BasicEnergyDepletionTest::DoRun (void)
-{
-  /*
-   * Run simulation with different simulation time and update interval.
-   */
-  for (double simTimeS = 0.0; simTimeS <= m_simTimeS; simTimeS += m_timeStepS)
-    {
-      for (double updateIntervalS = 0.5; updateIntervalS <= m_updateIntervalS;
-           updateIntervalS += m_timeStepS)
-        {
-          NS_TEST_ASSERT_MSG_EQ (DepletionTestCase (simTimeS, updateIntervalS), false, "Depletion test case problem.");
-          // reset callback count
-          m_callbackCount = 0;
-        }
-    }
-}
-
-void
-BasicEnergyDepletionTest::DepletionHandler (void)
-{
-  m_callbackCount++;
-}
-
-bool
-BasicEnergyDepletionTest::DepletionTestCase (double simTimeS,
-                                             double updateIntervalS)
-{
-  // create node
-  NodeContainer c;
-  c.Create (m_numOfNodes);
-
-  std::string phyMode ("DsssRate1Mbps");
-
-  // disable fragmentation for frames below 2200 bytes
-  Config::SetDefault ("ns3::WifiRemoteStationManager::FragmentationThreshold",
-                      StringValue ("2200"));
-  // turn off RTS/CTS for frames below 2200 bytes
-  Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold",
-                      StringValue ("2200"));
-  // Fix non-unicast data rate to be the same as that of unicast
-  Config::SetDefault ("ns3::WifiRemoteStationManager::NonUnicastMode",
-                      StringValue (phyMode));
-
-  // install YansWifiPhy
-  WifiHelper wifi;
-  wifi.SetStandard (WIFI_PHY_STANDARD_80211b);
-
-  YansWifiPhyHelper wifiPhy =  YansWifiPhyHelper::Default ();
-  /*
-   * This is one parameter that matters when using FixedRssLossModel, set it to
-   * zero; otherwise, gain will be added.
-   */
-  wifiPhy.Set ("RxGain", DoubleValue (0));
-  // ns-3 supports RadioTap and Prism tracing extensions for 802.11b
-  wifiPhy.SetPcapDataLinkType (YansWifiPhyHelper::DLT_IEEE802_11_RADIO);
-
-  YansWifiChannelHelper wifiChannel;
-  wifiChannel.SetPropagationDelay ("ns3::ConstantSpeedPropagationDelayModel");
-  wifiPhy.SetChannel (wifiChannel.Create ());
-
-  // Add a non-QoS upper MAC, and disable rate control
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
-  wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
-                                "DataMode", StringValue (phyMode),
-                                "ControlMode", StringValue (phyMode));
-  // Set it to ad-hoc mode
-  wifiMac.SetType ("ns3::AdhocWifiMac");
-  NetDeviceContainer devices = wifi.Install (wifiPhy, wifiMac, c);
-
-  /*
-   * Create and install energy source and a single basic radio energy model on
-   * the node using helpers.
-   */
-  // source helper
-  BasicEnergySourceHelper basicSourceHelper;
-  // set energy to 0 so that we deplete energy at the beginning of simulation
-  basicSourceHelper.Set ("BasicEnergySourceInitialEnergyJ", DoubleValue (0.0));
-  // set update interval
-  basicSourceHelper.Set ("PeriodicEnergyUpdateInterval",
-                         TimeValue (Seconds (updateIntervalS)));
-  // install source
-  EnergySourceContainer sources = basicSourceHelper.Install (c);
-
-  // device energy model helper
-  WifiRadioEnergyModelHelper radioEnergyHelper;
-  // set energy depletion callback
-  WifiRadioEnergyModel::WifiRadioEnergyDepletionCallback callback =
-    MakeCallback (&BasicEnergyDepletionTest::DepletionHandler, this);
-  radioEnergyHelper.SetDepletionCallback (callback);
-  // install on node
-  DeviceEnergyModelContainer deviceModels = radioEnergyHelper.Install (devices, sources);
-
-  // run simulation
-  Simulator::Stop (Seconds (simTimeS));
-  Simulator::Run ();
-  Simulator::Destroy ();
-
-  NS_LOG_DEBUG ("Simulation time = " << simTimeS << "s");
-  NS_LOG_DEBUG ("Update interval = " << updateIntervalS << "s");
-  NS_LOG_DEBUG ("Expected callback count is " << m_numOfNodes);
-  NS_LOG_DEBUG ("Actual callback count is " << m_callbackCount);
-
-  // check result, call back should only be invoked once
-  NS_TEST_ASSERT_MSG_EQ_RETURNS_BOOL (m_numOfNodes, m_callbackCount, "Not all callbacks are invoked!");
-
-  return false;
-}
-
-// -------------------------------------------------------------------------- //
-
-/**
- * Unit test suite for energy model. Although the test suite involves 2 modules
- * it is still considered a unit test. Because a DeviceEnergyModel cannot live
- * without an EnergySource.
- */
-class BasicEnergyModelTestSuite : public TestSuite
-{
-public:
-  BasicEnergyModelTestSuite ();
-};
-
-BasicEnergyModelTestSuite::BasicEnergyModelTestSuite ()
-  : TestSuite ("basic-energy-model", UNIT)
-{
-  AddTestCase (new BasicEnergyUpdateTest, TestCase::QUICK);
-  AddTestCase (new BasicEnergyDepletionTest, TestCase::QUICK);
-}
-
-// create an instance of the test suite
-static BasicEnergyModelTestSuite g_energyModelTestSuite;
-
diff -Naur ns-3.23/src/energy/test/examples-to-run.py ns-3.24/src/energy/test/examples-to-run.py
--- ns-3.23/src/energy/test/examples-to-run.py	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/energy/test/examples-to-run.py	2015-09-15 11:18:44.000000000 -0700
@@ -7,7 +7,10 @@
 #     (example_name, do_run, do_valgrind_run).
 #
 # See test.py for more information.
-cpp_examples = []
+cpp_examples = [
+    ("li-ion-energy-source", "True", "True"),
+    ("rv-battery-model-test", "True", "True"),
+]
 
 # A list of Python examples to run in order to ensure that they remain
 # runnable over time.  Each tuple in the list contains
diff -Naur ns-3.23/src/energy/test/li-ion-energy-source-test.cc ns-3.24/src/energy/test/li-ion-energy-source-test.cc
--- ns-3.23/src/energy/test/li-ion-energy-source-test.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/energy/test/li-ion-energy-source-test.cc	2015-09-15 11:18:44.000000000 -0700
@@ -37,7 +37,6 @@
 
   void DoRun (void);
 
-  double m_simTime;
   Ptr<Node> m_node;
 };
 
diff -Naur ns-3.23/src/energy/test/rv-battery-model-test.cc ns-3.24/src/energy/test/rv-battery-model-test.cc
--- ns-3.23/src/energy/test/rv-battery-model-test.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/energy/test/rv-battery-model-test.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,892 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2010 Network Security Lab, University of Washington, Seattle.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: He Wu <mdzz@u.washington.edu>
- */
-
-#include "ns3/rv-battery-model.h"
-#include "ns3/wifi-radio-energy-model.h"
-#include "ns3/rv-battery-model-helper.h"
-#include "ns3/wifi-radio-energy-model-helper.h"
-#include "ns3/energy-source-container.h"
-#include "ns3/device-energy-model-container.h"
-#include "ns3/log.h"
-#include "ns3/test.h"
-#include "ns3/node.h"
-#include "ns3/simulator.h"
-#include "ns3/double.h"
-#include "ns3/config.h"
-#include "ns3/string.h"
-#include "ns3/yans-wifi-helper.h"
-#include "ns3/nqos-wifi-mac-helper.h"
-#include <cmath>
-
-using namespace ns3;
-
-NS_LOG_COMPONENT_DEFINE ("RvBatteryModelTestSuite");
-
-/**
- * Test case of update remaining energy for RvBatteryModel and
- * WifiRadioEnergyModel.
- */
-class BatteryLifetimeTest : public TestCase
-{
-public:
-  BatteryLifetimeTest ();
-  virtual ~BatteryLifetimeTest ();
-
-private:
-  /**
-   * Creates load profiles according to "Battery Lifetime Prediction for Energy-
-   * Aware Computing" paper.
-   */
-  void CreateLoadProfiles (void);
-
-  /**
-   * \returns False if no error occurs.
-   *
-   * Runs test.
-   */
-  void DoRun (void);
-
-  /**
-   * \param load Load value, in Amperes (A).
-   * \param expLifetime Expected lifetime.
-   * \return False if no error occurs.
-   *
-   * Runs simulation with constant load and checks the battery lifetime with
-   * known results.
-   */
-  bool ConstantLoadTest (double load, Time expLifetime);
-
-  /**
-   * \param loads Load profile.
-   * \param timeStamps Time stamps.
-   * \param expLifetime Expected lifetime.
-   * \returns False if no error occurs.
-   *
-   * Runs simulation with variable load and checks the battery lifetime with
-   * known results.
-   */
-  bool VariableLoadTest (std::vector<double> loads,
-                         std::vector<Time> timeStamps,
-                         Time expLifetime);
-
-private:
-  typedef struct LoadProfile
-  {
-    std::vector<double> loads;
-    std::vector<Time> timeStamps;
-    Time itsyLifetime;
-    Time dualFoilLifeTime;
-  } LoadProfile;
-
-private:
-  std::vector<LoadProfile> m_loadProfiles;
-  double m_alpha;
-  double m_beta;
-};
-
-BatteryLifetimeTest::BatteryLifetimeTest ()
-  : TestCase ("RV battery model battery lifetime test case.")
-{
-  // Itsy battery
-  m_alpha = 35220;
-  m_beta = 0.637;
-}
-
-BatteryLifetimeTest::~BatteryLifetimeTest ()
-{
-}
-
-void
-BatteryLifetimeTest::CreateLoadProfiles (void)
-{
-  // create set of load profiles
-  LoadProfile profile;
-
-  std::vector<double> loads;
-  std::vector<Time> timeStamps;
-
-  // C1
-  loads.push_back (0.628);
-  loads.push_back (0);
-  loads.push_back (0.628);
-
-  timeStamps.push_back (Seconds (0));
-  timeStamps.push_back (Seconds (19.5 * 60));
-  timeStamps.push_back (Seconds (26.0 * 60));
-
-  profile.loads = loads;
-  profile.timeStamps = timeStamps;
-  profile.itsyLifetime = Seconds (55.0 * 60);     // 55.0 minutes
-  profile.dualFoilLifeTime = Seconds (36.2 * 60); // 36.2 minutes
-
-  m_loadProfiles.push_back (profile);
-
-  loads.clear ();
-  timeStamps.clear ();
-
-  // C2
-  loads.push_back (0.4947);
-  loads.push_back (0);
-  loads.push_back (0.4947);
-
-  timeStamps.push_back (Seconds (0));
-  timeStamps.push_back (Seconds (31.0 * 60));
-  timeStamps.push_back (Seconds (41.3 * 60));
-
-  profile.loads = loads;
-  profile.timeStamps = timeStamps;
-  profile.itsyLifetime = Seconds (73.9 * 60);     // 73.9 minutes
-  profile.dualFoilLifeTime = Seconds (55.8 * 60); // 55.8 minutes
-
-  m_loadProfiles.push_back (profile);
-
-  loads.clear ();
-  timeStamps.clear ();
-
-  // C3
-  loads.push_back (0.4256);
-  loads.push_back (0);
-  loads.push_back (0.4256);
-
-  timeStamps.push_back (Seconds (0));
-  timeStamps.push_back (Seconds (41.0 * 60));
-  timeStamps.push_back (Seconds (54.6 * 60));
-
-  profile.loads = loads;
-  profile.timeStamps = timeStamps;
-  profile.itsyLifetime = Seconds (88.8 * 60);     // 88.8 minutes
-  profile.dualFoilLifeTime = Seconds (71.8 * 60); // 71.8 minutes
-
-  m_loadProfiles.push_back (profile);
-
-  loads.clear ();
-  timeStamps.clear ();
-
-  // C4
-  loads.push_back (0.2923);
-  loads.push_back (0);
-  loads.push_back (0.2923);
-
-  timeStamps.push_back (Seconds (0));
-  timeStamps.push_back (Seconds (74.6 * 60));
-  timeStamps.push_back (Seconds (99.5 * 60));
-
-  profile.loads = loads;
-  profile.timeStamps = timeStamps;
-  profile.itsyLifetime = Seconds (137.8 * 60);      // 137.8 minutes
-  profile.dualFoilLifeTime = Seconds (124.9 * 60);  // 124.9 minutes
-
-  m_loadProfiles.push_back (profile);
-
-  loads.clear ();
-  timeStamps.clear ();
-
-  // C5
-  loads.push_back (0.2227);
-  loads.push_back (0);
-  loads.push_back (0.2227);
-
-  timeStamps.push_back (Seconds (0));
-  timeStamps.push_back (Seconds (105.7 * 60));
-  timeStamps.push_back (Seconds (140.9 * 60));
-
-  profile.loads = loads;
-  profile.timeStamps = timeStamps;
-  profile.itsyLifetime = Seconds (185.8 * 60);      // 185.8 minutes
-  profile.dualFoilLifeTime = Seconds (176.7 * 60);  // 176.7 minutes
-
-  m_loadProfiles.push_back (profile);
-
-  loads.clear ();
-  timeStamps.clear ();
-
-  // C6
-  loads.push_back (0.628);
-  loads.push_back (0);
-  loads.push_back (0.628);
-
-  timeStamps.push_back (Seconds (0));
-  timeStamps.push_back (Seconds (19.5 * 60));
-  timeStamps.push_back (Seconds (29.9 * 60));
-
-  profile.loads = loads;
-  profile.timeStamps = timeStamps;
-  profile.itsyLifetime = Seconds (58.9 * 60);     // 58.9 minutes
-  profile.dualFoilLifeTime = Seconds (41.0 * 60); // 41.0 minutes
-
-  m_loadProfiles.push_back (profile);
-
-  loads.clear ();
-  timeStamps.clear ();
-
-  // C7
-  loads.push_back (0.628);
-  loads.push_back (0);
-  loads.push_back (0.628);
-
-  timeStamps.push_back (Seconds (0));
-  timeStamps.push_back (Seconds (19.5 * 60));
-  timeStamps.push_back (Seconds (22.1 * 60));
-
-  profile.loads = loads;
-  profile.timeStamps = timeStamps;
-  profile.itsyLifetime = Seconds (51.1 * 60);     // 51.1 minutes
-  profile.dualFoilLifeTime = Seconds (30.8 * 60); // 30.8 minutes
-
-  m_loadProfiles.push_back (profile);
-
-  loads.clear ();
-  timeStamps.clear ();
-
-  // C8
-  loads.push_back (0.628);
-  loads.push_back (0);
-  loads.push_back (0.628);
-
-  timeStamps.push_back (Seconds (0));
-  timeStamps.push_back (Seconds (23.4 * 60));
-  timeStamps.push_back (Seconds (29.9 * 60));
-
-  profile.loads = loads;
-  profile.timeStamps = timeStamps;
-  profile.itsyLifetime = Seconds (55.0 * 60);     // 55.0 minutes
-  profile.dualFoilLifeTime = Seconds (37.4 * 60); // 37.4 minutes
-
-  m_loadProfiles.push_back (profile);
-
-  loads.clear ();
-  timeStamps.clear ();
-
-  // C9
-  loads.push_back (0.628);
-  loads.push_back (0);
-  loads.push_back (0.628);
-
-  timeStamps.push_back (Seconds (0));
-  timeStamps.push_back (Seconds (15.6 * 60));
-  timeStamps.push_back (Seconds (22.1 * 60));
-
-  profile.loads = loads;
-  profile.timeStamps = timeStamps;
-  profile.itsyLifetime = Seconds (55.0 * 60);     // 55.0 minutes
-  profile.dualFoilLifeTime = Seconds (35.2 * 60); // 35.2 minutes
-
-  m_loadProfiles.push_back (profile);
-
-  loads.clear ();
-  timeStamps.clear ();
-
-  // C10
-  loads.push_back (0.300);
-  loads.push_back (0.628);
-  loads.push_back (0.4947);
-  loads.push_back (0.2523);
-  loads.push_back (0.2341);
-  loads.push_back (0.1379);
-  loads.push_back (0.1139);
-  loads.push_back (0.2656);
-
-  timeStamps.push_back (Seconds (0));
-  timeStamps.push_back (Seconds (0.5 * 60));
-  timeStamps.push_back (Seconds (5.5 * 60));
-  timeStamps.push_back (Seconds (10.5 * 60));
-  timeStamps.push_back (Seconds (35.5 * 60));
-  timeStamps.push_back (Seconds (60.5 * 60));
-  timeStamps.push_back (Seconds (85.5 * 60));
-  timeStamps.push_back (Seconds (110.5 * 60));
-
-  profile.loads = loads;
-  profile.timeStamps = timeStamps;
-  profile.itsyLifetime = Seconds (144.3 * 60);      // 144.3 minutes
-  profile.dualFoilLifeTime = Seconds (132.6 * 60);  // 132.6 minutes
-
-  m_loadProfiles.push_back (profile);
-
-  loads.clear ();
-  timeStamps.clear ();
-
-  // C11
-  loads.push_back (0.300);
-  loads.push_back (0.1139);
-  loads.push_back (0.1379);
-  loads.push_back (0.2341);
-  loads.push_back (0.2523);
-  loads.push_back (0.4947);
-  loads.push_back (0.628);
-  loads.push_back (0.2656);
-
-  timeStamps.push_back (Seconds (0));
-  timeStamps.push_back (Seconds (0.5 * 60));
-  timeStamps.push_back (Seconds (25.5 * 60));
-  timeStamps.push_back (Seconds (50.5 * 60));
-  timeStamps.push_back (Seconds (75.5 * 60));
-  timeStamps.push_back (Seconds (100.5 * 60));
-  timeStamps.push_back (Seconds (105.5 * 60));
-  timeStamps.push_back (Seconds (110.5 * 60));
-
-  profile.loads = loads;
-  profile.timeStamps = timeStamps;
-  profile.itsyLifetime = Seconds (144.3 * 60);      // 144.3 minutes
-  profile.dualFoilLifeTime = Seconds (107.4 * 60);  // 107.4 minutes
-
-  m_loadProfiles.push_back (profile);
-
-  loads.clear ();
-  timeStamps.clear ();
-
-  // C12
-  loads.push_back (0.300);
-  loads.push_back (0.1139);
-  loads.push_back (0.1379);
-  loads.push_back (0.2341);
-  loads.push_back (0.2523);
-  loads.push_back (0.4947);
-  loads.push_back (0.0);
-  loads.push_back (0.300);
-  loads.push_back (0.628);
-  loads.push_back (0.2656);
-
-  timeStamps.push_back (Seconds (0));
-  timeStamps.push_back (Seconds (0.5 * 60));
-  timeStamps.push_back (Seconds (25.5 * 60));
-  timeStamps.push_back (Seconds (50.5 * 60));
-  timeStamps.push_back (Seconds (75.5 * 60));
-  timeStamps.push_back (Seconds (100.5 * 60));
-  timeStamps.push_back (Seconds (105.5 * 60));
-  timeStamps.push_back (Seconds (130.5 * 60));
-  timeStamps.push_back (Seconds (131.0 * 60));
-  timeStamps.push_back (Seconds (136.0 * 60));
-
-  profile.loads = loads;
-  profile.timeStamps = timeStamps;
-  profile.itsyLifetime = Seconds (169.3 * 60);      // 169.3 minutes
-  profile.dualFoilLifeTime = Seconds (155.4 * 60);  // 155.4 minutes
-
-  m_loadProfiles.push_back (profile);
-
-  loads.clear ();
-  timeStamps.clear ();
-
-  // C13
-  loads.push_back (0.300);
-  timeStamps.push_back (Seconds (0));
-
-  for (int i = 0; i < 5; i++)
-    {
-      loads.push_back (0.628);
-      loads.push_back (0.4947);
-      loads.push_back (0.2523);
-      loads.push_back (0.2341);
-      loads.push_back (0.1379);
-      loads.push_back (0.1139);
-
-      timeStamps.push_back (Seconds ((0.5 + i * 22.5) * 60));
-      timeStamps.push_back (Seconds ((1.5 + i * 22.5) * 60));
-      timeStamps.push_back (Seconds ((2.5 + i * 22.5) * 60));
-      timeStamps.push_back (Seconds ((7.5 + i * 22.5) * 60));
-      timeStamps.push_back (Seconds ((12.5 + i * 22.5) * 60));
-      timeStamps.push_back (Seconds ((17.5 + i * 22.5) * 60));
-    }
-
-  loads.push_back (0.2656);
-  timeStamps.push_back (Seconds (110.5 * 60));
-
-  profile.loads = loads;
-  profile.timeStamps = timeStamps;
-  profile.itsyLifetime = Seconds (144.3 * 60);      // 144.3 minutes
-  profile.dualFoilLifeTime = Seconds (131.7 * 60);  // 131.7 minutes
-
-  m_loadProfiles.push_back (profile);
-
-  loads.clear ();
-  timeStamps.clear ();
-
-  // C14, time stamp calculation in paper is off, using our own estimated value
-  loads.push_back (0.300);
-  timeStamps.push_back (Seconds (0));
-
-  for (int i = 0; i < 5; i++)
-    {
-      loads.push_back (0.1139);
-      loads.push_back (0.1379);
-      loads.push_back (0.2341);
-      loads.push_back (0.2523);
-      loads.push_back (0.4947);
-      loads.push_back (0.628);
-
-      timeStamps.push_back (Seconds ((0.5 + i * 22.5) * 60));
-      timeStamps.push_back (Seconds ((5.5 + i * 22.5) * 60));
-      timeStamps.push_back (Seconds ((10.5 + i * 22.5) * 60));
-      timeStamps.push_back (Seconds ((15.5 + i * 22.5) * 60));
-      timeStamps.push_back (Seconds ((20.5 + i * 22.5) * 60));
-      timeStamps.push_back (Seconds ((21.5 + i * 22.5) * 60));
-    }
-
-  loads.push_back (0.2656);
-  timeStamps.push_back (Seconds (112.5 * 60));
-
-  profile.loads = loads;
-  profile.timeStamps = timeStamps;
-  profile.itsyLifetime = Seconds (141.5 * 60);      // 141.5 minutes
-  profile.dualFoilLifeTime = Seconds (126.3 * 60);  // 126.3 minutes
-
-  m_loadProfiles.push_back (profile);
-
-  loads.clear ();
-  timeStamps.clear ();
-
-  // C15
-  loads.push_back (0.2227);
-  loads.push_back (0.2045);
-  loads.push_back (0.1083);
-  loads.push_back (0.0843);
-  loads.push_back (0.2227);
-
-  timeStamps.push_back (Seconds (0));
-  timeStamps.push_back (Seconds (50.0 * 60));
-  timeStamps.push_back (Seconds (100.0 * 60));
-  timeStamps.push_back (Seconds (150.0 * 60));
-  timeStamps.push_back (Seconds (200.0 * 60));
-
-  profile.loads = loads;
-  profile.timeStamps = timeStamps;
-  profile.itsyLifetime = Seconds (211.4 * 60);      // 211.4 minutes
-  profile.dualFoilLifeTime = Seconds (209.2 * 60);  // 209.2 minutes
-
-  m_loadProfiles.push_back (profile);
-
-  loads.clear ();
-  timeStamps.clear ();
-
-  // C16
-  loads.push_back (0.0843);
-  loads.push_back (0.1083);
-  loads.push_back (0.2045);
-  loads.push_back (0.2227);
-  loads.push_back (0.2227);
-
-  timeStamps.push_back (Seconds (0));
-  timeStamps.push_back (Seconds (50.0 * 60));
-  timeStamps.push_back (Seconds (100.0 * 60));
-  timeStamps.push_back (Seconds (150.0 * 60));
-  timeStamps.push_back (Seconds (200.0 * 60));
-
-  profile.loads = loads;
-  profile.timeStamps = timeStamps;
-  profile.itsyLifetime = Seconds (211.4 * 60);      // 211.4 minutes
-  profile.dualFoilLifeTime = Seconds (200.7 * 60);  // 200.7 minutes
-
-  m_loadProfiles.push_back (profile);
-
-  loads.clear ();
-  timeStamps.clear ();
-
-  // C17
-  loads.push_back (0.0843);
-  loads.push_back (0.1083);
-  loads.push_back (0.2045);
-  loads.push_back (0.0);
-  loads.push_back (0.2227);
-  loads.push_back (0.2227);
-
-  timeStamps.push_back (Seconds (0));
-  timeStamps.push_back (Seconds (50.0 * 60));
-  timeStamps.push_back (Seconds (100.0 * 60));
-  timeStamps.push_back (Seconds (150.0 * 60));
-  timeStamps.push_back (Seconds (200.0 * 60));
-  timeStamps.push_back (Seconds (250.0 * 60));
-
-  profile.loads = loads;
-  profile.timeStamps = timeStamps;
-  profile.itsyLifetime = Seconds (261.4 * 60);      // 261.4 minutes
-  profile.dualFoilLifeTime = Seconds (251.2 * 60);  // 251.2 minutes
-
-  m_loadProfiles.push_back (profile);
-
-  loads.clear ();
-  timeStamps.clear ();
-
-  // C18
-  for (int i = 0; i < 10; i++)
-    {
-      loads.push_back (0.0843);
-      loads.push_back (0.1083);
-      loads.push_back (0.2045);
-      loads.push_back (0.2227);
-
-      timeStamps.push_back (Seconds ((0.0 + i * 20.0) * 60));
-      timeStamps.push_back (Seconds ((5.0 + i * 20.0) * 60));
-      timeStamps.push_back (Seconds ((10.0 + i * 20.0) * 60));
-      timeStamps.push_back (Seconds ((15.0 + i * 20.0) * 60));
-    }
-
-  loads.push_back (0.2227);
-  timeStamps.push_back (Seconds (200.0));
-
-  profile.loads = loads;
-  profile.timeStamps = timeStamps;
-  profile.itsyLifetime = Seconds (211.4 * 60);      // 211.4 minutes
-  profile.dualFoilLifeTime = Seconds (204.6 * 60);  // 204.6 minutes
-
-  m_loadProfiles.push_back (profile);
-
-  loads.clear ();
-  timeStamps.clear ();
-
-  // C19
-  for (int i = 0; i < 10; i++)
-    {
-      loads.push_back (0.0755);
-      loads.push_back (0.0949);
-      loads.push_back (0.2045);
-      loads.push_back (0.2227);
-
-      timeStamps.push_back (Seconds ((0.0 + i * 20.0) * 60));
-      timeStamps.push_back (Seconds ((5.0 + i * 20.0) * 60));
-      timeStamps.push_back (Seconds ((10.0 + i * 20.0) * 60));
-      timeStamps.push_back (Seconds ((15.0 + i * 20.0) * 60));
-    }
-
-  loads.push_back (0.2227);
-  timeStamps.push_back (Seconds (200.0));
-
-  profile.loads = loads;
-  profile.timeStamps = timeStamps;
-  profile.itsyLifetime = Seconds (216.4 * 60);      // 216.4 minutes
-  profile.dualFoilLifeTime = Seconds (208.7 * 60);  // 208.7 minutes
-
-  m_loadProfiles.push_back (profile);
-
-  loads.clear ();
-  timeStamps.clear ();
-
-  // C20
-  for (int i = 0; i < 50; i++)
-    {
-      loads.push_back (0.4947);
-      loads.push_back (0.628);
-
-      timeStamps.push_back (Seconds ((0.0 + i * 2.0) * 60));
-      timeStamps.push_back (Seconds ((1.0 + i * 2.0) * 60));
-    }
-
-  profile.loads = loads;
-  profile.timeStamps = timeStamps;
-  profile.itsyLifetime = Seconds (55.3 * 60);       // 55.3 minutes
-  profile.dualFoilLifeTime = Seconds (33.2 * 60);   // 33.2 minutes
-
-  m_loadProfiles.push_back (profile);
-
-  loads.clear ();
-  timeStamps.clear ();
-
-  // C21
-  for (int i = 0; i < 50; i++)
-    {
-      loads.push_back (0.4947);
-      loads.push_back (0.628);
-      loads.push_back (0.0576);
-
-      timeStamps.push_back (Seconds ((0.0 + i * 3.0) * 60));
-      timeStamps.push_back (Seconds ((1.0 + i * 3.0) * 60));
-      timeStamps.push_back (Seconds ((2.0 + i * 3.0) * 60));
-    }
-
-  profile.loads = loads;
-  profile.timeStamps = timeStamps;
-  profile.itsyLifetime = Seconds (79.6 * 60);       // 79.6 minutes
-  profile.dualFoilLifeTime = Seconds (55.9 * 60);   // 55.9 minutes
-
-  m_loadProfiles.push_back (profile);
-
-  loads.clear ();
-  timeStamps.clear ();
-
-  // C22
-  for (int i = 0; i < 150; i++)
-    {
-      loads.push_back (0.005 + 0.005 * i);
-      timeStamps.push_back (Seconds ((0.0 + i * 1.0) * 60));
-    }
-
-  profile.loads = loads;
-  profile.timeStamps = timeStamps;
-  profile.itsyLifetime = Seconds (112.2 * 60);      // 112.2 minutes
-  profile.dualFoilLifeTime = Seconds (94.5 * 60);   // 94.5 minutes
-
-  m_loadProfiles.push_back (profile);
-
-  loads.clear ();
-  timeStamps.clear ();
-}
-
-void
-BatteryLifetimeTest::DoRun (void)
-{
-  NS_LOG_DEBUG ("Constant load run.");
-
-  // 640mA
-  NS_TEST_ASSERT_MSG_EQ (ConstantLoadTest (0.640, Seconds (2844.0)), false,  "Problems with constant load test (640mA).");
-  // 320mA
-  NS_TEST_ASSERT_MSG_EQ (ConstantLoadTest (0.320, Seconds (6146.0)), false,  "Problems with constant load test (320mA).");
-  // 128mA
-  NS_TEST_ASSERT_MSG_EQ (ConstantLoadTest (0.128, Seconds (16052.0)), false,  "Problems with constant load test (128mA).");
-  // 64mA
-  NS_TEST_ASSERT_MSG_EQ (ConstantLoadTest (0.064, Seconds (32561.0)), false,  "Problems with constant load test (64mA).");
-  // 32mA
-  NS_TEST_ASSERT_MSG_EQ (ConstantLoadTest (0.032, Seconds (65580.0)), false,  "Problems with constant load test (32).");
-
-  // create load profiles for variable load test
-  CreateLoadProfiles ();
-
-  // variable load with Itsy battery
-  NS_LOG_DEBUG ("\n\nItsy");
-  m_alpha = 35220;
-  m_beta = 0.637;
-  for (uint32_t i = 0; i < m_loadProfiles.size (); i++)
-    {
-      NS_LOG_DEBUG ("========");
-      NS_LOG_DEBUG ("Variable load profile C" << i + 1);
-      if (VariableLoadTest (m_loadProfiles[i].loads,
-                            m_loadProfiles[i].timeStamps,
-                            m_loadProfiles[i].itsyLifetime))
-        {
-          return;
-        }
-    }
-
-  // variable load with DUALFOIL battery
-  NS_LOG_DEBUG ("\n\nDUALFOIL");
-  m_alpha = 40027;
-  m_beta = 0.276;
-  for (uint32_t i = 0; i < m_loadProfiles.size (); i++)
-    {
-      NS_LOG_DEBUG ("========");
-      NS_LOG_DEBUG ("Variable load profile C" << i + 1);
-      if (VariableLoadTest (m_loadProfiles[i].loads,
-                            m_loadProfiles[i].timeStamps,
-                            m_loadProfiles[i].dualFoilLifeTime))
-        {
-          return;
-        }
-    }
-}
-
-bool
-BatteryLifetimeTest::ConstantLoadTest (double load, Time expLifetime)
-{
-  // create single node
-  NodeContainer c;
-  c.Create (1);
-
-  std::string phyMode ("DsssRate1Mbps");
-
-  // disable fragmentation for frames below 2200 bytes
-  Config::SetDefault ("ns3::WifiRemoteStationManager::FragmentationThreshold",
-                      StringValue ("2200"));
-  // turn off RTS/CTS for frames below 2200 bytes
-  Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold",
-                      StringValue ("2200"));
-  // Fix non-unicast data rate to be the same as that of unicast
-  Config::SetDefault ("ns3::WifiRemoteStationManager::NonUnicastMode",
-                      StringValue (phyMode));
-
-  // install YansWifiPhy
-  WifiHelper wifi;
-  wifi.SetStandard (WIFI_PHY_STANDARD_80211b);
-
-  YansWifiPhyHelper wifiPhy =  YansWifiPhyHelper::Default ();
-  /*
-   * This is one parameter that matters when using FixedRssLossModel, set it to
-   * zero; otherwise, gain will be added.
-   */
-  wifiPhy.Set ("RxGain", DoubleValue (0));
-  // ns-3 supports RadioTap and Prism tracing extensions for 802.11b
-  wifiPhy.SetPcapDataLinkType (YansWifiPhyHelper::DLT_IEEE802_11_RADIO);
-
-  YansWifiChannelHelper wifiChannel;
-  wifiChannel.SetPropagationDelay ("ns3::ConstantSpeedPropagationDelayModel");
-  wifiPhy.SetChannel (wifiChannel.Create ());
-
-  // Add a non-QoS upper MAC, and disable rate control
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
-  wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
-                                "DataMode", StringValue (phyMode),
-                                "ControlMode", StringValue (phyMode));
-  // Set it to ad-hoc mode
-  wifiMac.SetType ("ns3::AdhocWifiMac");
-  NetDeviceContainer devices = wifi.Install (wifiPhy, wifiMac, c);
-
-  // Create and install battery model and device models
-  // RV battery model
-  RvBatteryModelHelper rvModelHelper;
-  // Set alpha & beta values
-  rvModelHelper.Set ("RvBatteryModelAlphaValue", DoubleValue (m_alpha));
-  rvModelHelper.Set ("RvBatteryModelBetaValue", DoubleValue (m_beta));
-  rvModelHelper.Set ("RvBatteryModelLowBatteryThreshold", DoubleValue (0.0));
-  // install source
-  EnergySourceContainer sources = rvModelHelper.Install (c);
-  // device energy model
-  WifiRadioEnergyModelHelper radioEnergyHelper;
-  // set VariableLoadTestIDLE current, which will be the constant load
-  radioEnergyHelper.Set ("IdleCurrentA", DoubleValue (load));
-  // install on node
-  DeviceEnergyModelContainer deviceModels = radioEnergyHelper.Install (devices, sources);
-
-  // run simulation
-  Simulator::Stop (Seconds (70000.0));
-  Simulator::Run ();
-
-  Time actualLifetime;
-  Ptr<RvBatteryModel> srcPtr = DynamicCast<RvBatteryModel> (sources.Get (0));
-  actualLifetime = srcPtr->GetLifetime ();
-
-  NS_LOG_DEBUG ("Expected lifetime = " << expLifetime.GetSeconds () << "s");
-  NS_LOG_DEBUG ("Actual lifetime = " << actualLifetime.GetSeconds () << "s");
-
-  NS_TEST_ASSERT_MSG_EQ_RETURNS_BOOL (actualLifetime, expLifetime, "Incorrect lifetime!");
-  /*
-  NS_TEST_ASSERT_MSG_EQ_TOL_RETURNS_BOOL (actualLifetime.GetSeconds () / 60,
-                                         expLifetime.GetSeconds () / 60, 0.1,
-                                         "Incorrect lifetime!");
-   */
-
-  Simulator::Destroy ();
-
-  return false; // error free
-}
-
-bool
-BatteryLifetimeTest::VariableLoadTest (std::vector<double> loads,
-                                       std::vector<Time> timeStamps,
-                                       Time expLifetime)
-{
-  NS_ASSERT (loads.size () == timeStamps.size ());
-
-  // create single node
-  NodeContainer c;
-  c.Create (1);
-
-  std::string phyMode ("DsssRate1Mbps");
-
-  // disable fragmentation for frames below 2200 bytes
-  Config::SetDefault ("ns3::WifiRemoteStationManager::FragmentationThreshold",
-                      StringValue ("2200"));
-  // turn off RTS/CTS for frames below 2200 bytes
-  Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold",
-                      StringValue ("2200"));
-  // Fix non-unicast data rate to be the same as that of unicast
-  Config::SetDefault ("ns3::WifiRemoteStationManager::NonUnicastMode",
-                      StringValue (phyMode));
-
-  // install YansWifiPhy
-  WifiHelper wifi;
-  wifi.SetStandard (WIFI_PHY_STANDARD_80211b);
-
-  YansWifiPhyHelper wifiPhy =  YansWifiPhyHelper::Default ();
-  /*
-   * This is one parameter that matters when using FixedRssLossModel, set it to
-   * zero; otherwise, gain will be added.
-   */
-  wifiPhy.Set ("RxGain", DoubleValue (0));
-  // ns-3 supports RadioTap and Prism tracing extensions for 802.11b
-  wifiPhy.SetPcapDataLinkType (YansWifiPhyHelper::DLT_IEEE802_11_RADIO);
-
-  YansWifiChannelHelper wifiChannel;
-  wifiChannel.SetPropagationDelay ("ns3::ConstantSpeedPropagationDelayModel");
-  wifiPhy.SetChannel (wifiChannel.Create ());
-
-  // Add a non-QoS upper MAC, and disable rate control
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
-  wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
-                                "DataMode", StringValue (phyMode),
-                                "ControlMode", StringValue (phyMode));
-  // Set it to ad-hoc mode
-  wifiMac.SetType ("ns3::AdhocWifiMac");
-  NetDeviceContainer devices = wifi.Install (wifiPhy, wifiMac, c);
-
-  // Create and install battery model and device models
-  // RV battery model
-  RvBatteryModelHelper rvModelHelper;
-  // Set alpha & beta values
-  rvModelHelper.Set ("RvBatteryModelAlphaValue", DoubleValue (m_alpha));
-  rvModelHelper.Set ("RvBatteryModelBetaValue", DoubleValue (m_beta));
-  rvModelHelper.Set ("RvBatteryModelLowBatteryThreshold", DoubleValue (0.0));
-  // install source
-  EnergySourceContainer sources = rvModelHelper.Install (c);
-  // device energy model
-  WifiRadioEnergyModelHelper radioEnergyHelper;
-  // set VariableLoadTestIDLE current, which will be the constant load
-  radioEnergyHelper.Set ("IdleCurrentA", DoubleValue (loads[0]));
-  // install on node
-  DeviceEnergyModelContainer deviceModels = radioEnergyHelper.Install (devices, sources);
-
-
-  Ptr<WifiRadioEnergyModel> wifiDevicePtr = DynamicCast<WifiRadioEnergyModel> (deviceModels.Get (0));
-  // schedule load change events
-  for (uint32_t i = 1; i < loads.size (); i++)
-    {
-      Simulator::Schedule (timeStamps[i], &WifiRadioEnergyModel::SetIdleCurrentA,
-                           wifiDevicePtr, loads[i]);
-    }
-
-  // run simulation
-  Simulator::Stop (Seconds (70000.0));
-  Simulator::Run ();
-
-  Time actualLifetime;
-  Ptr<RvBatteryModel> srcPtr = DynamicCast<RvBatteryModel> (sources.Get (0));
-  actualLifetime = srcPtr->GetLifetime ();
-
-  NS_LOG_DEBUG ("Expected lifetime = " << expLifetime.GetSeconds () << "s");
-  NS_LOG_DEBUG ("Actual lifetime = " << actualLifetime.GetSeconds () << "s");
-  NS_LOG_DEBUG ("Difference = " << expLifetime.GetSeconds () - actualLifetime.GetSeconds () << "s");
-
-  //NS_TEST_ASSERT_MSG_EQ_RETURNS_BOOL (actualLifetime, expLifetime, "Incorrect lifetime!");
-  NS_TEST_ASSERT_MSG_EQ_TOL_RETURNS_BOOL (actualLifetime.GetSeconds (), expLifetime.GetSeconds (),
-                                          120, // error tolerance = 120s
-                                          "Incorrect lifetime!");
-
-  Simulator::Destroy ();
-
-  return false;   // error free
-}
-
-// -------------------------------------------------------------------------- //
-
-/**
- * Unit test suite for energy model. Although the test suite involves 2 modules
- * it is still considered a unit test. Because a DeviceEnergyModel cannot live
- * without an EnergySource.
- */
-class RvBatteryModelTestSuite : public TestSuite
-{
-public:
-  RvBatteryModelTestSuite ();
-};
-
-RvBatteryModelTestSuite::RvBatteryModelTestSuite ()
-  : TestSuite ("rv-battery-model", SYSTEM)
-{
-  AddTestCase (new BatteryLifetimeTest, TestCase::QUICK);
-}
-
-// create an instance of the test suite
-static RvBatteryModelTestSuite g_rvBatteryModelTestSuite;
diff -Naur ns-3.23/src/energy/wscript ns-3.24/src/energy/wscript
--- ns-3.23/src/energy/wscript	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/energy/wscript	2015-09-15 11:18:44.000000000 -0700
@@ -1,9 +1,8 @@
 ## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
 
 def build(bld):
-    obj = bld.create_ns3_module('energy', ['wifi'])
+    obj = bld.create_ns3_module('energy', ['network'])
     obj.source = [
-        'model/wifi-radio-energy-model.cc',
         'model/energy-source.cc',
         'model/basic-energy-source.cc',
         'model/li-ion-energy-source.cc',
@@ -13,11 +12,9 @@
         'model/simple-device-energy-model.cc',
         'model/energy-harvester.cc',
         'model/basic-energy-harvester.cc',
-        'model/wifi-tx-current-model.cc',
         'helper/energy-source-container.cc',
         'helper/energy-model-helper.cc',
         'helper/basic-energy-source-helper.cc',
-        'helper/wifi-radio-energy-model-helper.cc',
         'helper/rv-battery-model-helper.cc',
         'helper/energy-harvester-container.cc',
         'helper/energy-harvester-helper.cc',
@@ -26,8 +23,6 @@
 
     obj_test = bld.create_ns3_module_test_library('energy')
     obj_test.source = [
-        'test/basic-energy-model-test.cc',
-        'test/rv-battery-model-test.cc',
         'test/li-ion-energy-source-test.cc',
         'test/basic-energy-harvester-test.cc',
         ]
@@ -35,7 +30,6 @@
     headers = bld(features='ns3header')
     headers.module = 'energy'
     headers.source = [
-        'model/wifi-radio-energy-model.h',
         'model/energy-source.h',
         'model/basic-energy-source.h',
         'model/li-ion-energy-source.h',
@@ -45,11 +39,9 @@
         'model/simple-device-energy-model.h',
         'model/energy-harvester.h',
         'model/basic-energy-harvester.h',
-        'model/wifi-tx-current-model.h',
         'helper/energy-source-container.h',
         'helper/energy-model-helper.h',
         'helper/basic-energy-source-helper.h',
-        'helper/wifi-radio-energy-model-helper.h',
         'helper/rv-battery-model-helper.h',
         'helper/energy-harvester-container.h',
         'helper/energy-harvester-helper.h',
diff -Naur ns-3.23/src/fd-net-device/bindings/modulegen__gcc_ILP32.py ns-3.24/src/fd-net-device/bindings/modulegen__gcc_ILP32.py
--- ns-3.23/src/fd-net-device/bindings/modulegen__gcc_ILP32.py	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/fd-net-device/bindings/modulegen__gcc_ILP32.py	2015-09-15 11:18:44.000000000 -0700
@@ -105,7 +105,7 @@
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
+    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SSL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
@@ -274,6 +274,12 @@
     nested_module = module.add_cpp_namespace('Hash')
     register_types_ns3_Hash(nested_module)
     
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -309,6 +315,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AsciiTraceHelper_methods(root_module, root_module['ns3::AsciiTraceHelper'])
@@ -662,17 +675,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -694,11 +707,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -708,16 +716,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -955,14 +953,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -1023,11 +1025,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CriticalSection_methods(root_module, cls):
@@ -2051,7 +2048,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -2069,10 +2066,10 @@
     cls.add_method('Close', 
                    'void', 
                    [])
-    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
+    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t & packets, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
     cls.add_method('Diff', 
                    'bool', 
-                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
+                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t &', 'packets'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
                    is_static=True)
     ## pcap-file.h (module 'network'): bool ns3::PcapFile::Eof() const [member function]
     cls.add_method('Eof', 
@@ -2136,10 +2133,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header const & header, ns3::Ptr<const ns3::Packet> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file.h (module 'network'): ns3::PcapFile::SNAPLEN_DEFAULT [variable]
     cls.add_static_attribute('SNAPLEN_DEFAULT', 'uint32_t const', is_const=True)
     ## pcap-file.h (module 'network'): ns3::PcapFile::ZONE_DEFAULT [variable]
@@ -2286,10 +2283,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -2921,10 +2918,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header const & header, ns3::Ptr<const ns3::Packet> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('ns3::Time', 't'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('ns3::Time', 't'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, uint8_t const * buffer, uint32_t length) [member function]
     cls.add_method('Write', 
                    'void', 
@@ -3489,11 +3486,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -4807,6 +4814,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -4819,6 +4827,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.23/src/fd-net-device/bindings/modulegen__gcc_LP64.py ns-3.24/src/fd-net-device/bindings/modulegen__gcc_LP64.py
--- ns-3.23/src/fd-net-device/bindings/modulegen__gcc_LP64.py	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/fd-net-device/bindings/modulegen__gcc_LP64.py	2015-09-15 11:18:44.000000000 -0700
@@ -105,7 +105,7 @@
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
+    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SSL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
@@ -274,6 +274,12 @@
     nested_module = module.add_cpp_namespace('Hash')
     register_types_ns3_Hash(nested_module)
     
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -309,6 +315,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AsciiTraceHelper_methods(root_module, root_module['ns3::AsciiTraceHelper'])
@@ -662,17 +675,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -694,11 +707,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -708,16 +716,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -955,14 +953,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -1023,11 +1025,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CriticalSection_methods(root_module, cls):
@@ -2051,7 +2048,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -2069,10 +2066,10 @@
     cls.add_method('Close', 
                    'void', 
                    [])
-    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
+    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t & packets, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
     cls.add_method('Diff', 
                    'bool', 
-                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
+                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t &', 'packets'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
                    is_static=True)
     ## pcap-file.h (module 'network'): bool ns3::PcapFile::Eof() const [member function]
     cls.add_method('Eof', 
@@ -2136,10 +2133,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header const & header, ns3::Ptr<const ns3::Packet> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file.h (module 'network'): ns3::PcapFile::SNAPLEN_DEFAULT [variable]
     cls.add_static_attribute('SNAPLEN_DEFAULT', 'uint32_t const', is_const=True)
     ## pcap-file.h (module 'network'): ns3::PcapFile::ZONE_DEFAULT [variable]
@@ -2286,10 +2283,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -2921,10 +2918,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header const & header, ns3::Ptr<const ns3::Packet> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('ns3::Time', 't'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('ns3::Time', 't'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, uint8_t const * buffer, uint32_t length) [member function]
     cls.add_method('Write', 
                    'void', 
@@ -3489,11 +3486,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -4807,6 +4814,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -4819,6 +4827,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.23/src/fd-net-device/examples/dummy-network.cc ns-3.24/src/fd-net-device/examples/dummy-network.cc
--- ns-3.23/src/fd-net-device/examples/dummy-network.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/fd-net-device/examples/dummy-network.cc	2015-09-15 11:18:44.000000000 -0700
@@ -69,7 +69,7 @@
   app->SetStartTime (Seconds (0.0));
   app->SetStopTime (Seconds (4.0));
 
-  fd.EnablePcapAll ("dummy-network", false);
+  fd.EnablePcapAll ("dummy-network", true);
 
   Simulator::Stop (Seconds (5.));
   Simulator::Run ();
diff -Naur ns-3.23/src/fd-net-device/helper/creator-utils.cc ns-3.24/src/fd-net-device/helper/creator-utils.cc
--- ns-3.23/src/fd-net-device/helper/creator-utils.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/fd-net-device/helper/creator-utils.cc	2015-09-15 11:18:44.000000000 -0700
@@ -38,6 +38,7 @@
 
 namespace ns3 {
 
+/// Flag to enable / disable verbose log mode
 int gVerbose = 0;
 
 /**
diff -Naur ns-3.23/src/fd-net-device/helper/creator-utils.h ns-3.24/src/fd-net-device/helper/creator-utils.h
--- ns-3.23/src/fd-net-device/helper/creator-utils.h	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/fd-net-device/helper/creator-utils.h	2015-09-15 11:18:44.000000000 -0700
@@ -54,6 +54,7 @@
     }
 
 /**
+ * \ingroup fd-net-device
  * \brief Send the file descriptor back to the code that invoked the creation.
  *
  * \param path The socket address information from the Unix socket we use
diff -Naur ns-3.23/src/fd-net-device/helper/emu-fd-net-device-helper.cc ns-3.24/src/fd-net-device/helper/emu-fd-net-device-helper.cc
--- ns-3.23/src/fd-net-device/helper/emu-fd-net-device-helper.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/fd-net-device/helper/emu-fd-net-device-helper.cc	2015-09-15 11:18:44.000000000 -0700
@@ -339,7 +339,7 @@
       //
       // First, we're going to allocate a buffer on the stack to receive our
       // data array (that contains the socket).  Sometimes you'll see this called
-      // an "ancillary element" but the msghdr uses the control message termimology
+      // an "ancillary element" but the msghdr uses the control message terminology
       // so we call it "control."
       //
       size_t msg_size = sizeof(int);
@@ -350,7 +350,7 @@
       // passed to recvmsg (which we will use to receive our ancillary data).
       // This structure uses terminology corresponding to control messages, so
       // you'll see msg_control, which is the pointer to the ancillary data and
-      // controllen which is the size of the ancillary data array.
+      // controller which is the size of the ancillary data array.
       //
       // So, initialize the message header that describes the ancillary/control
       // data we expect to receive and point it to buffer.
diff -Naur ns-3.23/src/fd-net-device/helper/emu-fd-net-device-helper.h ns-3.24/src/fd-net-device/helper/emu-fd-net-device-helper.h
--- ns-3.23/src/fd-net-device/helper/emu-fd-net-device-helper.h	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/fd-net-device/helper/emu-fd-net-device-helper.h	2015-09-15 11:18:44.000000000 -0700
@@ -32,6 +32,7 @@
 namespace ns3 {
 
 /**
+ * \ingroup fd-net-device
  * \brief build a set of FdNetDevice objects attached to a physical network
  * interface
  *
@@ -63,6 +64,13 @@
 
 protected:
 
+  /**
+   * This method creates an ns3::FdNetDevice attached to a physical network
+   * interface
+   *
+   * \param node The node to install the device in
+   * \returns A container holding the added net device.
+   */
   Ptr<NetDevice> InstallPriv (Ptr<Node> node) const;
 
   /**
@@ -73,6 +81,7 @@
   /**
    * Call out to a separate process running as suid root in order to get a raw
    * socket.  We do this to avoid having the entire simulation running as root.
+   * \return the rawSocket number
    */
   virtual int CreateFileDescriptor (void) const;
 
diff -Naur ns-3.23/src/fd-net-device/helper/fd-net-device-helper.h ns-3.24/src/fd-net-device/helper/fd-net-device-helper.h
--- ns-3.23/src/fd-net-device/helper/fd-net-device-helper.h	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/fd-net-device/helper/fd-net-device-helper.h	2015-09-15 11:18:44.000000000 -0700
@@ -34,6 +34,7 @@
 namespace ns3 {
 
 /**
+ * \ingroup fd-net-device
  * \brief build a set of FdNetDevice objects
  * Normally we eschew multiple inheritance, however, the classes
  * PcapUserHelperForDevice and AsciiTraceUserHelperForDevice are
@@ -91,6 +92,12 @@
 
 protected:
 
+  /**
+   * This method creates an ns3::FdNetDevice and associates it to a node
+   *
+   * \param node The node to install the device in
+   * \returns A container holding the added net device.
+   */
   virtual Ptr<NetDevice> InstallPriv (Ptr<Node> node) const;
 
 private:
@@ -116,13 +123,14 @@
    * \param stream The output stream object to use when logging ascii traces.
    * \param prefix Filename prefix to use for ascii trace files.
    * \param nd Net device for which you want to enable tracing.
+   * \param explicitFilename Treat the prefix as an explicit filename if true
    */
   virtual void EnableAsciiInternal (Ptr<OutputStreamWrapper> stream,
                                     std::string prefix,
                                     Ptr<NetDevice> nd,
                                     bool explicitFilename);
 
-  ObjectFactory m_deviceFactory;
+  ObjectFactory m_deviceFactory;  //!< factory for the NetDevices
 };
 
 } // namespace ns3
diff -Naur ns-3.23/src/fd-net-device/helper/planetlab-fd-net-device-helper.h ns-3.24/src/fd-net-device/helper/planetlab-fd-net-device-helper.h
--- ns-3.23/src/fd-net-device/helper/planetlab-fd-net-device-helper.h	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/fd-net-device/helper/planetlab-fd-net-device-helper.h	2015-09-15 11:18:44.000000000 -0700
@@ -36,6 +36,7 @@
 namespace ns3 {
 
 /**
+ * \ingroup fd-net-device
  * \brief build a set of FdNetDevice objects attached to a virtual TAP network
  * interface
  *
@@ -67,6 +68,13 @@
 
 protected:
 
+  /**
+   * This method creates an ns3::FdNetDevice attached to a virtual TAP network
+   * interface
+   *
+   * \param node The node to install the device in
+   * \returns A container holding the added net device.
+   */
   Ptr<NetDevice> InstallPriv (Ptr<Node> node) const;
 
   /**
diff -Naur ns-3.23/src/fd-net-device/helper/tap-device-creator.cc ns-3.24/src/fd-net-device/helper/tap-device-creator.cc
--- ns-3.23/src/fd-net-device/helper/tap-device-creator.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/fd-net-device/helper/tap-device-creator.cc	2015-09-15 11:18:44.000000000 -0700
@@ -52,10 +52,13 @@
 
 using namespace ns3;
 
+/**
+ * Struct holding IPv6 address data
+ */
 struct in6_ifreq {
-  struct in6_addr ifr6_addr;
-  uint32_t        ifr6_prefixlen;
-  int32_t         ifr6_ifindex;
+  struct in6_addr ifr6_addr;      //!< IPv6 address
+  uint32_t        ifr6_prefixlen; //!< IPv6 prefix length
+  int32_t         ifr6_ifindex;   //!< interface index
 };
 
 char
diff -Naur ns-3.23/src/fd-net-device/helper/tap-fd-net-device-helper.h ns-3.24/src/fd-net-device/helper/tap-fd-net-device-helper.h
--- ns-3.23/src/fd-net-device/helper/tap-fd-net-device-helper.h	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/fd-net-device/helper/tap-fd-net-device-helper.h	2015-09-15 11:18:44.000000000 -0700
@@ -34,7 +34,8 @@
 namespace ns3 {
 
 /**
- * \brief build a set of FdNetDevice objects attached to a virtua TAP network
+ * \ingroup fd-net-device
+ * \brief build a set of FdNetDevice objects attached to a virtual TAP network
  * interface
  *
  */
@@ -93,6 +94,13 @@
 
 protected:
 
+  /**
+   * This method creates an ns3::FdNetDevice attached to a virtual TAP network
+   * interface
+   *
+   * \param node The node to install the device in
+   * \returns A container holding the added net device.
+   */
   Ptr<NetDevice> InstallPriv (Ptr<Node> node) const;
 
   /**
diff -Naur ns-3.23/src/fd-net-device/model/fd-net-device.cc ns-3.24/src/fd-net-device/model/fd-net-device.cc
--- ns-3.23/src/fd-net-device/model/fd-net-device.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/fd-net-device/model/fd-net-device.cc	2015-09-15 11:18:44.000000000 -0700
@@ -168,12 +168,12 @@
 FdNetDevice::FdNetDevice ()
   : m_node (0),
     m_ifIndex (0),
-    m_mtu (1500), // Defaults to Ethernet v2 MTU 
+    // Defaults to Ethernet v2 MTU
+    m_mtu (1500),
     m_fd (-1),
     m_fdReader (0),
     m_isBroadcast (true),
     m_isMulticast (false),
-    m_pendingReadCount (0),
     m_startEvent (),
     m_stopEvent ()
 {
@@ -188,6 +188,18 @@
 FdNetDevice::~FdNetDevice ()
 {
   NS_LOG_FUNCTION (this);
+
+  {
+    CriticalSection cs (m_pendingReadMutex);
+
+    while (!m_pendingQueue.empty ())
+      {
+        std::pair<uint8_t *, ssize_t> next = m_pendingQueue.front ();
+        m_pendingQueue.pop ();
+
+        free (next.first);
+      }
+  }
 }
 
 void
@@ -249,7 +261,7 @@
 
   m_fdReader = Create<FdNetDeviceFdReader> ();
   // 22 bytes covers 14 bytes Ethernet header with possible 8 bytes LLC/SNAP
-  m_fdReader->SetBufferSize(m_mtu + 22);  
+  m_fdReader->SetBufferSize (m_mtu + 22);
   m_fdReader->Start (m_fd, MakeCallback (&FdNetDevice::ReceiveCallback, this));
 
   NotifyLinkUp ();
@@ -281,31 +293,40 @@
 
   {
     CriticalSection cs (m_pendingReadMutex);
-    if (m_pendingReadCount >= m_maxPendingReads)
+    if (m_pendingQueue.size () >= m_maxPendingReads)
       {
         NS_LOG_WARN ("Packet dropped");
         skip = true;
       }
     else
       {
-        ++m_pendingReadCount;
+        m_pendingQueue.push (std::make_pair (buf, len));
       }
   }
 
   if (skip)
     {
-      struct timespec time = { 0, 100000000L }; // 100 ms
+      struct timespec time = {
+        0, 100000000L
+      };                                        // 100 ms
       nanosleep (&time, NULL);
     }
   else
     {
-      Simulator::ScheduleWithContext (m_nodeId, Time (0), MakeEvent (&FdNetDevice::ForwardUp, this, buf, len));
-   }
+      Simulator::ScheduleWithContext (m_nodeId, Time (0), MakeEvent (&FdNetDevice::ForwardUp, this));
+    }
 }
 
-/// \todo Consider having a instance member m_packetBuffer and using memmove
-///  instead of memcpy to add the PI header.
-///  It might be faster in this case to use memmove and avoid the extra mallocs.
+/**
+ * \ingroup fd-net-device
+ * \brief Synthesize PI header for the kernel
+ * \param buf the buffer to add the header to
+ * \param len the buffer length
+ *
+ * \todo Consider having a instance member m_packetBuffer and using memmove
+ * instead of memcpy to add the PI header. It might be faster in this case
+ * to use memmove and avoid the extra mallocs.
+ */
 static void
 AddPIHeader (uint8_t *&buf, ssize_t &len)
 {
@@ -342,6 +363,12 @@
   buf = buf2;
 }
 
+/**
+ * \ingroup fd-net-device
+ * \brief Removes PI header
+ * \param buf the buffer to add the header to
+ * \param len the buffer length
+ */
 static void
 RemovePIHeader (uint8_t *&buf, ssize_t &len)
 {
@@ -355,17 +382,22 @@
 }
 
 void
-FdNetDevice::ForwardUp (uint8_t *buf, ssize_t len)
+FdNetDevice::ForwardUp (void)
 {
-  NS_LOG_FUNCTION (this << buf << len);
 
-  if (m_pendingReadCount > 0)
-    {
-      {
-        CriticalSection cs (m_pendingReadMutex);
-        --m_pendingReadCount;
-      }
-    }
+  uint8_t *buf = 0; 
+  ssize_t len = 0;
+
+  {
+    CriticalSection cs (m_pendingReadMutex);
+    std::pair<uint8_t *, ssize_t> next = m_pendingQueue.front ();
+    m_pendingQueue.pop ();
+
+    buf = next.first;
+    len = next.second;
+  }
+
+  NS_LOG_FUNCTION (this << buf << len);
 
   // We need to remove the PI header and ignore it
   if (m_encapMode == DIXPI)
diff -Naur ns-3.23/src/fd-net-device/model/fd-net-device.h ns-3.24/src/fd-net-device/model/fd-net-device.h
--- ns-3.23/src/fd-net-device/model/fd-net-device.h	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/fd-net-device/model/fd-net-device.h	2015-09-15 11:18:44.000000000 -0700
@@ -36,39 +36,41 @@
 #include "ns3/unix-fd-reader.h"
 #include "ns3/system-mutex.h"
 
-#include <string.h>
+#include <utility>
+#include <queue>
 
 namespace ns3 {
 
+
+/**
+ * \defgroup fd-net-device File Descriptor Network Device
+ * This section documents the API of the ns-3 fd-net-device module.
+ * For a generic functional description, please refer to the ns-3 manual.
+ */
+
+/**
+ * \ingroup fd-net-device
+ * \brief This class performs the actual data reading from the sockets.
+ */
 class FdNetDeviceFdReader : public FdReader
 {
 public:
-  /**
-   * Constructor for the FdNetDevice.
-   */
   FdNetDeviceFdReader ();
 
   /**
    * Set size of the read buffer.
-   *
    */
   void SetBufferSize (uint32_t bufferSize);
 
 private:
   FdReader::Data DoRead (void);
-  
-  uint32_t m_bufferSize;
+
+  uint32_t m_bufferSize; //!< size of the read buffer
 };
 
 class Node;
 
 /**
- * \defgroup fd-net-device File Descriptor Network Device
- * This section documents the API of the ns-3 fd-net-device module.
- * For a generic functional description, please refer to the ns-3 manual.
- */
-
-/**
  * \ingroup fd-net-device
  *
  * \brief a NetDevice to read/write network traffic from/into a file descriptor.
@@ -82,6 +84,10 @@
 class FdNetDevice : public NetDevice
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   /**
@@ -170,15 +176,27 @@
   virtual bool SupportsSendFrom () const;
   virtual Address GetMulticast (Ipv6Address addr) const;
 
+  /**
+   * Set if the NetDevice is able to send Broadcast messages
+   * \param broadcast true if the NetDevice can send Broadcast
+   */
   virtual void SetIsBroadcast (bool broadcast);
+  /**
+   * Set if the NetDevice is able to send Multicast messages
+   * \param multicast true if the NetDevice can send Multicast
+   */
   virtual void SetIsMulticast (bool multicast);
 
 protected:
   virtual void DoDispose (void);
 
 private:
-  // private copy constructor as sugested in:
-  // http://www.nsnam.org/wiki/NS-3_Python_Bindings#.22invalid_use_of_incomplete_type.22
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse as suggested in
+   * http://www.nsnam.org/wiki/NS-3_Python_Bindings#.22invalid_use_of_incomplete_type.22
+   */
   FdNetDevice (FdNetDevice const &);
 
   /**
@@ -199,7 +217,7 @@
   /**
    * Forward the frame to the appropriate callback for processing
    */
-  void ForwardUp (uint8_t *buf, ssize_t len);
+  void ForwardUp (void);
 
   /**
    * Start Sending a Packet Down the Wire.
@@ -208,6 +226,9 @@
    */
   bool TransmitStart (Ptr<Packet> p);
 
+  /**
+   * Notify that the link is up and ready
+   */
   void NotifyLinkUp (void);
 
   /**
@@ -215,7 +236,7 @@
    */
   Ptr<Node> m_node;
 
-  /*
+  /**
    * a copy of the node id so the read thread doesn't have to GetNode() in
    * in order to find the node ID.  Thread unsafe reference counting in
    * multithreaded apps is not a good thing.
@@ -278,14 +299,13 @@
   /**
    * Number of packets that were received and scheduled for read but not yeat read.
    */
-  uint32_t m_pendingReadCount;
-  
+  std::queue< std::pair<uint8_t *, ssize_t> > m_pendingQueue;
+
   /**
    * Maximum number of packets that can be received and scheduled for read but not yeat read.
    */
   uint32_t m_maxPendingReads;
-  
-   
+
   /**
    * Mutex to increase pending read counter.
    */
@@ -301,7 +321,13 @@
    */
   Time m_tStop;
 
+  /**
+   * NetDevice start event
+   */
   EventId m_startEvent;
+  /**
+   * NetDevice stop event
+   */
   EventId m_stopEvent;
 
   /**
@@ -361,6 +387,8 @@
    * The trace source fired when the phy layer drops a packet as it tries
    * to transmit it.
    *
+   * \todo Remove: this TracedCallback is never invoked.
+   *
    * \see class CallBackTraceSource
    */
   TracedCallback<Ptr<const Packet> > m_phyTxDropTrace;
diff -Naur ns-3.23/src/flow-monitor/bindings/modulegen__gcc_ILP32.py ns-3.24/src/flow-monitor/bindings/modulegen__gcc_ILP32.py
--- ns-3.23/src/flow-monitor/bindings/modulegen__gcc_ILP32.py	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/flow-monitor/bindings/modulegen__gcc_ILP32.py	2015-09-15 11:18:44.000000000 -0700
@@ -82,6 +82,10 @@
     module.add_enum('Scope_e', ['HOST', 'LINKLOCAL', 'GLOBAL'], outer_class=root_module['ns3::Ipv6InterfaceAddress'], import_from_module='ns.internet')
     ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix [class]
     module.add_class('Ipv6Prefix', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    module.add_class('Mac48Address', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    root_module['ns3::Mac48Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## node-container.h (module 'network'): ns3::NodeContainer [class]
     module.add_class('NodeContainer', import_from_module='ns.network')
     ## object-base.h (module 'core'): ns3::ObjectBase [class]
@@ -282,6 +286,10 @@
     module.add_class('Ipv6PrefixChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue [class]
     module.add_class('Ipv6PrefixValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker [class]
+    module.add_class('Mac48AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue [class]
+    module.add_class('Mac48AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
     module.add_class('NetDevice', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice::PacketType [enumeration]
@@ -332,6 +340,12 @@
     nested_module = module.add_cpp_namespace('Hash')
     register_types_ns3_Hash(nested_module)
     
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -367,6 +381,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -391,6 +412,7 @@
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
     register_Ns3Ipv6InterfaceAddress_methods(root_module, root_module['ns3::Ipv6InterfaceAddress'])
     register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
+    register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
     register_Ns3NodeContainer_methods(root_module, root_module['ns3::NodeContainer'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
     register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
@@ -476,6 +498,8 @@
     register_Ns3Ipv6PmtuCache_methods(root_module, root_module['ns3::Ipv6PmtuCache'])
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
+    register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
+    register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
@@ -613,17 +637,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -645,11 +669,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -659,16 +678,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -906,14 +915,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -974,11 +987,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3EventId_methods(root_module, cls):
@@ -1779,6 +1787,78 @@
                    is_const=True)
     return
 
+def register_Ns3Mac48Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(ns3::Mac48Address const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetBroadcast() [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv4Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv4Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv6Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast6Prefix() [member function]
+    cls.add_method('GetMulticast6Prefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticastPrefix() [member function]
+    cls.add_method('GetMulticastPrefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsBroadcast() const [member function]
+    cls.add_method('IsBroadcast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsGroup() const [member function]
+    cls.add_method('IsGroup', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static bool ns3::Mac48Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
 def register_Ns3NodeContainer_methods(root_module, cls):
     ## node-container.h (module 'network'): ns3::NodeContainer::NodeContainer(ns3::NodeContainer const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NodeContainer const &', 'arg0')])
@@ -2136,7 +2216,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -2228,10 +2308,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -4138,11 +4218,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -4390,6 +4480,11 @@
                    'std::map< unsigned int, ns3::FlowProbe::FlowStats >', 
                    [], 
                    is_const=True)
+    ## flow-probe.h (module 'flow-monitor'): static ns3::TypeId ns3::FlowProbe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## flow-probe.h (module 'flow-monitor'): void ns3::FlowProbe::SerializeToXmlStream(std::ostream & os, int indent, uint32_t index) const [member function]
     cls.add_method('SerializeToXmlStream', 
                    'void', 
@@ -4682,6 +4777,11 @@
 def register_Ns3Ipv4FlowProbe_methods(root_module, cls):
     ## ipv4-flow-probe.h (module 'flow-monitor'): ns3::Ipv4FlowProbe::Ipv4FlowProbe(ns3::Ptr<ns3::FlowMonitor> monitor, ns3::Ptr<ns3::Ipv4FlowClassifier> classifier, ns3::Ptr<ns3::Node> node) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::FlowMonitor >', 'monitor'), param('ns3::Ptr< ns3::Ipv4FlowClassifier >', 'classifier'), param('ns3::Ptr< ns3::Node >', 'node')])
+    ## ipv4-flow-probe.h (module 'flow-monitor'): static ns3::TypeId ns3::Ipv4FlowProbe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## ipv4-flow-probe.h (module 'flow-monitor'): void ns3::Ipv4FlowProbe::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -5330,6 +5430,11 @@
 def register_Ns3Ipv6FlowProbe_methods(root_module, cls):
     ## ipv6-flow-probe.h (module 'flow-monitor'): ns3::Ipv6FlowProbe::Ipv6FlowProbe(ns3::Ptr<ns3::FlowMonitor> monitor, ns3::Ptr<ns3::Ipv6FlowClassifier> classifier, ns3::Ptr<ns3::Node> node) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::FlowMonitor >', 'monitor'), param('ns3::Ptr< ns3::Ipv6FlowClassifier >', 'classifier'), param('ns3::Ptr< ns3::Node >', 'node')])
+    ## ipv6-flow-probe.h (module 'flow-monitor'): static ns3::TypeId ns3::Ipv6FlowProbe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## ipv6-flow-probe.h (module 'flow-monitor'): void ns3::Ipv6FlowProbe::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -5652,6 +5757,46 @@
                    [param('ns3::Ipv6Prefix const &', 'value')])
     return
 
+def register_Ns3Mac48AddressChecker_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker(ns3::Mac48AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac48AddressValue_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressValue const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'value')])
+    ## mac48-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac48AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## mac48-address.h (module 'network'): ns3::Mac48Address ns3::Mac48AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): std::string ns3::Mac48AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48AddressValue::Set(ns3::Mac48Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac48Address const &', 'value')])
+    return
+
 def register_Ns3NetDevice_methods(root_module, cls):
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
     cls.add_constructor([])
@@ -6371,6 +6516,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -6383,6 +6529,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.23/src/flow-monitor/bindings/modulegen__gcc_LP64.py ns-3.24/src/flow-monitor/bindings/modulegen__gcc_LP64.py
--- ns-3.23/src/flow-monitor/bindings/modulegen__gcc_LP64.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/flow-monitor/bindings/modulegen__gcc_LP64.py	2015-09-15 11:18:44.000000000 -0700
@@ -82,6 +82,10 @@
     module.add_enum('Scope_e', ['HOST', 'LINKLOCAL', 'GLOBAL'], outer_class=root_module['ns3::Ipv6InterfaceAddress'], import_from_module='ns.internet')
     ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix [class]
     module.add_class('Ipv6Prefix', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    module.add_class('Mac48Address', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    root_module['ns3::Mac48Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## node-container.h (module 'network'): ns3::NodeContainer [class]
     module.add_class('NodeContainer', import_from_module='ns.network')
     ## object-base.h (module 'core'): ns3::ObjectBase [class]
@@ -282,6 +286,10 @@
     module.add_class('Ipv6PrefixChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue [class]
     module.add_class('Ipv6PrefixValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker [class]
+    module.add_class('Mac48AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue [class]
+    module.add_class('Mac48AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
     module.add_class('NetDevice', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice::PacketType [enumeration]
@@ -332,6 +340,12 @@
     nested_module = module.add_cpp_namespace('Hash')
     register_types_ns3_Hash(nested_module)
     
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -367,6 +381,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -391,6 +412,7 @@
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
     register_Ns3Ipv6InterfaceAddress_methods(root_module, root_module['ns3::Ipv6InterfaceAddress'])
     register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
+    register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
     register_Ns3NodeContainer_methods(root_module, root_module['ns3::NodeContainer'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
     register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
@@ -476,6 +498,8 @@
     register_Ns3Ipv6PmtuCache_methods(root_module, root_module['ns3::Ipv6PmtuCache'])
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
+    register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
+    register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
@@ -613,17 +637,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -645,11 +669,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -659,16 +678,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -906,14 +915,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -974,11 +987,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3EventId_methods(root_module, cls):
@@ -1779,6 +1787,78 @@
                    is_const=True)
     return
 
+def register_Ns3Mac48Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(ns3::Mac48Address const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetBroadcast() [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv4Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv4Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv6Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast6Prefix() [member function]
+    cls.add_method('GetMulticast6Prefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticastPrefix() [member function]
+    cls.add_method('GetMulticastPrefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsBroadcast() const [member function]
+    cls.add_method('IsBroadcast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsGroup() const [member function]
+    cls.add_method('IsGroup', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static bool ns3::Mac48Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
 def register_Ns3NodeContainer_methods(root_module, cls):
     ## node-container.h (module 'network'): ns3::NodeContainer::NodeContainer(ns3::NodeContainer const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NodeContainer const &', 'arg0')])
@@ -2136,7 +2216,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -2228,10 +2308,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -4138,11 +4218,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -4390,6 +4480,11 @@
                    'std::map< unsigned int, ns3::FlowProbe::FlowStats >', 
                    [], 
                    is_const=True)
+    ## flow-probe.h (module 'flow-monitor'): static ns3::TypeId ns3::FlowProbe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## flow-probe.h (module 'flow-monitor'): void ns3::FlowProbe::SerializeToXmlStream(std::ostream & os, int indent, uint32_t index) const [member function]
     cls.add_method('SerializeToXmlStream', 
                    'void', 
@@ -4682,6 +4777,11 @@
 def register_Ns3Ipv4FlowProbe_methods(root_module, cls):
     ## ipv4-flow-probe.h (module 'flow-monitor'): ns3::Ipv4FlowProbe::Ipv4FlowProbe(ns3::Ptr<ns3::FlowMonitor> monitor, ns3::Ptr<ns3::Ipv4FlowClassifier> classifier, ns3::Ptr<ns3::Node> node) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::FlowMonitor >', 'monitor'), param('ns3::Ptr< ns3::Ipv4FlowClassifier >', 'classifier'), param('ns3::Ptr< ns3::Node >', 'node')])
+    ## ipv4-flow-probe.h (module 'flow-monitor'): static ns3::TypeId ns3::Ipv4FlowProbe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## ipv4-flow-probe.h (module 'flow-monitor'): void ns3::Ipv4FlowProbe::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -5330,6 +5430,11 @@
 def register_Ns3Ipv6FlowProbe_methods(root_module, cls):
     ## ipv6-flow-probe.h (module 'flow-monitor'): ns3::Ipv6FlowProbe::Ipv6FlowProbe(ns3::Ptr<ns3::FlowMonitor> monitor, ns3::Ptr<ns3::Ipv6FlowClassifier> classifier, ns3::Ptr<ns3::Node> node) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::FlowMonitor >', 'monitor'), param('ns3::Ptr< ns3::Ipv6FlowClassifier >', 'classifier'), param('ns3::Ptr< ns3::Node >', 'node')])
+    ## ipv6-flow-probe.h (module 'flow-monitor'): static ns3::TypeId ns3::Ipv6FlowProbe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## ipv6-flow-probe.h (module 'flow-monitor'): void ns3::Ipv6FlowProbe::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -5652,6 +5757,46 @@
                    [param('ns3::Ipv6Prefix const &', 'value')])
     return
 
+def register_Ns3Mac48AddressChecker_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker(ns3::Mac48AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac48AddressValue_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressValue const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'value')])
+    ## mac48-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac48AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## mac48-address.h (module 'network'): ns3::Mac48Address ns3::Mac48AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): std::string ns3::Mac48AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48AddressValue::Set(ns3::Mac48Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac48Address const &', 'value')])
+    return
+
 def register_Ns3NetDevice_methods(root_module, cls):
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
     cls.add_constructor([])
@@ -6371,6 +6516,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -6383,6 +6529,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.23/src/flow-monitor/model/flow-probe.cc ns-3.24/src/flow-monitor/model/flow-probe.cc
--- ns-3.23/src/flow-monitor/model/flow-probe.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/flow-monitor/model/flow-probe.cc	2015-09-15 11:18:44.000000000 -0700
@@ -23,6 +23,17 @@
 
 namespace ns3 {
 
+/* static */
+TypeId FlowProbe::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::FlowProbe")
+    .SetParent<Object> ()
+    .SetGroupName ("FlowMonitor")
+    // No AddConstructor because this class has no default constructor.
+    ;
+
+  return tid;
+}
 
 FlowProbe::~FlowProbe ()
 {
diff -Naur ns-3.23/src/flow-monitor/model/flow-probe.h ns-3.24/src/flow-monitor/model/flow-probe.h
--- ns-3.23/src/flow-monitor/model/flow-probe.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/flow-monitor/model/flow-probe.h	2015-09-15 11:18:44.000000000 -0700
@@ -54,6 +54,10 @@
 public:
   virtual ~FlowProbe ();
 
+  /// Register this type.
+  /// \return The TypeId.
+  static TypeId GetTypeId (void);
+  
   /// Structure to hold the statistics of a flow
   struct FlowStats
   {
diff -Naur ns-3.23/src/flow-monitor/model/ipv4-flow-probe.cc ns-3.24/src/flow-monitor/model/ipv4-flow-probe.cc
--- ns-3.23/src/flow-monitor/model/ipv4-flow-probe.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/flow-monitor/model/ipv4-flow-probe.cc	2015-09-15 11:18:44.000000000 -0700
@@ -231,6 +231,19 @@
 {
 }
 
+/* static */
+TypeId
+Ipv4FlowProbe::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::Ipv4FlowProbe")
+    .SetParent<FlowProbe> ()
+    .SetGroupName ("FlowMonitor")
+    // No AddConstructor because this class has no default constructor.
+    ;
+
+  return tid;
+}
+
 void
 Ipv4FlowProbe::DoDispose ()
 {
diff -Naur ns-3.23/src/flow-monitor/model/ipv4-flow-probe.h ns-3.24/src/flow-monitor/model/ipv4-flow-probe.h
--- ns-3.23/src/flow-monitor/model/ipv4-flow-probe.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/flow-monitor/model/ipv4-flow-probe.h	2015-09-15 11:18:44.000000000 -0700
@@ -48,6 +48,10 @@
   Ipv4FlowProbe (Ptr<FlowMonitor> monitor, Ptr<Ipv4FlowClassifier> classifier, Ptr<Node> node);
   virtual ~Ipv4FlowProbe ();
 
+  /// Register this type.
+  /// \return The TypeId.
+  static TypeId GetTypeId (void);
+  
   /// \brief enumeration of possible reasons why a packet may be dropped
   enum DropReason 
   {
diff -Naur ns-3.23/src/flow-monitor/model/ipv6-flow-probe.cc ns-3.24/src/flow-monitor/model/ipv6-flow-probe.cc
--- ns-3.23/src/flow-monitor/model/ipv6-flow-probe.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/flow-monitor/model/ipv6-flow-probe.cc	2015-09-15 11:18:44.000000000 -0700
@@ -228,6 +228,19 @@
   Config::ConnectWithoutContext (oss.str (), MakeCallback (&Ipv6FlowProbe::QueueDropLogger, Ptr<Ipv6FlowProbe> (this)));
 }
 
+/* static */
+TypeId
+Ipv6FlowProbe::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::Ipv6FlowProbe")
+    .SetParent<FlowProbe> ()
+    .SetGroupName ("FlowMonitor")
+    // No AddConstructor because this class has no default constructor.
+    ;
+
+  return tid;
+}
+
 Ipv6FlowProbe::~Ipv6FlowProbe ()
 {
 }
diff -Naur ns-3.23/src/flow-monitor/model/ipv6-flow-probe.h ns-3.24/src/flow-monitor/model/ipv6-flow-probe.h
--- ns-3.23/src/flow-monitor/model/ipv6-flow-probe.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/flow-monitor/model/ipv6-flow-probe.h	2015-09-15 11:18:44.000000000 -0700
@@ -49,6 +49,10 @@
   Ipv6FlowProbe (Ptr<FlowMonitor> monitor, Ptr<Ipv6FlowClassifier> classifier, Ptr<Node> node);
   virtual ~Ipv6FlowProbe ();
 
+  /// Register this type.
+  /// \return The TypeId.
+  static TypeId GetTypeId (void);
+
   /// \brief enumeration of possible reasons why a packet may be dropped
   enum DropReason 
   {
diff -Naur ns-3.23/src/internet/bindings/callbacks_list.py ns-3.24/src/internet/bindings/callbacks_list.py
--- ns-3.23/src/internet/bindings/callbacks_list.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/bindings/callbacks_list.py	2015-09-15 11:18:44.000000000 -0700
@@ -1,8 +1,6 @@
 callback_classes = [
     ['void', 'ns3::Ipv6Address', 'unsigned char', 'unsigned char', 'unsigned char', 'unsigned int', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ipv4Address', 'unsigned char', 'unsigned char', 'unsigned char', 'unsigned int', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
-    ['void', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
-    ['void', 'ns3::Ptr<ns3::Packet>', 'ns3::Ipv4Header', 'unsigned short', 'ns3::Ptr<ns3::Ipv4Interface>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::Socket>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::Socket>', 'unsigned int', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::Socket>', 'ns3::Address const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
diff -Naur ns-3.23/src/internet/bindings/modulegen__gcc_ILP32.py ns-3.24/src/internet/bindings/modulegen__gcc_ILP32.py
--- ns-3.23/src/internet/bindings/modulegen__gcc_ILP32.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/bindings/modulegen__gcc_ILP32.py	2015-09-15 11:18:44.000000000 -0700
@@ -20,8 +20,6 @@
 def register_types(module):
     root_module = module.get_root()
     
-    ## tcp-socket.h (module 'internet'): ns3::TcpStates_t [enumeration]
-    module.add_enum('TcpStates_t', ['CLOSED', 'LISTEN', 'SYN_SENT', 'SYN_RCVD', 'ESTABLISHED', 'CLOSE_WAIT', 'LAST_ACK', 'FIN_WAIT_1', 'FIN_WAIT_2', 'CLOSING', 'TIME_WAIT', 'LAST_STATE'])
     ## address.h (module 'network'): ns3::Address [class]
     module.add_class('Address', import_from_module='ns.network')
     ## address.h (module 'network'): ns3::Address::MaxSize_e [enumeration]
@@ -120,8 +118,6 @@
     module.add_class('Ipv4AddressGenerator')
     ## ipv4-address-helper.h (module 'internet'): ns3::Ipv4AddressHelper [class]
     module.add_class('Ipv4AddressHelper')
-    ## ipv4-end-point.h (module 'internet'): ns3::Ipv4EndPoint [class]
-    module.add_class('Ipv4EndPoint')
     ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4InterfaceAddress [class]
     module.add_class('Ipv4InterfaceAddress')
     ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e [enumeration]
@@ -203,7 +199,7 @@
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
+    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SSL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
     ## internet-trace-helper.h (module 'internet'): ns3::PcapHelperForIpv4 [class]
@@ -250,8 +246,8 @@
     module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['ns3::SequenceNumber<unsigned int, int>'])
     ## traced-value.h (module 'core'): ns3::TracedValue<ns3::SequenceNumber<unsigned int, int> > [class]
     root_module['ns3::TracedValue< ns3::SequenceNumber<unsigned int, int> >'].implicitly_converts_to(root_module['ns3::SequenceNumber32'])
-    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::TcpStates_t> [class]
-    module.add_class('TracedValue', template_parameters=['ns3::TcpStates_t'])
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::TcpSocket::TcpStates_t> [class]
+    module.add_class('TracedValue', template_parameters=['ns3::TcpSocket::TcpStates_t'])
     ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int> [class]
     module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['unsigned int'])
     ## type-id.h (module 'core'): ns3::TypeId [class]
@@ -450,6 +446,8 @@
     module.add_class('TcpRxBuffer', parent=root_module['ns3::Object'])
     ## tcp-socket.h (module 'internet'): ns3::TcpSocket [class]
     module.add_class('TcpSocket', parent=root_module['ns3::Socket'])
+    ## tcp-socket.h (module 'internet'): ns3::TcpSocket::TcpStates_t [enumeration]
+    module.add_enum('TcpStates_t', ['CLOSED', 'LISTEN', 'SYN_SENT', 'SYN_RCVD', 'ESTABLISHED', 'CLOSE_WAIT', 'LAST_ACK', 'FIN_WAIT_1', 'FIN_WAIT_2', 'CLOSING', 'TIME_WAIT', 'LAST_STATE'], outer_class=root_module['ns3::TcpSocket'])
     ## tcp-socket-base.h (module 'internet'): ns3::TcpSocketBase [class]
     module.add_class('TcpSocketBase', parent=root_module['ns3::TcpSocket'])
     ## tcp-socket-factory.h (module 'internet'): ns3::TcpSocketFactory [class]
@@ -745,15 +743,12 @@
     typehandlers.add_type_alias(u'std::deque< ns3::RttHistory, std::allocator< ns3::RttHistory > >', u'ns3::RttHistory_t')
     typehandlers.add_type_alias(u'std::deque< ns3::RttHistory, std::allocator< ns3::RttHistory > >*', u'ns3::RttHistory_t*')
     typehandlers.add_type_alias(u'std::deque< ns3::RttHistory, std::allocator< ns3::RttHistory > >&', u'ns3::RttHistory_t&')
-    typehandlers.add_type_alias(u'void ( * ) ( ns3::TcpStates_t, ns3::TcpStates_t ) *', u'ns3::TcpStatesTracedValueCallback')
-    typehandlers.add_type_alias(u'void ( * ) ( ns3::TcpStates_t, ns3::TcpStates_t ) **', u'ns3::TcpStatesTracedValueCallback*')
-    typehandlers.add_type_alias(u'void ( * ) ( ns3::TcpStates_t, ns3::TcpStates_t ) *&', u'ns3::TcpStatesTracedValueCallback&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::TcpSocket::TcpStates_t, ns3::TcpSocket::TcpStates_t ) *', u'ns3::TcpStatesTracedValueCallback')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::TcpSocket::TcpStates_t, ns3::TcpSocket::TcpStates_t ) **', u'ns3::TcpStatesTracedValueCallback*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::TcpSocket::TcpStates_t, ns3::TcpSocket::TcpStates_t ) *&', u'ns3::TcpStatesTracedValueCallback&')
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >', u'ns3::SequenceNumber8')
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >*', u'ns3::SequenceNumber8*')
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >&', u'ns3::SequenceNumber8&')
-    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *', u'ns3::SequenceNumber32TracedValueCallback')
-    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) **', u'ns3::SequenceNumber32TracedValueCallback*')
-    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *&', u'ns3::SequenceNumber32TracedValueCallback&')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -767,6 +762,12 @@
     register_types_ns3_Hash(nested_module)
     
     
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
+    
     ## Register a nested module for the namespace internal
     
     nested_module = module.add_cpp_namespace('internal')
@@ -807,6 +808,40 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *', u'ns3::TracedValueCallback::Double')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) **', u'ns3::TracedValueCallback::Double*')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *&', u'ns3::TracedValueCallback::Double&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *', u'ns3::TracedValueCallback::SequenceNumber32')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) **', u'ns3::TracedValueCallback::SequenceNumber32*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *&', u'ns3::TracedValueCallback::SequenceNumber32&')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *', u'ns3::TracedValueCallback::Int8')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) **', u'ns3::TracedValueCallback::Int8*')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *&', u'ns3::TracedValueCallback::Int8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *', u'ns3::TracedValueCallback::Uint8')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) **', u'ns3::TracedValueCallback::Uint8*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *&', u'ns3::TracedValueCallback::Uint8&')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *', u'ns3::TracedValueCallback::Int32')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) **', u'ns3::TracedValueCallback::Int32*')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *&', u'ns3::TracedValueCallback::Int32&')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *', u'ns3::TracedValueCallback::Bool')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) **', u'ns3::TracedValueCallback::Bool*')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *&', u'ns3::TracedValueCallback::Bool&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *', u'ns3::TracedValueCallback::Uint16')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) **', u'ns3::TracedValueCallback::Uint16*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *&', u'ns3::TracedValueCallback::Uint16&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *', u'ns3::TracedValueCallback::Uint32')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) **', u'ns3::TracedValueCallback::Uint32*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *&', u'ns3::TracedValueCallback::Uint32&')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *', u'ns3::TracedValueCallback::Int16')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) **', u'ns3::TracedValueCallback::Int16*')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *&', u'ns3::TracedValueCallback::Int16&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_types_ns3_internal(module):
     root_module = module.get_root()
     
@@ -847,7 +882,6 @@
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4AddressGenerator_methods(root_module, root_module['ns3::Ipv4AddressGenerator'])
     register_Ns3Ipv4AddressHelper_methods(root_module, root_module['ns3::Ipv4AddressHelper'])
-    register_Ns3Ipv4EndPoint_methods(root_module, root_module['ns3::Ipv4EndPoint'])
     register_Ns3Ipv4InterfaceAddress_methods(root_module, root_module['ns3::Ipv4InterfaceAddress'])
     register_Ns3Ipv4InterfaceContainer_methods(root_module, root_module['ns3::Ipv4InterfaceContainer'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
@@ -899,7 +933,7 @@
     register_Ns3TracedValue__Bool_methods(root_module, root_module['ns3::TracedValue< bool >'])
     register_Ns3TracedValue__Double_methods(root_module, root_module['ns3::TracedValue< double >'])
     register_Ns3TracedValue__Ns3SequenceNumber__lt__unsigned_int__int__gt___methods(root_module, root_module['ns3::TracedValue< ns3::SequenceNumber<unsigned int, int> >'])
-    register_Ns3TracedValue__Ns3TcpStates_t_methods(root_module, root_module['ns3::TracedValue< ns3::TcpStates_t >'])
+    register_Ns3TracedValue__Ns3TcpSocketTcpStates_t_methods(root_module, root_module['ns3::TracedValue< ns3::TcpSocket::TcpStates_t >'])
     register_Ns3TracedValue__Unsigned_int_methods(root_module, root_module['ns3::TracedValue< unsigned int >'])
     register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
     register_Ns3TypeIdAttributeInformation_methods(root_module, root_module['ns3::TypeId::AttributeInformation'])
@@ -1472,17 +1506,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -1504,11 +1538,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -1518,16 +1547,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -1765,14 +1784,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -1833,11 +1856,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CandidateQueue_methods(root_module, cls):
@@ -2515,65 +2533,6 @@
                    [param('ns3::Ipv4Address', 'network'), param('ns3::Ipv4Mask', 'mask'), param('ns3::Ipv4Address', 'base', default_value='"0.0.0.1"')])
     return
 
-def register_Ns3Ipv4EndPoint_methods(root_module, cls):
-    ## ipv4-end-point.h (module 'internet'): ns3::Ipv4EndPoint::Ipv4EndPoint(ns3::Ipv4EndPoint const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv4EndPoint const &', 'arg0')])
-    ## ipv4-end-point.h (module 'internet'): ns3::Ipv4EndPoint::Ipv4EndPoint(ns3::Ipv4Address address, uint16_t port) [constructor]
-    cls.add_constructor([param('ns3::Ipv4Address', 'address'), param('uint16_t', 'port')])
-    ## ipv4-end-point.h (module 'internet'): void ns3::Ipv4EndPoint::BindToNetDevice(ns3::Ptr<ns3::NetDevice> netdevice) [member function]
-    cls.add_method('BindToNetDevice', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::NetDevice >', 'netdevice')])
-    ## ipv4-end-point.h (module 'internet'): void ns3::Ipv4EndPoint::ForwardIcmp(ns3::Ipv4Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo) [member function]
-    cls.add_method('ForwardIcmp', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'icmpSource'), param('uint8_t', 'icmpTtl'), param('uint8_t', 'icmpType'), param('uint8_t', 'icmpCode'), param('uint32_t', 'icmpInfo')])
-    ## ipv4-end-point.h (module 'internet'): void ns3::Ipv4EndPoint::ForwardUp(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, uint16_t sport, ns3::Ptr<ns3::Ipv4Interface> incomingInterface) [member function]
-    cls.add_method('ForwardUp', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('uint16_t', 'sport'), param('ns3::Ptr< ns3::Ipv4Interface >', 'incomingInterface')])
-    ## ipv4-end-point.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv4EndPoint::GetBoundNetDevice() [member function]
-    cls.add_method('GetBoundNetDevice', 
-                   'ns3::Ptr< ns3::NetDevice >', 
-                   [])
-    ## ipv4-end-point.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4EndPoint::GetLocalAddress() [member function]
-    cls.add_method('GetLocalAddress', 
-                   'ns3::Ipv4Address', 
-                   [])
-    ## ipv4-end-point.h (module 'internet'): uint16_t ns3::Ipv4EndPoint::GetLocalPort() [member function]
-    cls.add_method('GetLocalPort', 
-                   'uint16_t', 
-                   [])
-    ## ipv4-end-point.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4EndPoint::GetPeerAddress() [member function]
-    cls.add_method('GetPeerAddress', 
-                   'ns3::Ipv4Address', 
-                   [])
-    ## ipv4-end-point.h (module 'internet'): uint16_t ns3::Ipv4EndPoint::GetPeerPort() [member function]
-    cls.add_method('GetPeerPort', 
-                   'uint16_t', 
-                   [])
-    ## ipv4-end-point.h (module 'internet'): void ns3::Ipv4EndPoint::SetDestroyCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
-    cls.add_method('SetDestroyCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
-    ## ipv4-end-point.h (module 'internet'): void ns3::Ipv4EndPoint::SetIcmpCallback(ns3::Callback<void, ns3::Ipv4Address, unsigned char, unsigned char, unsigned char, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
-    cls.add_method('SetIcmpCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::Ipv4Address, unsigned char, unsigned char, unsigned char, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
-    ## ipv4-end-point.h (module 'internet'): void ns3::Ipv4EndPoint::SetLocalAddress(ns3::Ipv4Address address) [member function]
-    cls.add_method('SetLocalAddress', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'address')])
-    ## ipv4-end-point.h (module 'internet'): void ns3::Ipv4EndPoint::SetPeer(ns3::Ipv4Address address, uint16_t port) [member function]
-    cls.add_method('SetPeer', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'address'), param('uint16_t', 'port')])
-    ## ipv4-end-point.h (module 'internet'): void ns3::Ipv4EndPoint::SetRxCallback(ns3::Callback<void, ns3::Ptr<ns3::Packet>, ns3::Ipv4Header, unsigned short, ns3::Ptr<ns3::Ipv4Interface>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
-    cls.add_method('SetRxCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::Ipv4Header, unsigned short, ns3::Ptr< ns3::Ipv4Interface >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
-    return
-
 def register_Ns3Ipv4InterfaceAddress_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_output_stream_operator()
@@ -4205,7 +4164,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -4223,10 +4182,10 @@
     cls.add_method('Close', 
                    'void', 
                    [])
-    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
+    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t & packets, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
     cls.add_method('Diff', 
                    'bool', 
-                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
+                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t &', 'packets'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
                    is_static=True)
     ## pcap-file.h (module 'network'): bool ns3::PcapFile::Eof() const [member function]
     cls.add_method('Eof', 
@@ -4290,10 +4249,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header & header, ns3::Ptr<ns3::Packet const> p) [member function]
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header const & header, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file.h (module 'network'): ns3::PcapFile::SNAPLEN_DEFAULT [variable]
     cls.add_static_attribute('SNAPLEN_DEFAULT', 'uint32_t const', is_const=True)
     ## pcap-file.h (module 'network'): ns3::PcapFile::ZONE_DEFAULT [variable]
@@ -4751,10 +4710,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -5047,38 +5006,38 @@
                    [param('ns3::SequenceNumber< unsigned int, int > const &', 'v')])
     return
 
-def register_Ns3TracedValue__Ns3TcpStates_t_methods(root_module, cls):
-    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::TcpStates_t>::TracedValue() [constructor]
+def register_Ns3TracedValue__Ns3TcpSocketTcpStates_t_methods(root_module, cls):
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::TcpSocket::TcpStates_t>::TracedValue() [constructor]
     cls.add_constructor([])
-    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::TcpStates_t>::TracedValue(ns3::TracedValue<ns3::TcpStates_t> const & o) [copy constructor]
-    cls.add_constructor([param('ns3::TracedValue< ns3::TcpStates_t > const &', 'o')])
-    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::TcpStates_t>::TracedValue(ns3::TcpStates_t const & v) [constructor]
-    cls.add_constructor([param('ns3::TcpStates_t const &', 'v')])
-    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::TcpStates_t>::Connect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::TcpSocket::TcpStates_t>::TracedValue(ns3::TracedValue<ns3::TcpSocket::TcpStates_t> const & o) [copy constructor]
+    cls.add_constructor([param('ns3::TracedValue< ns3::TcpSocket::TcpStates_t > const &', 'o')])
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::TcpSocket::TcpStates_t>::TracedValue(ns3::TcpSocket::TcpStates_t const & v) [constructor]
+    cls.add_constructor([param('ns3::TcpSocket::TcpStates_t const &', 'v')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::TcpSocket::TcpStates_t>::Connect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
     cls.add_method('Connect', 
                    'void', 
                    [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
-    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::TcpStates_t>::ConnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::TcpSocket::TcpStates_t>::ConnectWithoutContext(ns3::CallbackBase const & cb) [member function]
     cls.add_method('ConnectWithoutContext', 
                    'void', 
                    [param('ns3::CallbackBase const &', 'cb')])
-    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::TcpStates_t>::Disconnect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::TcpSocket::TcpStates_t>::Disconnect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
     cls.add_method('Disconnect', 
                    'void', 
                    [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
-    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::TcpStates_t>::DisconnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::TcpSocket::TcpStates_t>::DisconnectWithoutContext(ns3::CallbackBase const & cb) [member function]
     cls.add_method('DisconnectWithoutContext', 
                    'void', 
                    [param('ns3::CallbackBase const &', 'cb')])
-    ## traced-value.h (module 'core'): ns3::TcpStates_t ns3::TracedValue<ns3::TcpStates_t>::Get() const [member function]
+    ## traced-value.h (module 'core'): ns3::TcpSocket::TcpStates_t ns3::TracedValue<ns3::TcpSocket::TcpStates_t>::Get() const [member function]
     cls.add_method('Get', 
-                   'ns3::TcpStates_t', 
+                   'ns3::TcpSocket::TcpStates_t', 
                    [], 
                    is_const=True)
-    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::TcpStates_t>::Set(ns3::TcpStates_t const & v) [member function]
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::TcpSocket::TcpStates_t>::Set(ns3::TcpSocket::TcpStates_t const & v) [member function]
     cls.add_method('Set', 
                    'void', 
-                   [param('ns3::TcpStates_t const &', 'v')])
+                   [param('ns3::TcpSocket::TcpStates_t const &', 'v')])
     return
 
 def register_Ns3TracedValue__Unsigned_int_methods(root_module, cls):
@@ -7651,10 +7610,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header & header, ns3::Ptr<ns3::Packet const> p) [member function]
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header const & header, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('ns3::Time', 't'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('ns3::Time', 't'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, uint8_t const * buffer, uint32_t length) [member function]
     cls.add_method('Write', 
                    'void', 
@@ -8875,6 +8834,7 @@
     return
 
 def register_Ns3TcpHeader_methods(root_module, cls):
+    cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     ## tcp-header.h (module 'internet'): ns3::TcpHeader::TcpHeader(ns3::TcpHeader const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::TcpHeader const &', 'arg0')])
@@ -8963,18 +8923,18 @@
                    'bool', 
                    [param('uint8_t', 'kind')], 
                    is_const=True)
-    ## tcp-header.h (module 'internet'): void ns3::TcpHeader::InitializeChecksum(ns3::Ipv4Address source, ns3::Ipv4Address destination, uint8_t protocol) [member function]
+    ## tcp-header.h (module 'internet'): void ns3::TcpHeader::InitializeChecksum(ns3::Ipv4Address const & source, ns3::Ipv4Address const & destination, uint8_t protocol) [member function]
     cls.add_method('InitializeChecksum', 
                    'void', 
-                   [param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination'), param('uint8_t', 'protocol')])
-    ## tcp-header.h (module 'internet'): void ns3::TcpHeader::InitializeChecksum(ns3::Ipv6Address source, ns3::Ipv6Address destination, uint8_t protocol) [member function]
+                   [param('ns3::Ipv4Address const &', 'source'), param('ns3::Ipv4Address const &', 'destination'), param('uint8_t', 'protocol')])
+    ## tcp-header.h (module 'internet'): void ns3::TcpHeader::InitializeChecksum(ns3::Ipv6Address const & source, ns3::Ipv6Address const & destination, uint8_t protocol) [member function]
     cls.add_method('InitializeChecksum', 
                    'void', 
-                   [param('ns3::Ipv6Address', 'source'), param('ns3::Ipv6Address', 'destination'), param('uint8_t', 'protocol')])
-    ## tcp-header.h (module 'internet'): void ns3::TcpHeader::InitializeChecksum(ns3::Address source, ns3::Address destination, uint8_t protocol) [member function]
+                   [param('ns3::Ipv6Address const &', 'source'), param('ns3::Ipv6Address const &', 'destination'), param('uint8_t', 'protocol')])
+    ## tcp-header.h (module 'internet'): void ns3::TcpHeader::InitializeChecksum(ns3::Address const & source, ns3::Address const & destination, uint8_t protocol) [member function]
     cls.add_method('InitializeChecksum', 
                    'void', 
-                   [param('ns3::Address', 'source'), param('ns3::Address', 'destination'), param('uint8_t', 'protocol')])
+                   [param('ns3::Address const &', 'source'), param('ns3::Address const &', 'destination'), param('uint8_t', 'protocol')])
     ## tcp-header.h (module 'internet'): bool ns3::TcpHeader::IsChecksumOk() const [member function]
     cls.add_method('IsChecksumOk', 
                    'bool', 
@@ -9550,15 +9510,10 @@
                    'int', 
                    [], 
                    visibility='protected')
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::DoForwardUp(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Header header, uint16_t port, ns3::Ptr<ns3::Ipv4Interface> incomingInterface) [member function]
-    cls.add_method('DoForwardUp', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Header', 'header'), param('uint16_t', 'port'), param('ns3::Ptr< ns3::Ipv4Interface >', 'incomingInterface')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::DoForwardUp(ns3::Ptr<ns3::Packet> packet, ns3::Ipv6Header header, uint16_t port) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::DoForwardUp(ns3::Ptr<ns3::Packet> packet, ns3::Address const & fromAddress, ns3::Address const & toAddress) [member function]
     cls.add_method('DoForwardUp', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv6Header', 'header'), param('uint16_t', 'port')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Address const &', 'fromAddress'), param('ns3::Address const &', 'toAddress')], 
                    visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::DoPeerClose() [member function]
     cls.add_method('DoPeerClose', 
@@ -9634,12 +9589,12 @@
     cls.add_method('GetInitialCwnd', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, visibility='protected', is_virtual=True)
+                   is_const=True, visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): uint32_t ns3::TcpSocketBase::GetInitialSSThresh() const [member function]
     cls.add_method('GetInitialSSThresh', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, visibility='protected', is_virtual=True)
+                   is_const=True, visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): ns3::Time ns3::TcpSocketBase::GetPersistTimeout() const [member function]
     cls.add_method('GetPersistTimeout', 
                    'ns3::Time', 
@@ -9665,6 +9620,11 @@
                    'bool', 
                    [], 
                    is_const=True, visibility='protected', is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::InitializeCwnd() [member function]
+    cls.add_method('InitializeCwnd', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::LastAckTimeout() [member function]
     cls.add_method('LastAckTimeout', 
                    'void', 
@@ -9764,7 +9724,7 @@
     cls.add_method('ScaleSsThresh', 
                    'void', 
                    [param('uint8_t', 'scaleFactor')], 
-                   is_pure_virtual=True, visibility='protected', is_virtual=True)
+                   visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): uint32_t ns3::TcpSocketBase::SendDataPacket(ns3::SequenceNumber32 seq, uint32_t maxSize, bool withAck) [member function]
     cls.add_method('SendDataPacket', 
                    'uint32_t', 
@@ -9814,12 +9774,12 @@
     cls.add_method('SetInitialCwnd', 
                    'void', 
                    [param('uint32_t', 'cwnd')], 
-                   is_pure_virtual=True, visibility='protected', is_virtual=True)
+                   visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::SetInitialSSThresh(uint32_t threshold) [member function]
     cls.add_method('SetInitialSSThresh', 
                    'void', 
                    [param('uint32_t', 'threshold')], 
-                   is_pure_virtual=True, visibility='protected', is_virtual=True)
+                   visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::SetPersistTimeout(ns3::Time timeout) [member function]
     cls.add_method('SetPersistTimeout', 
                    'void', 
@@ -9879,7 +9839,7 @@
     cls.add_method('Window', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, visibility='protected', is_virtual=True)
+                   visibility='protected', is_virtual=True)
     return
 
 def register_Ns3TcpSocketFactory_methods(root_module, cls):
@@ -9899,21 +9859,11 @@
     cls.add_constructor([])
     ## tcp-tahoe.h (module 'internet'): ns3::TcpTahoe::TcpTahoe(ns3::TcpTahoe const & sock) [copy constructor]
     cls.add_constructor([param('ns3::TcpTahoe const &', 'sock')])
-    ## tcp-tahoe.h (module 'internet'): int ns3::TcpTahoe::Connect(ns3::Address const & address) [member function]
-    cls.add_method('Connect', 
-                   'int', 
-                   [param('ns3::Address const &', 'address')], 
-                   is_virtual=True)
     ## tcp-tahoe.h (module 'internet'): static ns3::TypeId ns3::TcpTahoe::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## tcp-tahoe.h (module 'internet'): int ns3::TcpTahoe::Listen() [member function]
-    cls.add_method('Listen', 
-                   'int', 
-                   [], 
-                   is_virtual=True)
     ## tcp-tahoe.h (module 'internet'): void ns3::TcpTahoe::DupAck(ns3::TcpHeader const & t, uint32_t count) [member function]
     cls.add_method('DupAck', 
                    'void', 
@@ -9924,16 +9874,6 @@
                    'ns3::Ptr< ns3::TcpSocketBase >', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## tcp-tahoe.h (module 'internet'): uint32_t ns3::TcpTahoe::GetInitialCwnd() const [member function]
-    cls.add_method('GetInitialCwnd', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, visibility='protected', is_virtual=True)
-    ## tcp-tahoe.h (module 'internet'): uint32_t ns3::TcpTahoe::GetInitialSSThresh() const [member function]
-    cls.add_method('GetInitialSSThresh', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, visibility='protected', is_virtual=True)
     ## tcp-tahoe.h (module 'internet'): void ns3::TcpTahoe::NewAck(ns3::SequenceNumber32 const & seq) [member function]
     cls.add_method('NewAck', 
                    'void', 
@@ -9944,31 +9884,6 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## tcp-tahoe.h (module 'internet'): void ns3::TcpTahoe::ScaleSsThresh(uint8_t scaleFactor) [member function]
-    cls.add_method('ScaleSsThresh', 
-                   'void', 
-                   [param('uint8_t', 'scaleFactor')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-tahoe.h (module 'internet'): void ns3::TcpTahoe::SetInitialCwnd(uint32_t cwnd) [member function]
-    cls.add_method('SetInitialCwnd', 
-                   'void', 
-                   [param('uint32_t', 'cwnd')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-tahoe.h (module 'internet'): void ns3::TcpTahoe::SetInitialSSThresh(uint32_t threshold) [member function]
-    cls.add_method('SetInitialSSThresh', 
-                   'void', 
-                   [param('uint32_t', 'threshold')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-tahoe.h (module 'internet'): void ns3::TcpTahoe::SetSegSize(uint32_t size) [member function]
-    cls.add_method('SetSegSize', 
-                   'void', 
-                   [param('uint32_t', 'size')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-tahoe.h (module 'internet'): uint32_t ns3::TcpTahoe::Window() [member function]
-    cls.add_method('Window', 
-                   'uint32_t', 
-                   [], 
-                   visibility='protected', is_virtual=True)
     return
 
 def register_Ns3TcpTxBuffer_methods(root_module, cls):
@@ -10038,21 +9953,11 @@
     cls.add_constructor([])
     ## tcp-westwood.h (module 'internet'): ns3::TcpWestwood::TcpWestwood(ns3::TcpWestwood const & sock) [copy constructor]
     cls.add_constructor([param('ns3::TcpWestwood const &', 'sock')])
-    ## tcp-westwood.h (module 'internet'): int ns3::TcpWestwood::Connect(ns3::Address const & address) [member function]
-    cls.add_method('Connect', 
-                   'int', 
-                   [param('ns3::Address const &', 'address')], 
-                   is_virtual=True)
     ## tcp-westwood.h (module 'internet'): static ns3::TypeId ns3::TcpWestwood::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## tcp-westwood.h (module 'internet'): int ns3::TcpWestwood::Listen() [member function]
-    cls.add_method('Listen', 
-                   'int', 
-                   [], 
-                   is_virtual=True)
     ## tcp-westwood.h (module 'internet'): void ns3::TcpWestwood::DupAck(ns3::TcpHeader const & t, uint32_t count) [member function]
     cls.add_method('DupAck', 
                    'void', 
@@ -10068,16 +9973,6 @@
                    'ns3::Ptr< ns3::TcpSocketBase >', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## tcp-westwood.h (module 'internet'): uint32_t ns3::TcpWestwood::GetInitialCwnd() const [member function]
-    cls.add_method('GetInitialCwnd', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, visibility='protected', is_virtual=True)
-    ## tcp-westwood.h (module 'internet'): uint32_t ns3::TcpWestwood::GetInitialSSThresh() const [member function]
-    cls.add_method('GetInitialSSThresh', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, visibility='protected', is_virtual=True)
     ## tcp-westwood.h (module 'internet'): void ns3::TcpWestwood::NewAck(ns3::SequenceNumber32 const & seq) [member function]
     cls.add_method('NewAck', 
                    'void', 
@@ -10093,31 +9988,6 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## tcp-westwood.h (module 'internet'): void ns3::TcpWestwood::ScaleSsThresh(uint8_t scaleFactor) [member function]
-    cls.add_method('ScaleSsThresh', 
-                   'void', 
-                   [param('uint8_t', 'scaleFactor')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-westwood.h (module 'internet'): void ns3::TcpWestwood::SetInitialCwnd(uint32_t cwnd) [member function]
-    cls.add_method('SetInitialCwnd', 
-                   'void', 
-                   [param('uint32_t', 'cwnd')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-westwood.h (module 'internet'): void ns3::TcpWestwood::SetInitialSSThresh(uint32_t threshold) [member function]
-    cls.add_method('SetInitialSSThresh', 
-                   'void', 
-                   [param('uint32_t', 'threshold')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-westwood.h (module 'internet'): void ns3::TcpWestwood::SetSegSize(uint32_t size) [member function]
-    cls.add_method('SetSegSize', 
-                   'void', 
-                   [param('uint32_t', 'size')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-westwood.h (module 'internet'): uint32_t ns3::TcpWestwood::Window() [member function]
-    cls.add_method('Window', 
-                   'uint32_t', 
-                   [], 
-                   visibility='protected', is_virtual=True)
     return
 
 def register_Ns3Time_methods(root_module, cls):
@@ -10828,6 +10698,10 @@
     cls.add_method('PrintArpCache', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')])
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Remove(ns3::ArpCache::Entry * entry) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::ArpCache::Entry *', 'entry')])
     ## arp-cache.h (module 'internet'): void ns3::ArpCache::SetAliveTimeout(ns3::Time aliveTimeout) [member function]
     cls.add_method('SetAliveTimeout', 
                    'void', 
@@ -10864,6 +10738,10 @@
     cls.add_constructor([param('ns3::ArpCache::Entry const &', 'arg0')])
     ## arp-cache.h (module 'internet'): ns3::ArpCache::Entry::Entry(ns3::ArpCache * arp) [constructor]
     cls.add_constructor([param('ns3::ArpCache *', 'arp')])
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::ClearPendingPacket() [member function]
+    cls.add_method('ClearPendingPacket', 
+                   'void', 
+                   [])
     ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::ClearRetries() [member function]
     cls.add_method('ClearRetries', 
                    'void', 
@@ -10904,6 +10782,10 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## arp-cache.h (module 'internet'): bool ns3::ArpCache::Entry::IsPermanent() [member function]
+    cls.add_method('IsPermanent', 
+                   'bool', 
+                   [])
     ## arp-cache.h (module 'internet'): bool ns3::ArpCache::Entry::IsWaitReply() [member function]
     cls.add_method('IsWaitReply', 
                    'bool', 
@@ -10916,6 +10798,10 @@
     cls.add_method('MarkDead', 
                    'void', 
                    [])
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::MarkPermanent() [member function]
+    cls.add_method('MarkPermanent', 
+                   'void', 
+                   [])
     ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::MarkWaitReply(ns3::Ptr<ns3::Packet> waiting) [member function]
     cls.add_method('MarkWaitReply', 
                    'void', 
@@ -10924,6 +10810,10 @@
     cls.add_method('SetIpv4Address', 
                    'void', 
                    [param('ns3::Ipv4Address', 'destination')])
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::SetMacAddresss(ns3::Address macAddress) [member function]
+    cls.add_method('SetMacAddresss', 
+                   'void', 
+                   [param('ns3::Address', 'macAddress')])
     ## arp-cache.h (module 'internet'): bool ns3::ArpCache::Entry::UpdateWaitReply(ns3::Ptr<ns3::Packet> waiting) [member function]
     cls.add_method('UpdateWaitReply', 
                    'bool', 
@@ -11197,11 +11087,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -11464,10 +11364,10 @@
                    'double', 
                    [], 
                    is_virtual=True)
-    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
     cls.add_method('Interpolate', 
                    'double', 
-                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
                    visibility='private', is_virtual=True)
     ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
     cls.add_method('Validate', 
@@ -14710,7 +14610,7 @@
     cls.add_constructor([])
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice(ns3::NetDevice const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDevice const &', 'arg0')])
-    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -15469,11 +15369,6 @@
     cls.add_method('SetNode', 
                    'void', 
                    [param('ns3::Ptr< ns3::Node >', 'node')])
-    ## tcp-l4-protocol.h (module 'internet'): int ns3::TcpL4Protocol::GetProtocolNumber() const [member function]
-    cls.add_method('GetProtocolNumber', 
-                   'int', 
-                   [], 
-                   is_const=True, is_virtual=True)
     ## tcp-l4-protocol.h (module 'internet'): ns3::Ptr<ns3::Socket> ns3::TcpL4Protocol::CreateSocket() [member function]
     cls.add_method('CreateSocket', 
                    'ns3::Ptr< ns3::Socket >', 
@@ -15522,6 +15417,19 @@
     cls.add_method('Allocate6', 
                    'ns3::Ipv6EndPoint *', 
                    [param('ns3::Ipv6Address', 'localAddress'), param('uint16_t', 'localPort'), param('ns3::Ipv6Address', 'peerAddress'), param('uint16_t', 'peerPort')])
+    ## tcp-l4-protocol.h (module 'internet'): void ns3::TcpL4Protocol::SendPacket(ns3::Ptr<ns3::Packet> pkt, ns3::TcpHeader const & outgoing, ns3::Address const & saddr, ns3::Address const & daddr, ns3::Ptr<ns3::NetDevice> oif=0) const [member function]
+    cls.add_method('SendPacket', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'pkt'), param('ns3::TcpHeader const &', 'outgoing'), param('ns3::Address const &', 'saddr'), param('ns3::Address const &', 'daddr'), param('ns3::Ptr< ns3::NetDevice >', 'oif', default_value='0')], 
+                   is_const=True)
+    ## tcp-l4-protocol.h (module 'internet'): void ns3::TcpL4Protocol::AddSocket(ns3::Ptr<ns3::TcpSocketBase> socket) [member function]
+    cls.add_method('AddSocket', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TcpSocketBase >', 'socket')])
+    ## tcp-l4-protocol.h (module 'internet'): bool ns3::TcpL4Protocol::RemoveSocket(ns3::Ptr<ns3::TcpSocketBase> socket) [member function]
+    cls.add_method('RemoveSocket', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::TcpSocketBase >', 'socket')])
     ## tcp-l4-protocol.h (module 'internet'): void ns3::TcpL4Protocol::DeAllocate(ns3::Ipv4EndPoint * endPoint) [member function]
     cls.add_method('DeAllocate', 
                    'void', 
@@ -15530,23 +15438,15 @@
     cls.add_method('DeAllocate', 
                    'void', 
                    [param('ns3::Ipv6EndPoint *', 'endPoint')])
-    ## tcp-l4-protocol.h (module 'internet'): void ns3::TcpL4Protocol::Send(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address saddr, ns3::Ipv4Address daddr, uint16_t sport, uint16_t dport, ns3::Ptr<ns3::NetDevice> oif=0) [member function]
-    cls.add_method('Send', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'saddr'), param('ns3::Ipv4Address', 'daddr'), param('uint16_t', 'sport'), param('uint16_t', 'dport'), param('ns3::Ptr< ns3::NetDevice >', 'oif', default_value='0')])
-    ## tcp-l4-protocol.h (module 'internet'): void ns3::TcpL4Protocol::Send(ns3::Ptr<ns3::Packet> packet, ns3::Ipv6Address saddr, ns3::Ipv6Address daddr, uint16_t sport, uint16_t dport, ns3::Ptr<ns3::NetDevice> oif=0) [member function]
-    cls.add_method('Send', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv6Address', 'saddr'), param('ns3::Ipv6Address', 'daddr'), param('uint16_t', 'sport'), param('uint16_t', 'dport'), param('ns3::Ptr< ns3::NetDevice >', 'oif', default_value='0')])
-    ## tcp-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::TcpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, ns3::Ptr<ns3::Ipv4Interface> incomingInterface) [member function]
+    ## tcp-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::TcpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & incomingIpHeader, ns3::Ptr<ns3::Ipv4Interface> incomingInterface) [member function]
     cls.add_method('Receive', 
                    'ns3::IpL4Protocol::RxStatus', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::Ipv4Interface >', 'incomingInterface')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'incomingIpHeader'), param('ns3::Ptr< ns3::Ipv4Interface >', 'incomingInterface')], 
                    is_virtual=True)
-    ## tcp-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::TcpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & header, ns3::Ptr<ns3::Ipv6Interface> incomingInterface) [member function]
+    ## tcp-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::TcpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & incomingIpHeader, ns3::Ptr<ns3::Ipv6Interface> incomingInterface) [member function]
     cls.add_method('Receive', 
                    'ns3::IpL4Protocol::RxStatus', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Header const &', 'header'), param('ns3::Ptr< ns3::Ipv6Interface >', 'incomingInterface')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Header const &', 'incomingIpHeader'), param('ns3::Ptr< ns3::Ipv6Interface >', 'incomingInterface')], 
                    is_virtual=True)
     ## tcp-l4-protocol.h (module 'internet'): void ns3::TcpL4Protocol::ReceiveIcmp(ns3::Ipv4Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo, ns3::Ipv4Address payloadSource, ns3::Ipv4Address payloadDestination, uint8_t const * payload) [member function]
     cls.add_method('ReceiveIcmp', 
@@ -15568,6 +15468,11 @@
                    'void', 
                    [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::Ipv6Address, ns3::Ipv6Address, unsigned char, ns3::Ptr< ns3::Ipv6Route >, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
                    is_virtual=True)
+    ## tcp-l4-protocol.h (module 'internet'): int ns3::TcpL4Protocol::GetProtocolNumber() const [member function]
+    cls.add_method('GetProtocolNumber', 
+                   'int', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## tcp-l4-protocol.h (module 'internet'): ns3::Callback<void, ns3::Ptr<ns3::Packet>, ns3::Ipv4Address, ns3::Ipv4Address, unsigned char, ns3::Ptr<ns3::Ipv4Route>, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::TcpL4Protocol::GetDownTarget() const [member function]
     cls.add_method('GetDownTarget', 
                    'ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::Ipv4Address, ns3::Ipv4Address, unsigned char, ns3::Ptr< ns3::Ipv4Route >, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
@@ -15588,6 +15493,16 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
+    ## tcp-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::TcpL4Protocol::PacketReceived(ns3::Ptr<ns3::Packet> packet, ns3::TcpHeader & incomingTcpHeader, ns3::Address const & source, ns3::Address const & destination) [member function]
+    cls.add_method('PacketReceived', 
+                   'ns3::IpL4Protocol::RxStatus', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::TcpHeader &', 'incomingTcpHeader'), param('ns3::Address const &', 'source'), param('ns3::Address const &', 'destination')], 
+                   visibility='protected')
+    ## tcp-l4-protocol.h (module 'internet'): void ns3::TcpL4Protocol::NoEndPointsFound(ns3::TcpHeader const & incomingHeader, ns3::Address const & incomingSAddr, ns3::Address const & incomingDAddr) [member function]
+    cls.add_method('NoEndPointsFound', 
+                   'void', 
+                   [param('ns3::TcpHeader const &', 'incomingHeader'), param('ns3::Address const &', 'incomingSAddr'), param('ns3::Address const &', 'incomingDAddr')], 
+                   visibility='protected')
     return
 
 def register_Ns3TcpNewReno_methods(root_module, cls):
@@ -15595,21 +15510,11 @@
     cls.add_constructor([])
     ## tcp-newreno.h (module 'internet'): ns3::TcpNewReno::TcpNewReno(ns3::TcpNewReno const & sock) [copy constructor]
     cls.add_constructor([param('ns3::TcpNewReno const &', 'sock')])
-    ## tcp-newreno.h (module 'internet'): int ns3::TcpNewReno::Connect(ns3::Address const & address) [member function]
-    cls.add_method('Connect', 
-                   'int', 
-                   [param('ns3::Address const &', 'address')], 
-                   is_virtual=True)
     ## tcp-newreno.h (module 'internet'): static ns3::TypeId ns3::TcpNewReno::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## tcp-newreno.h (module 'internet'): int ns3::TcpNewReno::Listen() [member function]
-    cls.add_method('Listen', 
-                   'int', 
-                   [], 
-                   is_virtual=True)
     ## tcp-newreno.h (module 'internet'): void ns3::TcpNewReno::DupAck(ns3::TcpHeader const & t, uint32_t count) [member function]
     cls.add_method('DupAck', 
                    'void', 
@@ -15620,16 +15525,6 @@
                    'ns3::Ptr< ns3::TcpSocketBase >', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## tcp-newreno.h (module 'internet'): uint32_t ns3::TcpNewReno::GetInitialCwnd() const [member function]
-    cls.add_method('GetInitialCwnd', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, visibility='protected', is_virtual=True)
-    ## tcp-newreno.h (module 'internet'): uint32_t ns3::TcpNewReno::GetInitialSSThresh() const [member function]
-    cls.add_method('GetInitialSSThresh', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, visibility='protected', is_virtual=True)
     ## tcp-newreno.h (module 'internet'): void ns3::TcpNewReno::NewAck(ns3::SequenceNumber32 const & seq) [member function]
     cls.add_method('NewAck', 
                    'void', 
@@ -15640,31 +15535,6 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## tcp-newreno.h (module 'internet'): void ns3::TcpNewReno::ScaleSsThresh(uint8_t scaleFactor) [member function]
-    cls.add_method('ScaleSsThresh', 
-                   'void', 
-                   [param('uint8_t', 'scaleFactor')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-newreno.h (module 'internet'): void ns3::TcpNewReno::SetInitialCwnd(uint32_t cwnd) [member function]
-    cls.add_method('SetInitialCwnd', 
-                   'void', 
-                   [param('uint32_t', 'cwnd')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-newreno.h (module 'internet'): void ns3::TcpNewReno::SetInitialSSThresh(uint32_t threshold) [member function]
-    cls.add_method('SetInitialSSThresh', 
-                   'void', 
-                   [param('uint32_t', 'threshold')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-newreno.h (module 'internet'): void ns3::TcpNewReno::SetSegSize(uint32_t size) [member function]
-    cls.add_method('SetSegSize', 
-                   'void', 
-                   [param('uint32_t', 'size')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-newreno.h (module 'internet'): uint32_t ns3::TcpNewReno::Window() [member function]
-    cls.add_method('Window', 
-                   'uint32_t', 
-                   [], 
-                   visibility='protected', is_virtual=True)
     return
 
 def register_Ns3TcpReno_methods(root_module, cls):
@@ -15672,21 +15542,11 @@
     cls.add_constructor([])
     ## tcp-reno.h (module 'internet'): ns3::TcpReno::TcpReno(ns3::TcpReno const & sock) [copy constructor]
     cls.add_constructor([param('ns3::TcpReno const &', 'sock')])
-    ## tcp-reno.h (module 'internet'): int ns3::TcpReno::Connect(ns3::Address const & address) [member function]
-    cls.add_method('Connect', 
-                   'int', 
-                   [param('ns3::Address const &', 'address')], 
-                   is_virtual=True)
     ## tcp-reno.h (module 'internet'): static ns3::TypeId ns3::TcpReno::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## tcp-reno.h (module 'internet'): int ns3::TcpReno::Listen() [member function]
-    cls.add_method('Listen', 
-                   'int', 
-                   [], 
-                   is_virtual=True)
     ## tcp-reno.h (module 'internet'): void ns3::TcpReno::DupAck(ns3::TcpHeader const & t, uint32_t count) [member function]
     cls.add_method('DupAck', 
                    'void', 
@@ -15697,16 +15557,6 @@
                    'ns3::Ptr< ns3::TcpSocketBase >', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## tcp-reno.h (module 'internet'): uint32_t ns3::TcpReno::GetInitialCwnd() const [member function]
-    cls.add_method('GetInitialCwnd', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, visibility='protected', is_virtual=True)
-    ## tcp-reno.h (module 'internet'): uint32_t ns3::TcpReno::GetInitialSSThresh() const [member function]
-    cls.add_method('GetInitialSSThresh', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, visibility='protected', is_virtual=True)
     ## tcp-reno.h (module 'internet'): void ns3::TcpReno::NewAck(ns3::SequenceNumber32 const & seq) [member function]
     cls.add_method('NewAck', 
                    'void', 
@@ -15717,31 +15567,6 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## tcp-reno.h (module 'internet'): void ns3::TcpReno::ScaleSsThresh(uint8_t scaleFactor) [member function]
-    cls.add_method('ScaleSsThresh', 
-                   'void', 
-                   [param('uint8_t', 'scaleFactor')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-reno.h (module 'internet'): void ns3::TcpReno::SetInitialCwnd(uint32_t cwnd) [member function]
-    cls.add_method('SetInitialCwnd', 
-                   'void', 
-                   [param('uint32_t', 'cwnd')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-reno.h (module 'internet'): void ns3::TcpReno::SetInitialSSThresh(uint32_t threshold) [member function]
-    cls.add_method('SetInitialSSThresh', 
-                   'void', 
-                   [param('uint32_t', 'threshold')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-reno.h (module 'internet'): void ns3::TcpReno::SetSegSize(uint32_t size) [member function]
-    cls.add_method('SetSegSize', 
-                   'void', 
-                   [param('uint32_t', 'size')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-reno.h (module 'internet'): uint32_t ns3::TcpReno::Window() [member function]
-    cls.add_method('Window', 
-                   'uint32_t', 
-                   [], 
-                   visibility='protected', is_virtual=True)
     return
 
 def register_Ns3TcpRfc793_methods(root_module, cls):
@@ -16112,7 +15937,7 @@
     cls.add_method('AddBridgePort', 
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'bridgePort')])
-    ## bridge-net-device.h (module 'bridge'): void ns3::BridgeNetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    ## bridge-net-device.h (module 'bridge'): void ns3::BridgeNetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -16905,7 +16730,7 @@
     cls.add_constructor([param('ns3::LoopbackNetDevice const &', 'arg0')])
     ## loopback-net-device.h (module 'internet'): ns3::LoopbackNetDevice::LoopbackNetDevice() [constructor]
     cls.add_constructor([])
-    ## loopback-net-device.h (module 'internet'): void ns3::LoopbackNetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    ## loopback-net-device.h (module 'internet'): void ns3::LoopbackNetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -17146,6 +16971,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
@@ -17159,6 +16985,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def register_functions_ns3_internal(module, root_module):
     return
 
diff -Naur ns-3.23/src/internet/bindings/modulegen__gcc_LP64.py ns-3.24/src/internet/bindings/modulegen__gcc_LP64.py
--- ns-3.23/src/internet/bindings/modulegen__gcc_LP64.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/bindings/modulegen__gcc_LP64.py	2015-09-15 11:18:44.000000000 -0700
@@ -20,8 +20,6 @@
 def register_types(module):
     root_module = module.get_root()
     
-    ## tcp-socket.h (module 'internet'): ns3::TcpStates_t [enumeration]
-    module.add_enum('TcpStates_t', ['CLOSED', 'LISTEN', 'SYN_SENT', 'SYN_RCVD', 'ESTABLISHED', 'CLOSE_WAIT', 'LAST_ACK', 'FIN_WAIT_1', 'FIN_WAIT_2', 'CLOSING', 'TIME_WAIT', 'LAST_STATE'])
     ## address.h (module 'network'): ns3::Address [class]
     module.add_class('Address', import_from_module='ns.network')
     ## address.h (module 'network'): ns3::Address::MaxSize_e [enumeration]
@@ -120,8 +118,6 @@
     module.add_class('Ipv4AddressGenerator')
     ## ipv4-address-helper.h (module 'internet'): ns3::Ipv4AddressHelper [class]
     module.add_class('Ipv4AddressHelper')
-    ## ipv4-end-point.h (module 'internet'): ns3::Ipv4EndPoint [class]
-    module.add_class('Ipv4EndPoint')
     ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4InterfaceAddress [class]
     module.add_class('Ipv4InterfaceAddress')
     ## ipv4-interface-address.h (module 'internet'): ns3::Ipv4InterfaceAddress::InterfaceAddressScope_e [enumeration]
@@ -203,7 +199,7 @@
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
+    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SSL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
     ## internet-trace-helper.h (module 'internet'): ns3::PcapHelperForIpv4 [class]
@@ -250,8 +246,8 @@
     module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['ns3::SequenceNumber<unsigned int, int>'])
     ## traced-value.h (module 'core'): ns3::TracedValue<ns3::SequenceNumber<unsigned int, int> > [class]
     root_module['ns3::TracedValue< ns3::SequenceNumber<unsigned int, int> >'].implicitly_converts_to(root_module['ns3::SequenceNumber32'])
-    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::TcpStates_t> [class]
-    module.add_class('TracedValue', template_parameters=['ns3::TcpStates_t'])
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::TcpSocket::TcpStates_t> [class]
+    module.add_class('TracedValue', template_parameters=['ns3::TcpSocket::TcpStates_t'])
     ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int> [class]
     module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['unsigned int'])
     ## type-id.h (module 'core'): ns3::TypeId [class]
@@ -450,6 +446,8 @@
     module.add_class('TcpRxBuffer', parent=root_module['ns3::Object'])
     ## tcp-socket.h (module 'internet'): ns3::TcpSocket [class]
     module.add_class('TcpSocket', parent=root_module['ns3::Socket'])
+    ## tcp-socket.h (module 'internet'): ns3::TcpSocket::TcpStates_t [enumeration]
+    module.add_enum('TcpStates_t', ['CLOSED', 'LISTEN', 'SYN_SENT', 'SYN_RCVD', 'ESTABLISHED', 'CLOSE_WAIT', 'LAST_ACK', 'FIN_WAIT_1', 'FIN_WAIT_2', 'CLOSING', 'TIME_WAIT', 'LAST_STATE'], outer_class=root_module['ns3::TcpSocket'])
     ## tcp-socket-base.h (module 'internet'): ns3::TcpSocketBase [class]
     module.add_class('TcpSocketBase', parent=root_module['ns3::TcpSocket'])
     ## tcp-socket-factory.h (module 'internet'): ns3::TcpSocketFactory [class]
@@ -745,15 +743,12 @@
     typehandlers.add_type_alias(u'std::deque< ns3::RttHistory, std::allocator< ns3::RttHistory > >', u'ns3::RttHistory_t')
     typehandlers.add_type_alias(u'std::deque< ns3::RttHistory, std::allocator< ns3::RttHistory > >*', u'ns3::RttHistory_t*')
     typehandlers.add_type_alias(u'std::deque< ns3::RttHistory, std::allocator< ns3::RttHistory > >&', u'ns3::RttHistory_t&')
-    typehandlers.add_type_alias(u'void ( * ) ( ns3::TcpStates_t, ns3::TcpStates_t ) *', u'ns3::TcpStatesTracedValueCallback')
-    typehandlers.add_type_alias(u'void ( * ) ( ns3::TcpStates_t, ns3::TcpStates_t ) **', u'ns3::TcpStatesTracedValueCallback*')
-    typehandlers.add_type_alias(u'void ( * ) ( ns3::TcpStates_t, ns3::TcpStates_t ) *&', u'ns3::TcpStatesTracedValueCallback&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::TcpSocket::TcpStates_t, ns3::TcpSocket::TcpStates_t ) *', u'ns3::TcpStatesTracedValueCallback')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::TcpSocket::TcpStates_t, ns3::TcpSocket::TcpStates_t ) **', u'ns3::TcpStatesTracedValueCallback*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::TcpSocket::TcpStates_t, ns3::TcpSocket::TcpStates_t ) *&', u'ns3::TcpStatesTracedValueCallback&')
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >', u'ns3::SequenceNumber8')
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >*', u'ns3::SequenceNumber8*')
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >&', u'ns3::SequenceNumber8&')
-    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *', u'ns3::SequenceNumber32TracedValueCallback')
-    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) **', u'ns3::SequenceNumber32TracedValueCallback*')
-    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *&', u'ns3::SequenceNumber32TracedValueCallback&')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -767,6 +762,12 @@
     register_types_ns3_Hash(nested_module)
     
     
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
+    
     ## Register a nested module for the namespace internal
     
     nested_module = module.add_cpp_namespace('internal')
@@ -807,6 +808,40 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *', u'ns3::TracedValueCallback::Double')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) **', u'ns3::TracedValueCallback::Double*')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *&', u'ns3::TracedValueCallback::Double&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *', u'ns3::TracedValueCallback::SequenceNumber32')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) **', u'ns3::TracedValueCallback::SequenceNumber32*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *&', u'ns3::TracedValueCallback::SequenceNumber32&')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *', u'ns3::TracedValueCallback::Int8')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) **', u'ns3::TracedValueCallback::Int8*')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *&', u'ns3::TracedValueCallback::Int8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *', u'ns3::TracedValueCallback::Uint8')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) **', u'ns3::TracedValueCallback::Uint8*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *&', u'ns3::TracedValueCallback::Uint8&')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *', u'ns3::TracedValueCallback::Int32')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) **', u'ns3::TracedValueCallback::Int32*')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *&', u'ns3::TracedValueCallback::Int32&')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *', u'ns3::TracedValueCallback::Bool')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) **', u'ns3::TracedValueCallback::Bool*')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *&', u'ns3::TracedValueCallback::Bool&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *', u'ns3::TracedValueCallback::Uint16')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) **', u'ns3::TracedValueCallback::Uint16*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *&', u'ns3::TracedValueCallback::Uint16&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *', u'ns3::TracedValueCallback::Uint32')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) **', u'ns3::TracedValueCallback::Uint32*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *&', u'ns3::TracedValueCallback::Uint32&')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *', u'ns3::TracedValueCallback::Int16')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) **', u'ns3::TracedValueCallback::Int16*')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *&', u'ns3::TracedValueCallback::Int16&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_types_ns3_internal(module):
     root_module = module.get_root()
     
@@ -847,7 +882,6 @@
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
     register_Ns3Ipv4AddressGenerator_methods(root_module, root_module['ns3::Ipv4AddressGenerator'])
     register_Ns3Ipv4AddressHelper_methods(root_module, root_module['ns3::Ipv4AddressHelper'])
-    register_Ns3Ipv4EndPoint_methods(root_module, root_module['ns3::Ipv4EndPoint'])
     register_Ns3Ipv4InterfaceAddress_methods(root_module, root_module['ns3::Ipv4InterfaceAddress'])
     register_Ns3Ipv4InterfaceContainer_methods(root_module, root_module['ns3::Ipv4InterfaceContainer'])
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
@@ -899,7 +933,7 @@
     register_Ns3TracedValue__Bool_methods(root_module, root_module['ns3::TracedValue< bool >'])
     register_Ns3TracedValue__Double_methods(root_module, root_module['ns3::TracedValue< double >'])
     register_Ns3TracedValue__Ns3SequenceNumber__lt__unsigned_int__int__gt___methods(root_module, root_module['ns3::TracedValue< ns3::SequenceNumber<unsigned int, int> >'])
-    register_Ns3TracedValue__Ns3TcpStates_t_methods(root_module, root_module['ns3::TracedValue< ns3::TcpStates_t >'])
+    register_Ns3TracedValue__Ns3TcpSocketTcpStates_t_methods(root_module, root_module['ns3::TracedValue< ns3::TcpSocket::TcpStates_t >'])
     register_Ns3TracedValue__Unsigned_int_methods(root_module, root_module['ns3::TracedValue< unsigned int >'])
     register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
     register_Ns3TypeIdAttributeInformation_methods(root_module, root_module['ns3::TypeId::AttributeInformation'])
@@ -1472,17 +1506,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -1504,11 +1538,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -1518,16 +1547,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -1765,14 +1784,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -1833,11 +1856,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CandidateQueue_methods(root_module, cls):
@@ -2515,65 +2533,6 @@
                    [param('ns3::Ipv4Address', 'network'), param('ns3::Ipv4Mask', 'mask'), param('ns3::Ipv4Address', 'base', default_value='"0.0.0.1"')])
     return
 
-def register_Ns3Ipv4EndPoint_methods(root_module, cls):
-    ## ipv4-end-point.h (module 'internet'): ns3::Ipv4EndPoint::Ipv4EndPoint(ns3::Ipv4EndPoint const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ipv4EndPoint const &', 'arg0')])
-    ## ipv4-end-point.h (module 'internet'): ns3::Ipv4EndPoint::Ipv4EndPoint(ns3::Ipv4Address address, uint16_t port) [constructor]
-    cls.add_constructor([param('ns3::Ipv4Address', 'address'), param('uint16_t', 'port')])
-    ## ipv4-end-point.h (module 'internet'): void ns3::Ipv4EndPoint::BindToNetDevice(ns3::Ptr<ns3::NetDevice> netdevice) [member function]
-    cls.add_method('BindToNetDevice', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::NetDevice >', 'netdevice')])
-    ## ipv4-end-point.h (module 'internet'): void ns3::Ipv4EndPoint::ForwardIcmp(ns3::Ipv4Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo) [member function]
-    cls.add_method('ForwardIcmp', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'icmpSource'), param('uint8_t', 'icmpTtl'), param('uint8_t', 'icmpType'), param('uint8_t', 'icmpCode'), param('uint32_t', 'icmpInfo')])
-    ## ipv4-end-point.h (module 'internet'): void ns3::Ipv4EndPoint::ForwardUp(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, uint16_t sport, ns3::Ptr<ns3::Ipv4Interface> incomingInterface) [member function]
-    cls.add_method('ForwardUp', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('uint16_t', 'sport'), param('ns3::Ptr< ns3::Ipv4Interface >', 'incomingInterface')])
-    ## ipv4-end-point.h (module 'internet'): ns3::Ptr<ns3::NetDevice> ns3::Ipv4EndPoint::GetBoundNetDevice() [member function]
-    cls.add_method('GetBoundNetDevice', 
-                   'ns3::Ptr< ns3::NetDevice >', 
-                   [])
-    ## ipv4-end-point.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4EndPoint::GetLocalAddress() [member function]
-    cls.add_method('GetLocalAddress', 
-                   'ns3::Ipv4Address', 
-                   [])
-    ## ipv4-end-point.h (module 'internet'): uint16_t ns3::Ipv4EndPoint::GetLocalPort() [member function]
-    cls.add_method('GetLocalPort', 
-                   'uint16_t', 
-                   [])
-    ## ipv4-end-point.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4EndPoint::GetPeerAddress() [member function]
-    cls.add_method('GetPeerAddress', 
-                   'ns3::Ipv4Address', 
-                   [])
-    ## ipv4-end-point.h (module 'internet'): uint16_t ns3::Ipv4EndPoint::GetPeerPort() [member function]
-    cls.add_method('GetPeerPort', 
-                   'uint16_t', 
-                   [])
-    ## ipv4-end-point.h (module 'internet'): void ns3::Ipv4EndPoint::SetDestroyCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
-    cls.add_method('SetDestroyCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
-    ## ipv4-end-point.h (module 'internet'): void ns3::Ipv4EndPoint::SetIcmpCallback(ns3::Callback<void, ns3::Ipv4Address, unsigned char, unsigned char, unsigned char, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
-    cls.add_method('SetIcmpCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::Ipv4Address, unsigned char, unsigned char, unsigned char, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
-    ## ipv4-end-point.h (module 'internet'): void ns3::Ipv4EndPoint::SetLocalAddress(ns3::Ipv4Address address) [member function]
-    cls.add_method('SetLocalAddress', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'address')])
-    ## ipv4-end-point.h (module 'internet'): void ns3::Ipv4EndPoint::SetPeer(ns3::Ipv4Address address, uint16_t port) [member function]
-    cls.add_method('SetPeer', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'address'), param('uint16_t', 'port')])
-    ## ipv4-end-point.h (module 'internet'): void ns3::Ipv4EndPoint::SetRxCallback(ns3::Callback<void, ns3::Ptr<ns3::Packet>, ns3::Ipv4Header, unsigned short, ns3::Ptr<ns3::Ipv4Interface>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
-    cls.add_method('SetRxCallback', 
-                   'void', 
-                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::Ipv4Header, unsigned short, ns3::Ptr< ns3::Ipv4Interface >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
-    return
-
 def register_Ns3Ipv4InterfaceAddress_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_output_stream_operator()
@@ -4205,7 +4164,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -4223,10 +4182,10 @@
     cls.add_method('Close', 
                    'void', 
                    [])
-    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
+    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t & packets, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
     cls.add_method('Diff', 
                    'bool', 
-                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
+                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t &', 'packets'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
                    is_static=True)
     ## pcap-file.h (module 'network'): bool ns3::PcapFile::Eof() const [member function]
     cls.add_method('Eof', 
@@ -4290,10 +4249,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header & header, ns3::Ptr<ns3::Packet const> p) [member function]
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header const & header, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file.h (module 'network'): ns3::PcapFile::SNAPLEN_DEFAULT [variable]
     cls.add_static_attribute('SNAPLEN_DEFAULT', 'uint32_t const', is_const=True)
     ## pcap-file.h (module 'network'): ns3::PcapFile::ZONE_DEFAULT [variable]
@@ -4751,10 +4710,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -5047,38 +5006,38 @@
                    [param('ns3::SequenceNumber< unsigned int, int > const &', 'v')])
     return
 
-def register_Ns3TracedValue__Ns3TcpStates_t_methods(root_module, cls):
-    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::TcpStates_t>::TracedValue() [constructor]
+def register_Ns3TracedValue__Ns3TcpSocketTcpStates_t_methods(root_module, cls):
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::TcpSocket::TcpStates_t>::TracedValue() [constructor]
     cls.add_constructor([])
-    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::TcpStates_t>::TracedValue(ns3::TracedValue<ns3::TcpStates_t> const & o) [copy constructor]
-    cls.add_constructor([param('ns3::TracedValue< ns3::TcpStates_t > const &', 'o')])
-    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::TcpStates_t>::TracedValue(ns3::TcpStates_t const & v) [constructor]
-    cls.add_constructor([param('ns3::TcpStates_t const &', 'v')])
-    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::TcpStates_t>::Connect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::TcpSocket::TcpStates_t>::TracedValue(ns3::TracedValue<ns3::TcpSocket::TcpStates_t> const & o) [copy constructor]
+    cls.add_constructor([param('ns3::TracedValue< ns3::TcpSocket::TcpStates_t > const &', 'o')])
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::TcpSocket::TcpStates_t>::TracedValue(ns3::TcpSocket::TcpStates_t const & v) [constructor]
+    cls.add_constructor([param('ns3::TcpSocket::TcpStates_t const &', 'v')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::TcpSocket::TcpStates_t>::Connect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
     cls.add_method('Connect', 
                    'void', 
                    [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
-    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::TcpStates_t>::ConnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::TcpSocket::TcpStates_t>::ConnectWithoutContext(ns3::CallbackBase const & cb) [member function]
     cls.add_method('ConnectWithoutContext', 
                    'void', 
                    [param('ns3::CallbackBase const &', 'cb')])
-    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::TcpStates_t>::Disconnect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::TcpSocket::TcpStates_t>::Disconnect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
     cls.add_method('Disconnect', 
                    'void', 
                    [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
-    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::TcpStates_t>::DisconnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::TcpSocket::TcpStates_t>::DisconnectWithoutContext(ns3::CallbackBase const & cb) [member function]
     cls.add_method('DisconnectWithoutContext', 
                    'void', 
                    [param('ns3::CallbackBase const &', 'cb')])
-    ## traced-value.h (module 'core'): ns3::TcpStates_t ns3::TracedValue<ns3::TcpStates_t>::Get() const [member function]
+    ## traced-value.h (module 'core'): ns3::TcpSocket::TcpStates_t ns3::TracedValue<ns3::TcpSocket::TcpStates_t>::Get() const [member function]
     cls.add_method('Get', 
-                   'ns3::TcpStates_t', 
+                   'ns3::TcpSocket::TcpStates_t', 
                    [], 
                    is_const=True)
-    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::TcpStates_t>::Set(ns3::TcpStates_t const & v) [member function]
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::TcpSocket::TcpStates_t>::Set(ns3::TcpSocket::TcpStates_t const & v) [member function]
     cls.add_method('Set', 
                    'void', 
-                   [param('ns3::TcpStates_t const &', 'v')])
+                   [param('ns3::TcpSocket::TcpStates_t const &', 'v')])
     return
 
 def register_Ns3TracedValue__Unsigned_int_methods(root_module, cls):
@@ -7651,10 +7610,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header & header, ns3::Ptr<ns3::Packet const> p) [member function]
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header const & header, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('ns3::Time', 't'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('ns3::Time', 't'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, uint8_t const * buffer, uint32_t length) [member function]
     cls.add_method('Write', 
                    'void', 
@@ -8875,6 +8834,7 @@
     return
 
 def register_Ns3TcpHeader_methods(root_module, cls):
+    cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     ## tcp-header.h (module 'internet'): ns3::TcpHeader::TcpHeader(ns3::TcpHeader const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::TcpHeader const &', 'arg0')])
@@ -8963,18 +8923,18 @@
                    'bool', 
                    [param('uint8_t', 'kind')], 
                    is_const=True)
-    ## tcp-header.h (module 'internet'): void ns3::TcpHeader::InitializeChecksum(ns3::Ipv4Address source, ns3::Ipv4Address destination, uint8_t protocol) [member function]
+    ## tcp-header.h (module 'internet'): void ns3::TcpHeader::InitializeChecksum(ns3::Ipv4Address const & source, ns3::Ipv4Address const & destination, uint8_t protocol) [member function]
     cls.add_method('InitializeChecksum', 
                    'void', 
-                   [param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination'), param('uint8_t', 'protocol')])
-    ## tcp-header.h (module 'internet'): void ns3::TcpHeader::InitializeChecksum(ns3::Ipv6Address source, ns3::Ipv6Address destination, uint8_t protocol) [member function]
+                   [param('ns3::Ipv4Address const &', 'source'), param('ns3::Ipv4Address const &', 'destination'), param('uint8_t', 'protocol')])
+    ## tcp-header.h (module 'internet'): void ns3::TcpHeader::InitializeChecksum(ns3::Ipv6Address const & source, ns3::Ipv6Address const & destination, uint8_t protocol) [member function]
     cls.add_method('InitializeChecksum', 
                    'void', 
-                   [param('ns3::Ipv6Address', 'source'), param('ns3::Ipv6Address', 'destination'), param('uint8_t', 'protocol')])
-    ## tcp-header.h (module 'internet'): void ns3::TcpHeader::InitializeChecksum(ns3::Address source, ns3::Address destination, uint8_t protocol) [member function]
+                   [param('ns3::Ipv6Address const &', 'source'), param('ns3::Ipv6Address const &', 'destination'), param('uint8_t', 'protocol')])
+    ## tcp-header.h (module 'internet'): void ns3::TcpHeader::InitializeChecksum(ns3::Address const & source, ns3::Address const & destination, uint8_t protocol) [member function]
     cls.add_method('InitializeChecksum', 
                    'void', 
-                   [param('ns3::Address', 'source'), param('ns3::Address', 'destination'), param('uint8_t', 'protocol')])
+                   [param('ns3::Address const &', 'source'), param('ns3::Address const &', 'destination'), param('uint8_t', 'protocol')])
     ## tcp-header.h (module 'internet'): bool ns3::TcpHeader::IsChecksumOk() const [member function]
     cls.add_method('IsChecksumOk', 
                    'bool', 
@@ -9550,15 +9510,10 @@
                    'int', 
                    [], 
                    visibility='protected')
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::DoForwardUp(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Header header, uint16_t port, ns3::Ptr<ns3::Ipv4Interface> incomingInterface) [member function]
-    cls.add_method('DoForwardUp', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Header', 'header'), param('uint16_t', 'port'), param('ns3::Ptr< ns3::Ipv4Interface >', 'incomingInterface')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::DoForwardUp(ns3::Ptr<ns3::Packet> packet, ns3::Ipv6Header header, uint16_t port) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::DoForwardUp(ns3::Ptr<ns3::Packet> packet, ns3::Address const & fromAddress, ns3::Address const & toAddress) [member function]
     cls.add_method('DoForwardUp', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv6Header', 'header'), param('uint16_t', 'port')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Address const &', 'fromAddress'), param('ns3::Address const &', 'toAddress')], 
                    visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::DoPeerClose() [member function]
     cls.add_method('DoPeerClose', 
@@ -9634,12 +9589,12 @@
     cls.add_method('GetInitialCwnd', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, visibility='protected', is_virtual=True)
+                   is_const=True, visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): uint32_t ns3::TcpSocketBase::GetInitialSSThresh() const [member function]
     cls.add_method('GetInitialSSThresh', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_const=True, visibility='protected', is_virtual=True)
+                   is_const=True, visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): ns3::Time ns3::TcpSocketBase::GetPersistTimeout() const [member function]
     cls.add_method('GetPersistTimeout', 
                    'ns3::Time', 
@@ -9665,6 +9620,11 @@
                    'bool', 
                    [], 
                    is_const=True, visibility='protected', is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::InitializeCwnd() [member function]
+    cls.add_method('InitializeCwnd', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::LastAckTimeout() [member function]
     cls.add_method('LastAckTimeout', 
                    'void', 
@@ -9764,7 +9724,7 @@
     cls.add_method('ScaleSsThresh', 
                    'void', 
                    [param('uint8_t', 'scaleFactor')], 
-                   is_pure_virtual=True, visibility='protected', is_virtual=True)
+                   visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): uint32_t ns3::TcpSocketBase::SendDataPacket(ns3::SequenceNumber32 seq, uint32_t maxSize, bool withAck) [member function]
     cls.add_method('SendDataPacket', 
                    'uint32_t', 
@@ -9814,12 +9774,12 @@
     cls.add_method('SetInitialCwnd', 
                    'void', 
                    [param('uint32_t', 'cwnd')], 
-                   is_pure_virtual=True, visibility='protected', is_virtual=True)
+                   visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::SetInitialSSThresh(uint32_t threshold) [member function]
     cls.add_method('SetInitialSSThresh', 
                    'void', 
                    [param('uint32_t', 'threshold')], 
-                   is_pure_virtual=True, visibility='protected', is_virtual=True)
+                   visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::SetPersistTimeout(ns3::Time timeout) [member function]
     cls.add_method('SetPersistTimeout', 
                    'void', 
@@ -9879,7 +9839,7 @@
     cls.add_method('Window', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, visibility='protected', is_virtual=True)
+                   visibility='protected', is_virtual=True)
     return
 
 def register_Ns3TcpSocketFactory_methods(root_module, cls):
@@ -9899,21 +9859,11 @@
     cls.add_constructor([])
     ## tcp-tahoe.h (module 'internet'): ns3::TcpTahoe::TcpTahoe(ns3::TcpTahoe const & sock) [copy constructor]
     cls.add_constructor([param('ns3::TcpTahoe const &', 'sock')])
-    ## tcp-tahoe.h (module 'internet'): int ns3::TcpTahoe::Connect(ns3::Address const & address) [member function]
-    cls.add_method('Connect', 
-                   'int', 
-                   [param('ns3::Address const &', 'address')], 
-                   is_virtual=True)
     ## tcp-tahoe.h (module 'internet'): static ns3::TypeId ns3::TcpTahoe::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## tcp-tahoe.h (module 'internet'): int ns3::TcpTahoe::Listen() [member function]
-    cls.add_method('Listen', 
-                   'int', 
-                   [], 
-                   is_virtual=True)
     ## tcp-tahoe.h (module 'internet'): void ns3::TcpTahoe::DupAck(ns3::TcpHeader const & t, uint32_t count) [member function]
     cls.add_method('DupAck', 
                    'void', 
@@ -9924,16 +9874,6 @@
                    'ns3::Ptr< ns3::TcpSocketBase >', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## tcp-tahoe.h (module 'internet'): uint32_t ns3::TcpTahoe::GetInitialCwnd() const [member function]
-    cls.add_method('GetInitialCwnd', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, visibility='protected', is_virtual=True)
-    ## tcp-tahoe.h (module 'internet'): uint32_t ns3::TcpTahoe::GetInitialSSThresh() const [member function]
-    cls.add_method('GetInitialSSThresh', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, visibility='protected', is_virtual=True)
     ## tcp-tahoe.h (module 'internet'): void ns3::TcpTahoe::NewAck(ns3::SequenceNumber32 const & seq) [member function]
     cls.add_method('NewAck', 
                    'void', 
@@ -9944,31 +9884,6 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## tcp-tahoe.h (module 'internet'): void ns3::TcpTahoe::ScaleSsThresh(uint8_t scaleFactor) [member function]
-    cls.add_method('ScaleSsThresh', 
-                   'void', 
-                   [param('uint8_t', 'scaleFactor')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-tahoe.h (module 'internet'): void ns3::TcpTahoe::SetInitialCwnd(uint32_t cwnd) [member function]
-    cls.add_method('SetInitialCwnd', 
-                   'void', 
-                   [param('uint32_t', 'cwnd')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-tahoe.h (module 'internet'): void ns3::TcpTahoe::SetInitialSSThresh(uint32_t threshold) [member function]
-    cls.add_method('SetInitialSSThresh', 
-                   'void', 
-                   [param('uint32_t', 'threshold')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-tahoe.h (module 'internet'): void ns3::TcpTahoe::SetSegSize(uint32_t size) [member function]
-    cls.add_method('SetSegSize', 
-                   'void', 
-                   [param('uint32_t', 'size')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-tahoe.h (module 'internet'): uint32_t ns3::TcpTahoe::Window() [member function]
-    cls.add_method('Window', 
-                   'uint32_t', 
-                   [], 
-                   visibility='protected', is_virtual=True)
     return
 
 def register_Ns3TcpTxBuffer_methods(root_module, cls):
@@ -10038,21 +9953,11 @@
     cls.add_constructor([])
     ## tcp-westwood.h (module 'internet'): ns3::TcpWestwood::TcpWestwood(ns3::TcpWestwood const & sock) [copy constructor]
     cls.add_constructor([param('ns3::TcpWestwood const &', 'sock')])
-    ## tcp-westwood.h (module 'internet'): int ns3::TcpWestwood::Connect(ns3::Address const & address) [member function]
-    cls.add_method('Connect', 
-                   'int', 
-                   [param('ns3::Address const &', 'address')], 
-                   is_virtual=True)
     ## tcp-westwood.h (module 'internet'): static ns3::TypeId ns3::TcpWestwood::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## tcp-westwood.h (module 'internet'): int ns3::TcpWestwood::Listen() [member function]
-    cls.add_method('Listen', 
-                   'int', 
-                   [], 
-                   is_virtual=True)
     ## tcp-westwood.h (module 'internet'): void ns3::TcpWestwood::DupAck(ns3::TcpHeader const & t, uint32_t count) [member function]
     cls.add_method('DupAck', 
                    'void', 
@@ -10068,16 +9973,6 @@
                    'ns3::Ptr< ns3::TcpSocketBase >', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## tcp-westwood.h (module 'internet'): uint32_t ns3::TcpWestwood::GetInitialCwnd() const [member function]
-    cls.add_method('GetInitialCwnd', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, visibility='protected', is_virtual=True)
-    ## tcp-westwood.h (module 'internet'): uint32_t ns3::TcpWestwood::GetInitialSSThresh() const [member function]
-    cls.add_method('GetInitialSSThresh', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, visibility='protected', is_virtual=True)
     ## tcp-westwood.h (module 'internet'): void ns3::TcpWestwood::NewAck(ns3::SequenceNumber32 const & seq) [member function]
     cls.add_method('NewAck', 
                    'void', 
@@ -10093,31 +9988,6 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## tcp-westwood.h (module 'internet'): void ns3::TcpWestwood::ScaleSsThresh(uint8_t scaleFactor) [member function]
-    cls.add_method('ScaleSsThresh', 
-                   'void', 
-                   [param('uint8_t', 'scaleFactor')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-westwood.h (module 'internet'): void ns3::TcpWestwood::SetInitialCwnd(uint32_t cwnd) [member function]
-    cls.add_method('SetInitialCwnd', 
-                   'void', 
-                   [param('uint32_t', 'cwnd')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-westwood.h (module 'internet'): void ns3::TcpWestwood::SetInitialSSThresh(uint32_t threshold) [member function]
-    cls.add_method('SetInitialSSThresh', 
-                   'void', 
-                   [param('uint32_t', 'threshold')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-westwood.h (module 'internet'): void ns3::TcpWestwood::SetSegSize(uint32_t size) [member function]
-    cls.add_method('SetSegSize', 
-                   'void', 
-                   [param('uint32_t', 'size')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-westwood.h (module 'internet'): uint32_t ns3::TcpWestwood::Window() [member function]
-    cls.add_method('Window', 
-                   'uint32_t', 
-                   [], 
-                   visibility='protected', is_virtual=True)
     return
 
 def register_Ns3Time_methods(root_module, cls):
@@ -10828,6 +10698,10 @@
     cls.add_method('PrintArpCache', 
                    'void', 
                    [param('ns3::Ptr< ns3::OutputStreamWrapper >', 'stream')])
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Remove(ns3::ArpCache::Entry * entry) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::ArpCache::Entry *', 'entry')])
     ## arp-cache.h (module 'internet'): void ns3::ArpCache::SetAliveTimeout(ns3::Time aliveTimeout) [member function]
     cls.add_method('SetAliveTimeout', 
                    'void', 
@@ -10864,6 +10738,10 @@
     cls.add_constructor([param('ns3::ArpCache::Entry const &', 'arg0')])
     ## arp-cache.h (module 'internet'): ns3::ArpCache::Entry::Entry(ns3::ArpCache * arp) [constructor]
     cls.add_constructor([param('ns3::ArpCache *', 'arp')])
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::ClearPendingPacket() [member function]
+    cls.add_method('ClearPendingPacket', 
+                   'void', 
+                   [])
     ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::ClearRetries() [member function]
     cls.add_method('ClearRetries', 
                    'void', 
@@ -10904,6 +10782,10 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## arp-cache.h (module 'internet'): bool ns3::ArpCache::Entry::IsPermanent() [member function]
+    cls.add_method('IsPermanent', 
+                   'bool', 
+                   [])
     ## arp-cache.h (module 'internet'): bool ns3::ArpCache::Entry::IsWaitReply() [member function]
     cls.add_method('IsWaitReply', 
                    'bool', 
@@ -10916,6 +10798,10 @@
     cls.add_method('MarkDead', 
                    'void', 
                    [])
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::MarkPermanent() [member function]
+    cls.add_method('MarkPermanent', 
+                   'void', 
+                   [])
     ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::MarkWaitReply(ns3::Ptr<ns3::Packet> waiting) [member function]
     cls.add_method('MarkWaitReply', 
                    'void', 
@@ -10924,6 +10810,10 @@
     cls.add_method('SetIpv4Address', 
                    'void', 
                    [param('ns3::Ipv4Address', 'destination')])
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::SetMacAddresss(ns3::Address macAddress) [member function]
+    cls.add_method('SetMacAddresss', 
+                   'void', 
+                   [param('ns3::Address', 'macAddress')])
     ## arp-cache.h (module 'internet'): bool ns3::ArpCache::Entry::UpdateWaitReply(ns3::Ptr<ns3::Packet> waiting) [member function]
     cls.add_method('UpdateWaitReply', 
                    'bool', 
@@ -11197,11 +11087,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -11464,10 +11364,10 @@
                    'double', 
                    [], 
                    is_virtual=True)
-    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
     cls.add_method('Interpolate', 
                    'double', 
-                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
                    visibility='private', is_virtual=True)
     ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
     cls.add_method('Validate', 
@@ -14710,7 +14610,7 @@
     cls.add_constructor([])
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice(ns3::NetDevice const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDevice const &', 'arg0')])
-    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -15469,11 +15369,6 @@
     cls.add_method('SetNode', 
                    'void', 
                    [param('ns3::Ptr< ns3::Node >', 'node')])
-    ## tcp-l4-protocol.h (module 'internet'): int ns3::TcpL4Protocol::GetProtocolNumber() const [member function]
-    cls.add_method('GetProtocolNumber', 
-                   'int', 
-                   [], 
-                   is_const=True, is_virtual=True)
     ## tcp-l4-protocol.h (module 'internet'): ns3::Ptr<ns3::Socket> ns3::TcpL4Protocol::CreateSocket() [member function]
     cls.add_method('CreateSocket', 
                    'ns3::Ptr< ns3::Socket >', 
@@ -15522,6 +15417,19 @@
     cls.add_method('Allocate6', 
                    'ns3::Ipv6EndPoint *', 
                    [param('ns3::Ipv6Address', 'localAddress'), param('uint16_t', 'localPort'), param('ns3::Ipv6Address', 'peerAddress'), param('uint16_t', 'peerPort')])
+    ## tcp-l4-protocol.h (module 'internet'): void ns3::TcpL4Protocol::SendPacket(ns3::Ptr<ns3::Packet> pkt, ns3::TcpHeader const & outgoing, ns3::Address const & saddr, ns3::Address const & daddr, ns3::Ptr<ns3::NetDevice> oif=0) const [member function]
+    cls.add_method('SendPacket', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'pkt'), param('ns3::TcpHeader const &', 'outgoing'), param('ns3::Address const &', 'saddr'), param('ns3::Address const &', 'daddr'), param('ns3::Ptr< ns3::NetDevice >', 'oif', default_value='0')], 
+                   is_const=True)
+    ## tcp-l4-protocol.h (module 'internet'): void ns3::TcpL4Protocol::AddSocket(ns3::Ptr<ns3::TcpSocketBase> socket) [member function]
+    cls.add_method('AddSocket', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TcpSocketBase >', 'socket')])
+    ## tcp-l4-protocol.h (module 'internet'): bool ns3::TcpL4Protocol::RemoveSocket(ns3::Ptr<ns3::TcpSocketBase> socket) [member function]
+    cls.add_method('RemoveSocket', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::TcpSocketBase >', 'socket')])
     ## tcp-l4-protocol.h (module 'internet'): void ns3::TcpL4Protocol::DeAllocate(ns3::Ipv4EndPoint * endPoint) [member function]
     cls.add_method('DeAllocate', 
                    'void', 
@@ -15530,23 +15438,15 @@
     cls.add_method('DeAllocate', 
                    'void', 
                    [param('ns3::Ipv6EndPoint *', 'endPoint')])
-    ## tcp-l4-protocol.h (module 'internet'): void ns3::TcpL4Protocol::Send(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address saddr, ns3::Ipv4Address daddr, uint16_t sport, uint16_t dport, ns3::Ptr<ns3::NetDevice> oif=0) [member function]
-    cls.add_method('Send', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'saddr'), param('ns3::Ipv4Address', 'daddr'), param('uint16_t', 'sport'), param('uint16_t', 'dport'), param('ns3::Ptr< ns3::NetDevice >', 'oif', default_value='0')])
-    ## tcp-l4-protocol.h (module 'internet'): void ns3::TcpL4Protocol::Send(ns3::Ptr<ns3::Packet> packet, ns3::Ipv6Address saddr, ns3::Ipv6Address daddr, uint16_t sport, uint16_t dport, ns3::Ptr<ns3::NetDevice> oif=0) [member function]
-    cls.add_method('Send', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv6Address', 'saddr'), param('ns3::Ipv6Address', 'daddr'), param('uint16_t', 'sport'), param('uint16_t', 'dport'), param('ns3::Ptr< ns3::NetDevice >', 'oif', default_value='0')])
-    ## tcp-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::TcpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, ns3::Ptr<ns3::Ipv4Interface> incomingInterface) [member function]
+    ## tcp-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::TcpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & incomingIpHeader, ns3::Ptr<ns3::Ipv4Interface> incomingInterface) [member function]
     cls.add_method('Receive', 
                    'ns3::IpL4Protocol::RxStatus', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::Ipv4Interface >', 'incomingInterface')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'incomingIpHeader'), param('ns3::Ptr< ns3::Ipv4Interface >', 'incomingInterface')], 
                    is_virtual=True)
-    ## tcp-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::TcpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & header, ns3::Ptr<ns3::Ipv6Interface> incomingInterface) [member function]
+    ## tcp-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::TcpL4Protocol::Receive(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & incomingIpHeader, ns3::Ptr<ns3::Ipv6Interface> incomingInterface) [member function]
     cls.add_method('Receive', 
                    'ns3::IpL4Protocol::RxStatus', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Header const &', 'header'), param('ns3::Ptr< ns3::Ipv6Interface >', 'incomingInterface')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Header const &', 'incomingIpHeader'), param('ns3::Ptr< ns3::Ipv6Interface >', 'incomingInterface')], 
                    is_virtual=True)
     ## tcp-l4-protocol.h (module 'internet'): void ns3::TcpL4Protocol::ReceiveIcmp(ns3::Ipv4Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo, ns3::Ipv4Address payloadSource, ns3::Ipv4Address payloadDestination, uint8_t const * payload) [member function]
     cls.add_method('ReceiveIcmp', 
@@ -15568,6 +15468,11 @@
                    'void', 
                    [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::Ipv6Address, ns3::Ipv6Address, unsigned char, ns3::Ptr< ns3::Ipv6Route >, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
                    is_virtual=True)
+    ## tcp-l4-protocol.h (module 'internet'): int ns3::TcpL4Protocol::GetProtocolNumber() const [member function]
+    cls.add_method('GetProtocolNumber', 
+                   'int', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## tcp-l4-protocol.h (module 'internet'): ns3::Callback<void, ns3::Ptr<ns3::Packet>, ns3::Ipv4Address, ns3::Ipv4Address, unsigned char, ns3::Ptr<ns3::Ipv4Route>, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::TcpL4Protocol::GetDownTarget() const [member function]
     cls.add_method('GetDownTarget', 
                    'ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::Ipv4Address, ns3::Ipv4Address, unsigned char, ns3::Ptr< ns3::Ipv4Route >, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
@@ -15588,6 +15493,16 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
+    ## tcp-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::RxStatus ns3::TcpL4Protocol::PacketReceived(ns3::Ptr<ns3::Packet> packet, ns3::TcpHeader & incomingTcpHeader, ns3::Address const & source, ns3::Address const & destination) [member function]
+    cls.add_method('PacketReceived', 
+                   'ns3::IpL4Protocol::RxStatus', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::TcpHeader &', 'incomingTcpHeader'), param('ns3::Address const &', 'source'), param('ns3::Address const &', 'destination')], 
+                   visibility='protected')
+    ## tcp-l4-protocol.h (module 'internet'): void ns3::TcpL4Protocol::NoEndPointsFound(ns3::TcpHeader const & incomingHeader, ns3::Address const & incomingSAddr, ns3::Address const & incomingDAddr) [member function]
+    cls.add_method('NoEndPointsFound', 
+                   'void', 
+                   [param('ns3::TcpHeader const &', 'incomingHeader'), param('ns3::Address const &', 'incomingSAddr'), param('ns3::Address const &', 'incomingDAddr')], 
+                   visibility='protected')
     return
 
 def register_Ns3TcpNewReno_methods(root_module, cls):
@@ -15595,21 +15510,11 @@
     cls.add_constructor([])
     ## tcp-newreno.h (module 'internet'): ns3::TcpNewReno::TcpNewReno(ns3::TcpNewReno const & sock) [copy constructor]
     cls.add_constructor([param('ns3::TcpNewReno const &', 'sock')])
-    ## tcp-newreno.h (module 'internet'): int ns3::TcpNewReno::Connect(ns3::Address const & address) [member function]
-    cls.add_method('Connect', 
-                   'int', 
-                   [param('ns3::Address const &', 'address')], 
-                   is_virtual=True)
     ## tcp-newreno.h (module 'internet'): static ns3::TypeId ns3::TcpNewReno::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## tcp-newreno.h (module 'internet'): int ns3::TcpNewReno::Listen() [member function]
-    cls.add_method('Listen', 
-                   'int', 
-                   [], 
-                   is_virtual=True)
     ## tcp-newreno.h (module 'internet'): void ns3::TcpNewReno::DupAck(ns3::TcpHeader const & t, uint32_t count) [member function]
     cls.add_method('DupAck', 
                    'void', 
@@ -15620,16 +15525,6 @@
                    'ns3::Ptr< ns3::TcpSocketBase >', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## tcp-newreno.h (module 'internet'): uint32_t ns3::TcpNewReno::GetInitialCwnd() const [member function]
-    cls.add_method('GetInitialCwnd', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, visibility='protected', is_virtual=True)
-    ## tcp-newreno.h (module 'internet'): uint32_t ns3::TcpNewReno::GetInitialSSThresh() const [member function]
-    cls.add_method('GetInitialSSThresh', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, visibility='protected', is_virtual=True)
     ## tcp-newreno.h (module 'internet'): void ns3::TcpNewReno::NewAck(ns3::SequenceNumber32 const & seq) [member function]
     cls.add_method('NewAck', 
                    'void', 
@@ -15640,31 +15535,6 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## tcp-newreno.h (module 'internet'): void ns3::TcpNewReno::ScaleSsThresh(uint8_t scaleFactor) [member function]
-    cls.add_method('ScaleSsThresh', 
-                   'void', 
-                   [param('uint8_t', 'scaleFactor')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-newreno.h (module 'internet'): void ns3::TcpNewReno::SetInitialCwnd(uint32_t cwnd) [member function]
-    cls.add_method('SetInitialCwnd', 
-                   'void', 
-                   [param('uint32_t', 'cwnd')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-newreno.h (module 'internet'): void ns3::TcpNewReno::SetInitialSSThresh(uint32_t threshold) [member function]
-    cls.add_method('SetInitialSSThresh', 
-                   'void', 
-                   [param('uint32_t', 'threshold')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-newreno.h (module 'internet'): void ns3::TcpNewReno::SetSegSize(uint32_t size) [member function]
-    cls.add_method('SetSegSize', 
-                   'void', 
-                   [param('uint32_t', 'size')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-newreno.h (module 'internet'): uint32_t ns3::TcpNewReno::Window() [member function]
-    cls.add_method('Window', 
-                   'uint32_t', 
-                   [], 
-                   visibility='protected', is_virtual=True)
     return
 
 def register_Ns3TcpReno_methods(root_module, cls):
@@ -15672,21 +15542,11 @@
     cls.add_constructor([])
     ## tcp-reno.h (module 'internet'): ns3::TcpReno::TcpReno(ns3::TcpReno const & sock) [copy constructor]
     cls.add_constructor([param('ns3::TcpReno const &', 'sock')])
-    ## tcp-reno.h (module 'internet'): int ns3::TcpReno::Connect(ns3::Address const & address) [member function]
-    cls.add_method('Connect', 
-                   'int', 
-                   [param('ns3::Address const &', 'address')], 
-                   is_virtual=True)
     ## tcp-reno.h (module 'internet'): static ns3::TypeId ns3::TcpReno::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## tcp-reno.h (module 'internet'): int ns3::TcpReno::Listen() [member function]
-    cls.add_method('Listen', 
-                   'int', 
-                   [], 
-                   is_virtual=True)
     ## tcp-reno.h (module 'internet'): void ns3::TcpReno::DupAck(ns3::TcpHeader const & t, uint32_t count) [member function]
     cls.add_method('DupAck', 
                    'void', 
@@ -15697,16 +15557,6 @@
                    'ns3::Ptr< ns3::TcpSocketBase >', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## tcp-reno.h (module 'internet'): uint32_t ns3::TcpReno::GetInitialCwnd() const [member function]
-    cls.add_method('GetInitialCwnd', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, visibility='protected', is_virtual=True)
-    ## tcp-reno.h (module 'internet'): uint32_t ns3::TcpReno::GetInitialSSThresh() const [member function]
-    cls.add_method('GetInitialSSThresh', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, visibility='protected', is_virtual=True)
     ## tcp-reno.h (module 'internet'): void ns3::TcpReno::NewAck(ns3::SequenceNumber32 const & seq) [member function]
     cls.add_method('NewAck', 
                    'void', 
@@ -15717,31 +15567,6 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## tcp-reno.h (module 'internet'): void ns3::TcpReno::ScaleSsThresh(uint8_t scaleFactor) [member function]
-    cls.add_method('ScaleSsThresh', 
-                   'void', 
-                   [param('uint8_t', 'scaleFactor')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-reno.h (module 'internet'): void ns3::TcpReno::SetInitialCwnd(uint32_t cwnd) [member function]
-    cls.add_method('SetInitialCwnd', 
-                   'void', 
-                   [param('uint32_t', 'cwnd')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-reno.h (module 'internet'): void ns3::TcpReno::SetInitialSSThresh(uint32_t threshold) [member function]
-    cls.add_method('SetInitialSSThresh', 
-                   'void', 
-                   [param('uint32_t', 'threshold')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-reno.h (module 'internet'): void ns3::TcpReno::SetSegSize(uint32_t size) [member function]
-    cls.add_method('SetSegSize', 
-                   'void', 
-                   [param('uint32_t', 'size')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-reno.h (module 'internet'): uint32_t ns3::TcpReno::Window() [member function]
-    cls.add_method('Window', 
-                   'uint32_t', 
-                   [], 
-                   visibility='protected', is_virtual=True)
     return
 
 def register_Ns3TcpRfc793_methods(root_module, cls):
@@ -16112,7 +15937,7 @@
     cls.add_method('AddBridgePort', 
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'bridgePort')])
-    ## bridge-net-device.h (module 'bridge'): void ns3::BridgeNetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    ## bridge-net-device.h (module 'bridge'): void ns3::BridgeNetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -16905,7 +16730,7 @@
     cls.add_constructor([param('ns3::LoopbackNetDevice const &', 'arg0')])
     ## loopback-net-device.h (module 'internet'): ns3::LoopbackNetDevice::LoopbackNetDevice() [constructor]
     cls.add_constructor([])
-    ## loopback-net-device.h (module 'internet'): void ns3::LoopbackNetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    ## loopback-net-device.h (module 'internet'): void ns3::LoopbackNetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -17146,6 +16971,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
@@ -17159,6 +16985,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def register_functions_ns3_internal(module, root_module):
     return
 
diff -Naur ns-3.23/src/internet/examples/main-simple.cc ns-3.24/src/internet/examples/main-simple.cc
--- ns-3.23/src/internet/examples/main-simple.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/examples/main-simple.cc	2015-09-15 11:18:44.000000000 -0700
@@ -1,3 +1,23 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2007 INRIA
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
+ */
+
 #include <iostream>
 
 #include "ns3/core-module.h"
diff -Naur ns-3.23/src/internet/helper/internet-stack-helper.h ns-3.24/src/internet/helper/internet-stack-helper.h
--- ns-3.23/src/internet/helper/internet-stack-helper.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/helper/internet-stack-helper.h	2015-09-15 11:18:44.000000000 -0700
@@ -297,8 +297,6 @@
    */
   static void CreateAndAggregateObjectFromTypeId (Ptr<Node> node, const std::string typeId);
 
-  static void Cleanup (void);
-
   /**
    * \brief checks if there is an hook to a Pcap wrapper
    * \param ipv4 pointer to the IPv4 object
diff -Naur ns-3.23/src/internet/helper/ipv4-interface-container.cc ns-3.24/src/internet/helper/ipv4-interface-container.cc
--- ns-3.23/src/internet/helper/ipv4-interface-container.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/helper/ipv4-interface-container.cc	2015-09-15 11:18:44.000000000 -0700
@@ -1,3 +1,23 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2008 INRIA
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
+ */
+
 #include "ipv4-interface-container.h"
 #include "ns3/node-list.h"
 #include "ns3/names.h"
diff -Naur ns-3.23/src/internet/helper/ipv4-interface-container.h ns-3.24/src/internet/helper/ipv4-interface-container.h
--- ns-3.23/src/internet/helper/ipv4-interface-container.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/helper/ipv4-interface-container.h	2015-09-15 11:18:44.000000000 -0700
@@ -1,3 +1,23 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2008 INRIA
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
+ */
+
 #ifndef IPV4_INTERFACE_CONTAINER_H
 #define IPV4_INTERFACE_CONTAINER_H
 
diff -Naur ns-3.23/src/internet/model/arp-cache.cc ns-3.24/src/internet/model/arp-cache.cc
--- ns-3.23/src/internet/model/arp-cache.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/arp-cache.cc	2015-09-15 11:18:44.000000000 -0700
@@ -282,6 +282,10 @@
         {
           *os << " DELAY\n";
         }
+      else if (i->second->IsPermanent ())
+	{
+	  *os << " PERMANENT\n";
+	}
       else
         {
           *os << " STALE\n";
@@ -313,6 +317,24 @@
   return entry;
 }
 
+void
+ArpCache::Remove (ArpCache::Entry *entry)
+{
+  NS_LOG_FUNCTION (this << entry);
+  
+  for (CacheI i = m_arpCache.begin (); i != m_arpCache.end (); i++)
+    {
+      if ((*i).second == entry)
+        {
+          m_arpCache.erase (i);
+          entry->ClearPendingPacket (); //clear the pending packets for entry's ipaddress
+          delete entry;
+          return;
+        }
+    }
+  NS_LOG_WARN ("Entry not found in this ARP Cache");
+}
+
 ArpCache::Entry::Entry (ArpCache *arp)
   : m_arp (arp),
     m_state (ALIVE),
@@ -340,12 +362,19 @@
   NS_LOG_FUNCTION (this);
   return (m_state == WAIT_REPLY) ? true : false;
 }
+bool
+ArpCache::Entry::IsPermanent (void)
+{
+  NS_LOG_FUNCTION (this);
+  return (m_state == PERMANENT) ? true : false;
+}
 
 
 void 
 ArpCache::Entry::MarkDead (void) 
 {
   NS_LOG_FUNCTION (this);
+  NS_ASSERT (m_state == ALIVE || m_state == WAIT_REPLY || m_state == DEAD);
   m_state = DEAD;
   ClearRetries ();
   UpdateSeen ();
@@ -360,7 +389,15 @@
   ClearRetries ();
   UpdateSeen ();
 }
-
+void
+ArpCache::Entry::MarkPermanent (void)
+{
+  NS_LOG_FUNCTION (this);
+  NS_ASSERT (!m_macAddress.IsInvalid ());
+  m_state = PERMANENT;
+  ClearRetries ();
+  UpdateSeen ();
+}
 bool
 ArpCache::Entry::UpdateWaitReply (Ptr<Packet> waiting)
 {
@@ -395,13 +432,19 @@
   NS_LOG_FUNCTION (this);
   return m_macAddress;
 }
+void 
+ArpCache::Entry::SetMacAddresss (Address macAddress)
+{
+  NS_LOG_FUNCTION (this);
+  m_macAddress = macAddress;
+}
 Ipv4Address 
 ArpCache::Entry::GetIpv4Address (void) const
 {
   NS_LOG_FUNCTION (this);
   return m_ipv4Address;
 }
-void 
+void
 ArpCache::Entry::SetIpv4Address (Ipv4Address destination)
 {
   NS_LOG_FUNCTION (this << destination);
@@ -418,6 +461,8 @@
       return m_arp->GetDeadTimeout ();
     case ArpCache::Entry::ALIVE:
       return m_arp->GetAliveTimeout ();
+    case ArpCache::Entry::PERMANENT:
+      return Time::Max ();
     default:
       NS_ASSERT (false);
       return Seconds (0);
@@ -453,6 +498,12 @@
     }
 }
 void 
+ArpCache::Entry::ClearPendingPacket (void)
+{
+  NS_LOG_FUNCTION (this);
+  m_pending.clear ();
+}
+void 
 ArpCache::Entry::UpdateSeen (void)
 {
   NS_LOG_FUNCTION (this);
diff -Naur ns-3.23/src/internet/model/arp-cache.h ns-3.24/src/internet/model/arp-cache.h
--- ns-3.23/src/internet/model/arp-cache.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/arp-cache.h	2015-09-15 11:18:44.000000000 -0700
@@ -151,6 +151,11 @@
    */
   ArpCache::Entry *Add (Ipv4Address to);
   /**
+   * \brief Remove an entry.
+   * \param entry pointer to delete it from the list
+   */
+  void Remove (ArpCache::Entry *entry);
+  /**
    * \brief Clear the ArpCache of all entries
    */
   void Flush (void);
@@ -186,6 +191,12 @@
      */
     void MarkWaitReply (Ptr<Packet> waiting);
     /**
+     * \brief Changes the state of this entry to Permanent.
+     *
+     * The entry must have a valid MacAddress.
+     */
+    void MarkPermanent (void);
+    /**
      * \param waiting
      * \return 
      */
@@ -202,7 +213,10 @@
      * \return True if the state of this entry is wait_reply; false otherwise.
      */
     bool IsWaitReply (void);
-
+    /**
+     * \return True if the state of this entry is permanent; false otherwise.
+     */
+    bool IsPermanent (void); 
     /**
      * \return The MacAddress of this entry
      */
@@ -212,6 +226,10 @@
      */
     Ipv4Address GetIpv4Address (void) const;
     /**
+     * \param macAddress The MacAddress for this entry
+     */
+    void SetMacAddresss (Address macAddress);
+    /**
      * \param destination The Ipv4Address for this entry
      */
     void SetIpv4Address (Ipv4Address destination);
@@ -228,6 +246,10 @@
      */
     Ptr<Packet> DequeuePending (void);
     /**
+     * \brief Clear the pending packet list
+     */
+    void ClearPendingPacket (void);
+    /**
      * \returns number of retries that have been sent for an ArpRequest
      *  in WaitReply state.
      */
@@ -248,7 +270,8 @@
     enum ArpCacheEntryState_e {
       ALIVE,
       WAIT_REPLY,
-      DEAD
+      DEAD,
+      PERMANENT
     };
 
     /**
diff -Naur ns-3.23/src/internet/model/arp-l3-protocol.cc ns-3.24/src/internet/model/arp-l3-protocol.cc
--- ns-3.23/src/internet/model/arp-l3-protocol.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/arp-l3-protocol.cc	2015-09-15 11:18:44.000000000 -0700
@@ -289,7 +289,7 @@
               entry->MarkWaitReply (packet);
               Simulator::Schedule (Time (MilliSeconds (m_requestJitter->GetValue ())), &ArpL3Protocol::SendArpRequest, this, cache, destination);
             } 
-          else if (entry->IsWaitReply ()) 
+          else
             {
               NS_FATAL_ERROR ("Test for possibly unreachable code-- please file a bug report, with a test case, if this is ever hit");
             }
@@ -318,6 +318,17 @@
                   m_dropTrace (packet);
                 }
             }
+          else if (entry-> IsPermanent ())
+            {
+              NS_LOG_LOGIC ("node="<<m_node->GetId ()<<
+                            ", permanent for " << destination << "valid -- send");
+              *hardwareDestination = entry->GetMacAddress ();
+              return true;
+            }
+          else
+            {
+              NS_LOG_LOGIC ("Test for possibly unreachable code-- please file a bug report, with a test case, if this is ever hit");
+            }
         }
     }
   else
diff -Naur ns-3.23/src/internet/model/codel-queue.cc ns-3.24/src/internet/model/codel-queue.cc
--- ns-3.23/src/internet/model/codel-queue.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/codel-queue.cc	2015-09-15 11:18:44.000000000 -0700
@@ -184,23 +184,23 @@
     .AddTraceSource ("Count",
                      "CoDel count",
                      MakeTraceSourceAccessor (&CoDelQueue::m_count),
-                     "ns3::TracedValue::Uint32Callback")
+                     "ns3::TracedValueCallback::Uint32")
     .AddTraceSource ("DropCount",
                      "CoDel drop count",
                      MakeTraceSourceAccessor (&CoDelQueue::m_dropCount),
-                     "ns3::TracedValue::Uint32Callback")
+                     "ns3::TracedValueCallback::Uint32")
     .AddTraceSource ("LastCount",
                      "CoDel lastcount",
                      MakeTraceSourceAccessor (&CoDelQueue::m_lastCount),
-                     "ns3::TracedValue::Uint32Callback")
+                     "ns3::TracedValueCallback::Uint32")
     .AddTraceSource ("DropState",
                      "Dropping state",
                      MakeTraceSourceAccessor (&CoDelQueue::m_dropping),
-                     "ns3::TracedValue::BoolCallback")
+                     "ns3::TracedValueCallback::Bool")
     .AddTraceSource ("BytesInQueue",
                      "Number of bytes in the queue",
                      MakeTraceSourceAccessor (&CoDelQueue::m_bytesInQueue),
-                     "ns3::TracedValue::Uint32Callback")
+                     "ns3::TracedValueCallback::Uint32")
     .AddTraceSource ("Sojourn",
                      "Time in the queue",
                      MakeTraceSourceAccessor (&CoDelQueue::m_sojourn),
@@ -208,7 +208,7 @@
     .AddTraceSource ("DropNext",
                      "Time until next packet drop",
                      MakeTraceSourceAccessor (&CoDelQueue::m_dropNext),
-                     "ns3::TracedValue::Uint32Callback")
+                     "ns3::TracedValueCallback::Uint32")
   ;
 
   return tid;
diff -Naur ns-3.23/src/internet/model/icmpv4-l4-protocol.cc ns-3.24/src/internet/model/icmpv4-l4-protocol.cc
--- ns-3.23/src/internet/model/icmpv4-l4-protocol.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/icmpv4-l4-protocol.cc	2015-09-15 11:18:44.000000000 -0700
@@ -1,3 +1,23 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2008 INRIA
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
+ */
+
 #include "icmpv4-l4-protocol.h"
 #include "ipv4-raw-socket-factory-impl.h"
 #include "ipv4-interface.h"
@@ -72,7 +92,7 @@
             }
         }
     }
-  Object::NotifyNewAggregate ();
+  IpL4Protocol::NotifyNewAggregate ();
 }
 
 uint16_t 
diff -Naur ns-3.23/src/internet/model/icmpv4-l4-protocol.h ns-3.24/src/internet/model/icmpv4-l4-protocol.h
--- ns-3.23/src/internet/model/icmpv4-l4-protocol.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/icmpv4-l4-protocol.h	2015-09-15 11:18:44.000000000 -0700
@@ -1,3 +1,23 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2008 INRIA
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
+ */
+
 #ifndef ICMPV4_L4_PROTOCOL_H
 #define ICMPV4_L4_PROTOCOL_H
 
diff -Naur ns-3.23/src/internet/model/icmpv6-l4-protocol.cc ns-3.24/src/internet/model/icmpv6-l4-protocol.cc
--- ns-3.23/src/internet/model/icmpv6-l4-protocol.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/icmpv6-l4-protocol.cc	2015-09-15 11:18:44.000000000 -0700
@@ -1,4 +1,4 @@
-
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
  * Copyright (c) 2007-2009 Strasbourg University
  *
@@ -137,7 +137,7 @@
             }
         }
     }
-  Object::NotifyNewAggregate ();
+  IpL4Protocol::NotifyNewAggregate ();
 }
 
 void Icmpv6L4Protocol::SetNode (Ptr<Node> node)
diff -Naur ns-3.23/src/internet/model/icmpv6-l4-protocol.h ns-3.24/src/internet/model/icmpv6-l4-protocol.h
--- ns-3.23/src/internet/model/icmpv6-l4-protocol.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/icmpv6-l4-protocol.h	2015-09-15 11:18:44.000000000 -0700
@@ -393,7 +393,7 @@
    * \brief Send a Router Solicitation.
    * \param src link-local source address
    * \param dst destination address (usealy ff02::2 i.e all-routers)
-   * \param hardwareAddress link-layer address (SHOULD be included if src is not ::
+   * \param hardwareAddress link-layer address (SHOULD be included if src is not ::)
    */
   void SendRS (Ipv6Address src, Ipv6Address dst,  Address hardwareAddress);
 
diff -Naur ns-3.23/src/internet/model/ipv4-end-point.cc ns-3.24/src/internet/model/ipv4-end-point.cc
--- ns-3.23/src/internet/model/ipv4-end-point.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/ipv4-end-point.cc	2015-09-15 11:18:44.000000000 -0700
@@ -31,10 +31,12 @@
   : m_localAddr (address), 
     m_localPort (port),
     m_peerAddr (Ipv4Address::GetAny ()),
-    m_peerPort (0)
+    m_peerPort (0),
+    m_rxEnabled (true)
 {
   NS_LOG_FUNCTION (this << address << port);
 }
+
 Ipv4EndPoint::~Ipv4EndPoint ()
 {
   NS_LOG_FUNCTION (this);
@@ -67,18 +69,21 @@
   NS_LOG_FUNCTION (this);
   return m_localPort;
 }
+
 Ipv4Address 
 Ipv4EndPoint::GetPeerAddress (void)
 {
   NS_LOG_FUNCTION (this);
   return m_peerAddr;
 }
+
 uint16_t 
 Ipv4EndPoint::GetPeerPort (void)
 {
   NS_LOG_FUNCTION (this);
   return m_peerPort;
 }
+
 void 
 Ipv4EndPoint::SetPeer (Ipv4Address address, uint16_t port)
 {
@@ -108,6 +113,7 @@
   NS_LOG_FUNCTION (this << &callback);
   m_rxCallback = callback;
 }
+
 void 
 Ipv4EndPoint::SetIcmpCallback (Callback<void,Ipv4Address,uint8_t,uint8_t,uint8_t,uint32_t> callback)
 {
@@ -134,6 +140,7 @@
                               incomingInterface);
     }
 }
+
 void 
 Ipv4EndPoint::DoForwardUp (Ptr<Packet> p, const Ipv4Header& header, uint16_t sport,
                            Ptr<Ipv4Interface> incomingInterface)
@@ -159,6 +166,7 @@
                               icmpSource, icmpTtl, icmpType, icmpCode, icmpInfo);
     }
 }
+
 void 
 Ipv4EndPoint::DoForwardIcmp (Ipv4Address icmpSource, uint8_t icmpTtl, 
                              uint8_t icmpType, uint8_t icmpCode,
@@ -172,4 +180,16 @@
     }
 }
 
+void
+Ipv4EndPoint::SetRxEnabled (bool enabled)
+{
+  m_rxEnabled = enabled;
+}
+
+bool
+Ipv4EndPoint::IsRxEnabled ()
+{
+  return m_rxEnabled;
+}
+
 } // namespace ns3
diff -Naur ns-3.23/src/internet/model/ipv4-end-point-demux.cc ns-3.24/src/internet/model/ipv4-end-point-demux.cc
--- ns-3.23/src/internet/model/ipv4-end-point-demux.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/ipv4-end-point-demux.cc	2015-09-15 11:18:44.000000000 -0700
@@ -207,10 +207,19 @@
   for (EndPointsI i = m_endPoints.begin (); i != m_endPoints.end (); i++) 
     {
       Ipv4EndPoint* endP = *i;
+
       NS_LOG_DEBUG ("Looking at endpoint dport=" << endP->GetLocalPort ()
                                                  << " daddr=" << endP->GetLocalAddress ()
                                                  << " sport=" << endP->GetPeerPort ()
                                                  << " saddr=" << endP->GetPeerAddress ());
+
+      if (!endP->IsRxEnabled ())
+        {
+          NS_LOG_LOGIC ("Skipping endpoint " << &endP
+                        << " because endpoint can not receive packets");
+          continue;
+        }
+
       if (endP->GetLocalPort () != dport) 
         {
           NS_LOG_LOGIC ("Skipping endpoint " << &endP
diff -Naur ns-3.23/src/internet/model/ipv4-end-point-demux.h ns-3.24/src/internet/model/ipv4-end-point-demux.h
--- ns-3.23/src/internet/model/ipv4-end-point-demux.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/ipv4-end-point-demux.h	2015-09-15 11:18:44.000000000 -0700
@@ -78,6 +78,15 @@
 
   /**
    * \brief lookup for a match with all the parameters.
+   *
+   * The function will return a list of most-matching EndPoints, in this order:
+   *   -# Full match
+   *   -# All but local address
+   *   -# Only local port and local address match
+   *   -# Only local port match
+   *
+   * EndPoint with disabled Rx are skipped.
+   *
    * \param daddr destination address to test
    * \param dport destination port to test
    * \param saddr source address to test
diff -Naur ns-3.23/src/internet/model/ipv4-end-point.h ns-3.24/src/internet/model/ipv4-end-point.h
--- ns-3.23/src/internet/model/ipv4-end-point.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/ipv4-end-point.h	2015-09-15 11:18:44.000000000 -0700
@@ -168,6 +168,18 @@
                     uint8_t icmpType, uint8_t icmpCode,
                     uint32_t icmpInfo);
 
+  /**
+   * \brief Enable or Disable the endpoint Rx capability.
+   * \param enabled true if Rx is enabled
+   */
+  void SetRxEnabled (bool enabled);
+
+  /**
+   * \brief Checks if the endpoint can receive packets.
+   * \returns true if the endpoint can receive packets.
+   */
+  bool IsRxEnabled (void);
+
 private:
   /**
    * \brief ForwardUp wrapper.
@@ -229,6 +241,11 @@
    * \brief The destroy callback.
    */
   Callback<void> m_destroyCallback;
+
+  /**
+   * \brief true if the endpoint can receive packets.
+   */
+  bool m_rxEnabled;
 };
 
 } // namespace ns3
diff -Naur ns-3.23/src/internet/model/ipv4-interface.cc ns-3.24/src/internet/model/ipv4-interface.cc
--- ns-3.23/src/internet/model/ipv4-interface.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/ipv4-interface.cc	2015-09-15 11:18:44.000000000 -0700
@@ -41,6 +41,7 @@
 {
   static TypeId tid = TypeId ("ns3::Ipv4Interface")
     .SetParent<Object> ()
+    .SetGroupName ("Internet")
     .AddAttribute ("ArpCache",
                    "The arp cache for this ipv4 interface",
                    PointerValue (0),
diff -Naur ns-3.23/src/internet/model/ipv4-l3-protocol.cc ns-3.24/src/internet/model/ipv4-l3-protocol.cc
--- ns-3.23/src/internet/model/ipv4-l3-protocol.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/ipv4-l3-protocol.cc	2015-09-15 11:18:44.000000000 -0700
@@ -197,7 +197,7 @@
           this->SetNode (node);
         }
     }
-  Object::NotifyNewAggregate ();
+  Ipv4::NotifyNewAggregate ();
 }
 
 void 
diff -Naur ns-3.23/src/internet/model/ipv4-l3-protocol.h ns-3.24/src/internet/model/ipv4-l3-protocol.h
--- ns-3.23/src/internet/model/ipv4-l3-protocol.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/ipv4-l3-protocol.h	2015-09-15 11:18:44.000000000 -0700
@@ -245,8 +245,7 @@
    * \param [in] interface
    */
   typedef void (* SentTracedCallback)
-    (const Ipv4Header & header, const Ptr<const Packet> packet,
-     const uint32_t interface);
+    (const Ipv4Header & header, Ptr<const Packet> packet, uint32_t interface);
    
   /**
    * TracedCallback signature for packet transmission or reception events.
@@ -254,10 +253,11 @@
    * \param [in] packet The packet.
    * \param [in] ipv4
    * \param [in] interface
+   * \deprecated The non-const \c Ptr<Ipv4> argument is deprecated
+   * and will be changed to \c Ptr<const Ipv4> in a future release.
    */
   typedef void (* TxRxTracedCallback)
-    (const Ptr<const Packet> packet, const Ptr<const Ipv4> ipv4, 
-     const uint32_t interface);
+    (Ptr<const Packet> packet, Ptr<Ipv4> ipv4, uint32_t interface);
 
   /**
    * TracedCallback signature for packet drop events.
@@ -267,11 +267,13 @@
    * \param [in] reason The reason the packet was dropped.
    * \param [in] ipv4
    * \param [in] interface
+   * \deprecated The non-const \c Ptr<Ipv4> argument is deprecated
+   * and will be changed to \c Ptr<const Ipv4> in a future release.
    */
   typedef void (* DropTracedCallback)
-    (const Ipv4Header & header, const Ptr<const Packet> packet,
-     const DropReason reason, const Ptr<const Ipv4> ipv4,
-     const uint32_t interface);
+    (const Ipv4Header & header, Ptr<const Packet> packet,
+     DropReason reason, Ptr<Ipv4> ipv4,
+     uint32_t interface);
    
 protected:
 
@@ -456,11 +458,17 @@
 
   // The following two traces pass a packet with an IP header
   /// Trace of transmitted packets
+  /// \deprecated The non-const \c Ptr<Ipv4> argument is deprecated
+  /// and will be changed to \c Ptr<const Ipv4> in a future release.
   TracedCallback<Ptr<const Packet>, Ptr<Ipv4>,  uint32_t> m_txTrace;
   /// Trace of received packets
+  /// \deprecated The non-const \c Ptr<Ipv4> argument is deprecated
+  /// and will be changed to \c Ptr<const Ipv4> in a future release.
   TracedCallback<Ptr<const Packet>, Ptr<Ipv4>, uint32_t> m_rxTrace;
   // <ip-header, payload, reason, ifindex> (ifindex not valid if reason is DROP_NO_ROUTE)
   /// Trace of dropped packets
+  /// \deprecated The non-const \c Ptr<Ipv4> argument is deprecated
+  /// and will be changed to \c Ptr<const Ipv4> in a future release.
   TracedCallback<const Ipv4Header &, Ptr<const Packet>, DropReason, Ptr<Ipv4>, uint32_t> m_dropTrace;
 
   Ptr<Ipv4RoutingProtocol> m_routingProtocol; //!< Routing protocol associated with the stack
diff -Naur ns-3.23/src/internet/model/ipv4-packet-probe.cc ns-3.24/src/internet/model/ipv4-packet-probe.cc
--- ns-3.23/src/internet/model/ipv4-packet-probe.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/ipv4-packet-probe.cc	2015-09-15 11:18:44.000000000 -0700
@@ -45,11 +45,11 @@
                       "The packet plus its IPv4 object and interface "
                       "that serve as the output for this probe",
                       MakeTraceSourceAccessor (&Ipv4PacketProbe::m_output),
-                      "ns3::Ipv4PacketProbe::TracedCallback")
+                      "ns3::Ipv4L3Protocol::TxRxTracedCallback")
     .AddTraceSource ( "OutputBytes",
                       "The number of bytes in the packet",
                       MakeTraceSourceAccessor (&Ipv4PacketProbe::m_outputBytes),
-                      "ns3::Packet::PacketSizeTracedCallback")
+                      "ns3::Packet::SizeTracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.23/src/internet/model/ipv4-packet-probe.h ns-3.24/src/internet/model/ipv4-packet-probe.h
--- ns-3.23/src/internet/model/ipv4-packet-probe.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/ipv4-packet-probe.h	2015-09-15 11:18:44.000000000 -0700
@@ -93,17 +93,6 @@
    */
   virtual void ConnectByPath (std::string path);
 
-  /**
-   * TracedCallback signature for PacketProbe events.
-   *
-   * \param [in] packet The packet.
-   * \param [in] ipv4 
-   * \param [in] interface
-   */
-  typedef void (* TracedCallback)
-    (const Ptr<const Packet> packet, const Ptr<const Ipv4> ipv4,
-     const uint32_t interface);
-
 private:
   /**
    * \brief Method to connect to an underlying ns3::TraceSource with
diff -Naur ns-3.23/src/internet/model/ipv6-end-point.cc ns-3.24/src/internet/model/ipv6-end-point.cc
--- ns-3.23/src/internet/model/ipv6-end-point.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/ipv6-end-point.cc	2015-09-15 11:18:44.000000000 -0700
@@ -33,7 +33,8 @@
   : m_localAddr (addr),
     m_localPort (port),
     m_peerAddr (Ipv6Address::GetAny ()),
-    m_peerPort (0)
+    m_peerPort (0),
+    m_rxEnabled (true)
 {
 }
 
@@ -140,5 +141,16 @@
   m_icmpCallback (src, ttl, type, code, info);
 }
 
+void Ipv6EndPoint::SetRxEnabled (bool enabled)
+{
+  m_rxEnabled = enabled;
+}
+
+bool Ipv6EndPoint::IsRxEnabled ()
+{
+  return m_rxEnabled;
+}
+
+
 } /* namespace ns3 */
 
diff -Naur ns-3.23/src/internet/model/ipv6-end-point-demux.cc ns-3.24/src/internet/model/ipv6-end-point-demux.cc
--- ns-3.23/src/internet/model/ipv6-end-point-demux.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/ipv6-end-point-demux.cc	2015-09-15 11:18:44.000000000 -0700
@@ -182,10 +182,19 @@
   for (EndPointsI i = m_endPoints.begin (); i != m_endPoints.end (); i++)
     {
       Ipv6EndPoint* endP = *i;
+
       NS_LOG_DEBUG ("Looking at endpoint dport=" << endP->GetLocalPort ()
                                                  << " daddr=" << endP->GetLocalAddress ()
                                                  << " sport=" << endP->GetPeerPort ()
                                                  << " saddr=" << endP->GetPeerAddress ());
+
+      if (!endP->IsRxEnabled ())
+        {
+          NS_LOG_LOGIC ("Skipping endpoint " << &endP
+                        << " because endpoint can not receive packets");
+          continue;
+        }
+
       if (endP->GetLocalPort () != dport)
         {
           NS_LOG_LOGIC ("Skipping endpoint " << &endP
diff -Naur ns-3.23/src/internet/model/ipv6-end-point-demux.h ns-3.24/src/internet/model/ipv6-end-point-demux.h
--- ns-3.23/src/internet/model/ipv6-end-point-demux.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/ipv6-end-point-demux.h	2015-09-15 11:18:44.000000000 -0700
@@ -67,6 +67,15 @@
 
   /**
    * \brief lookup for a match with all the parameters.
+   *
+   * The function will return a list of most-matching EndPoints, in this order:
+   *   -# Full match
+   *   -# All but local address
+   *   -# Only local port and local address match
+   *   -# Only local port match
+   *
+   * EndPoint with disabled Rx are skipped.
+   *
    * \param dst destination address to test
    * \param dport destination port to test
    * \param src source address to test
diff -Naur ns-3.23/src/internet/model/ipv6-end-point.h ns-3.24/src/internet/model/ipv6-end-point.h
--- ns-3.23/src/internet/model/ipv6-end-point.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/ipv6-end-point.h	2015-09-15 11:18:44.000000000 -0700
@@ -177,6 +177,18 @@
   void ForwardIcmp (Ipv6Address src, uint8_t ttl, uint8_t type,
                     uint8_t code, uint32_t info);
 
+  /**
+   * \brief Enable or Disable the endpoint Rx capability.
+   * \param enabled true if Rx is enabled
+   */
+  void SetRxEnabled (bool enabled);
+
+  /**
+   * \brief Checks if the endpoint can receive packets.
+   * \returns true if the endpoint can receive packets.
+   */
+  bool IsRxEnabled (void);
+
 private:
   /**
    * \brief ForwardUp wrapper.
@@ -237,6 +249,11 @@
    * \brief The destroy callback.
    */
   Callback<void> m_destroyCallback;
+
+  /**
+   * \brief true if the endpoint can receive packets.
+   */
+  bool m_rxEnabled;
 };
 
 } /* namespace ns3 */
diff -Naur ns-3.23/src/internet/model/ipv6-extension-header.cc ns-3.24/src/internet/model/ipv6-extension-header.cc
--- ns-3.23/src/internet/model/ipv6-extension-header.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/ipv6-extension-header.cc	2015-09-15 11:18:44.000000000 -0700
@@ -68,6 +68,10 @@
 
 void Ipv6ExtensionHeader::SetLength (uint16_t length)
 {
+  NS_ASSERT_MSG (!(length & 0x7), "Invalid Ipv6ExtensionHeader Length, must be a multiple of 8 bytes.");
+  NS_ASSERT_MSG (length > 0, "Invalid Ipv6ExtensionHeader Length, must be greater than 0.");
+  NS_ASSERT_MSG (length < 2048, "Invalid Ipv6ExtensionHeader Length, must be a lower than 2048.");
+
   m_length = (length >> 3) - 1;
 }
 
@@ -333,7 +337,7 @@
   : m_offset (0),
     m_identification (0)
 {
-  SetLength (0);
+  SetLength (16);
 }
 
 Ipv6ExtensionFragmentHeader::~Ipv6ExtensionFragmentHeader ()
@@ -398,8 +402,7 @@
   Buffer::Iterator i = start;
 
   SetNextHeader (i.ReadU8 ());
-  i.ReadU8();
-  SetLength (0);
+  SetLength ((i.ReadU8 () + 1) << 3);
   m_offset = i.ReadNtohU16 ();
   m_identification = i.ReadNtohU32 ();
 
diff -Naur ns-3.23/src/internet/model/ipv6-interface.cc ns-3.24/src/internet/model/ipv6-interface.cc
--- ns-3.23/src/internet/model/ipv6-interface.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/ipv6-interface.cc	2015-09-15 11:18:44.000000000 -0700
@@ -121,7 +121,7 @@
     {
       icmpv6 = proto->GetObject <Icmpv6L4Protocol> ();
     }
-  if (icmpv6)
+  if (icmpv6 && !m_ndCache)
     {
       m_ndCache = icmpv6->CreateCache (m_device, this);
     }
@@ -179,6 +179,7 @@
     {
       return;
     }
+  DoSetup ();
   m_ifup = true;
 }
 
diff -Naur ns-3.23/src/internet/model/ipv6-l3-protocol.cc ns-3.24/src/internet/model/ipv6-l3-protocol.cc
--- ns-3.23/src/internet/model/ipv6-l3-protocol.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/ipv6-l3-protocol.cc	2015-09-15 11:18:44.000000000 -0700
@@ -693,7 +693,7 @@
           this->SetNode (node);
         }
     }
-  Object::NotifyNewAggregate ();
+  Ipv6::NotifyNewAggregate ();
 }
 
 void Ipv6L3Protocol::SetNode (Ptr<Node> node)
diff -Naur ns-3.23/src/internet/model/ipv6-l3-protocol.h ns-3.24/src/internet/model/ipv6-l3-protocol.h
--- ns-3.23/src/internet/model/ipv6-l3-protocol.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/ipv6-l3-protocol.h	2015-09-15 11:18:44.000000000 -0700
@@ -395,8 +395,7 @@
    * \param [in] interface
    */
   typedef void (* SentTracedCallback)
-    (const Ipv6Header & header, const Ptr<const Packet> packet,
-     const uint32_t interface);
+    (const Ipv6Header & header, Ptr<const Packet> packet, uint32_t interface);
    
   /**
    * TracedCallback signature for packet transmission or reception events.
@@ -404,10 +403,11 @@
    * \param [in] packet The packet.
    * \param [in] ipv6
    * \param [in] interface
+   * \deprecated The non-const \c Ptr<Ipv6> argument is deprecated
+   * and will be changed to \c Ptr<const Ipv6> in a future release.
    */
   typedef void (* TxRxTracedCallback)
-    (const Ptr<const Packet> packet, const Ptr<const Ipv6> ipv6,
-     const uint32_t interface);
+    (Ptr<const Packet> packet, Ptr<Ipv6> ipv6, uint32_t interface);
 
   /**
    * TracedCallback signature for packet drop events.
@@ -417,11 +417,13 @@
    * \param [in] reason The reason the packet was dropped.
    * \param [in] ipv6
    * \param [in] interface
+   * \deprecated The non-const \c Ptr<Ipv6> argument is deprecated
+   * and will be changed to \c Ptr<const Ipv6> in a future release.
    */
   typedef void (* DropTracedCallback)
-    (const Ipv6Header & header, const Ptr<const Packet> packet,
-     const DropReason reason, const Ptr<const Ipv6> ipv6,
-     const uint32_t interface);
+    (const Ipv6Header & header, Ptr<const Packet> packet,
+     DropReason reason, Ptr<Ipv6> ipv6,
+     uint32_t interface);
    
 protected:
   /**
@@ -468,16 +470,22 @@
 
   /**
    * \brief Callback to trace TX (transmission) packets.
+   * \deprecated The non-const \c Ptr<Ipv6> argument is deprecated
+   * and will be changed to \c Ptr<const Ipv6> in a future release.
    */ 
   TracedCallback<Ptr<const Packet>, Ptr<Ipv6>, uint32_t> m_txTrace;
 
   /**
    * \brief Callback to trace RX (reception) packets.
+   * \deprecated The non-const \c Ptr<Ipv6> argument is deprecated
+   * and will be changed to \c Ptr<const Ipv6> in a future release.
    */ 
   TracedCallback<Ptr<const Packet>, Ptr<Ipv6>, uint32_t> m_rxTrace;
 
   /**
    * \brief Callback to trace drop packets.
+   * \deprecated The non-const \c Ptr<Ipv6> argument is deprecated
+   * and will be changed to \c Ptr<const Ipv6> in a future release.
    */ 
   TracedCallback<const Ipv6Header &, Ptr<const Packet>, DropReason, Ptr<Ipv6>, uint32_t> m_dropTrace;
 
diff -Naur ns-3.23/src/internet/model/ipv6-packet-probe.cc ns-3.24/src/internet/model/ipv6-packet-probe.cc
--- ns-3.23/src/internet/model/ipv6-packet-probe.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/ipv6-packet-probe.cc	2015-09-15 11:18:44.000000000 -0700
@@ -46,11 +46,11 @@
                       "The packet plus its IPv6 object and interface "
                       "that serve as the output for this probe",
                       MakeTraceSourceAccessor (&Ipv6PacketProbe::m_output),
-                      "ns3::Ipv6PacketProbe::TracedCallback")
+                      "ns3::Ipv6L3Protocol::TxRxTracedCallback")
     .AddTraceSource ( "OutputBytes",
                       "The number of bytes in the packet",
                       MakeTraceSourceAccessor (&Ipv6PacketProbe::m_outputBytes),
-                      "ns3::Packet::PacketSizeTracedCallback")
+                      "ns3::Packet::SizeTracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.23/src/internet/model/ipv6-packet-probe.h ns-3.24/src/internet/model/ipv6-packet-probe.h
--- ns-3.23/src/internet/model/ipv6-packet-probe.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/ipv6-packet-probe.h	2015-09-15 11:18:44.000000000 -0700
@@ -95,17 +95,6 @@
    */
   virtual void ConnectByPath (std::string path);
 
-  /**
-   * TracedCallback signature for PacketProbe events.
-   *
-   * \param [in] packet The packet.
-   * \param [in] ipv6 
-   * \param [in] interface
-   */
-  typedef void (* TracedCallback)
-    (const Ptr<const Packet> packet, const Ptr<const Ipv6> ipv6,
-     const uint32_t interface);
-
 private:
   /**
    * \brief Method to connect to an underlying ns3::TraceSource with
diff -Naur ns-3.23/src/internet/model/ipv6-pmtu-cache.h ns-3.24/src/internet/model/ipv6-pmtu-cache.h
--- ns-3.23/src/internet/model/ipv6-pmtu-cache.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/ipv6-pmtu-cache.h	2015-09-15 11:18:44.000000000 -0700
@@ -111,7 +111,7 @@
   /**
    * \brief Container of the IPv6 PMTU data (Ipv6 destination address and expiration event).
    */
-  typedef std::map<Ipv6Address, EventId> ::iterator pathMtuTimerIter;
+  typedef std::map<Ipv6Address, EventId>::iterator pathMtuTimerIter;
 
   /**
    * \brief Path MTU Expiration table
diff -Naur ns-3.23/src/internet/model/nsc-tcp-l4-protocol.cc ns-3.24/src/internet/model/nsc-tcp-l4-protocol.cc
--- ns-3.23/src/internet/model/nsc-tcp-l4-protocol.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/nsc-tcp-l4-protocol.cc	2015-09-15 11:18:44.000000000 -0700
@@ -244,7 +244,7 @@
             }
         }
     }
-  Object::NotifyNewAggregate ();
+  IpL4Protocol::NotifyNewAggregate ();
 }
 
 int 
diff -Naur ns-3.23/src/internet/model/nsc-tcp-socket-impl.cc ns-3.24/src/internet/model/nsc-tcp-socket-impl.cc
--- ns-3.23/src/internet/model/nsc-tcp-socket-impl.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/nsc-tcp-socket-impl.cc	2015-09-15 11:18:44.000000000 -0700
@@ -58,11 +58,11 @@
     .AddTraceSource ("CongestionWindow",
                      "The TCP connection's congestion window",
                      MakeTraceSourceAccessor (&NscTcpSocketImpl::m_cWnd),
-                     "ns3::TracedValue::Uint32Callback")
+                     "ns3::TracedValueCallback::Uint32")
     .AddTraceSource ("SlowStartThreshold",
                      "TCP slow start threshold (bytes)",
                      MakeTraceSourceAccessor (&NscTcpSocketImpl::m_ssThresh),
-                     "ns3::TracedValue::Uint32Callback")
+                     "ns3::TracedValueCallback::Uint32")
     .AddTraceSource ("State",
                      "TCP state",
                      MakeTraceSourceAccessor (&NscTcpSocketImpl::m_state),
diff -Naur ns-3.23/src/internet/model/ripng.cc ns-3.24/src/internet/model/ripng.cc
--- ns-3.23/src/internet/model/ripng.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/ripng.cc	2015-09-15 11:18:44.000000000 -0700
@@ -151,7 +151,7 @@
       TypeId tid = TypeId::LookupByName ("ns3::UdpSocketFactory");
       Ptr<Node> theNode = GetObject<Node> ();
       m_recvSocket = Socket::CreateSocket (theNode, tid);
-      Inet6SocketAddress local = Inet6SocketAddress (Ipv6Address::GetAny (), RIPNG_PORT);
+      Inet6SocketAddress local = Inet6SocketAddress (RIPNG_ALL_NODE, RIPNG_PORT);
       m_recvSocket->Bind (local);
       m_recvSocket->SetRecvCallback (MakeCallback (&RipNg::Receive, this));
       m_recvSocket->SetIpv6RecvHopLimit (true);
@@ -347,7 +347,7 @@
       TypeId tid = TypeId::LookupByName ("ns3::UdpSocketFactory");
       Ptr<Node> theNode = GetObject<Node> ();
       m_recvSocket = Socket::CreateSocket (theNode, tid);
-      Inet6SocketAddress local = Inet6SocketAddress (Ipv6Address::GetAny (), RIPNG_PORT);
+      Inet6SocketAddress local = Inet6SocketAddress (RIPNG_ALL_NODE, RIPNG_PORT);
       m_recvSocket->Bind (local);
       m_recvSocket->SetRecvCallback (MakeCallback (&RipNg::Receive, this));
       m_recvSocket->SetIpv6RecvHopLimit (true);
diff -Naur ns-3.23/src/internet/model/rtt-estimator.cc ns-3.24/src/internet/model/rtt-estimator.cc
--- ns-3.23/src/internet/model/rtt-estimator.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/rtt-estimator.cc	2015-09-15 11:18:44.000000000 -0700
@@ -38,6 +38,7 @@
 
 NS_OBJECT_ENSURE_REGISTERED (RttEstimator);
 
+/// Tolerance used to check reciprocal of two numbers.
 static const double TOLERANCE = 1e-6;
 
 TypeId 
diff -Naur ns-3.23/src/internet/model/sim_errno.h ns-3.24/src/internet/model/sim_errno.h
--- ns-3.23/src/internet/model/sim_errno.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/sim_errno.h	2015-09-15 11:18:44.000000000 -0700
@@ -1,3 +1,23 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2008 INRIA
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
+ */
+
 #ifndef NSC_SIM_ERRNO_H
 #define NSC_SIM_ERRNO_H
 
diff -Naur ns-3.23/src/internet/model/tcp-header.cc ns-3.24/src/internet/model/tcp-header.cc
--- ns-3.23/src/internet/model/tcp-header.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/tcp-header.cc	2015-09-15 11:18:44.000000000 -0700
@@ -176,8 +176,8 @@
 }
 
 void 
-TcpHeader::InitializeChecksum (Ipv4Address source, 
-                               Ipv4Address destination,
+TcpHeader::InitializeChecksum (const Ipv4Address &source,
+                               const Ipv4Address &destination,
                                uint8_t protocol)
 {
   m_source = source;
@@ -186,8 +186,8 @@
 }
 
 void 
-TcpHeader::InitializeChecksum (Ipv6Address source, 
-                               Ipv6Address destination,
+TcpHeader::InitializeChecksum (const Ipv6Address &source,
+                               const Ipv6Address &destination,
                                uint8_t protocol)
 {
   m_source = source;
@@ -196,8 +196,8 @@
 }
 
 void 
-TcpHeader::InitializeChecksum (Address source, 
-                               Address destination,
+TcpHeader::InitializeChecksum (const Address &source,
+                               const Address &destination,
                                uint8_t protocol)
 {
   m_source = source;
@@ -516,4 +516,11 @@
     );
 }
 
+std::ostream&
+operator<< (std::ostream& os, TcpHeader const & tc)
+{
+  tc.Print (os);
+  return os;
+}
+
 } // namespace ns3
diff -Naur ns-3.23/src/internet/model/tcp-header.h ns-3.24/src/internet/model/tcp-header.h
--- ns-3.23/src/internet/model/tcp-header.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/tcp-header.h	2015-09-15 11:18:44.000000000 -0700
@@ -48,6 +48,15 @@
   virtual ~TcpHeader ();
 
   /**
+   * \brief Print a TCP header into an output stream
+   *
+   * \param os output stream
+   * \param tc TCP header to print
+   * \return The ostream passed as first argument
+   */
+  friend std::ostream& operator<<(std::ostream& os, TcpHeader const & tc);
+
+  /**
    * \brief Converts an integer into a human readable list of Tcp flags
    *
    * \param flags Bitfield of TCP flags to convert to a readable string
@@ -204,8 +213,8 @@
    *        IP packet.
    *
    */
-  void InitializeChecksum (Ipv4Address source, 
-                           Ipv4Address destination,
+  void InitializeChecksum (const Ipv4Address &source,
+                           const Ipv4Address &destination,
                            uint8_t protocol);
 
   /**
@@ -222,8 +231,8 @@
    *        IP packet.
    *
    */
-  void InitializeChecksum (Ipv6Address source, 
-                           Ipv6Address destination,
+  void InitializeChecksum (const Ipv6Address &source,
+                           const Ipv6Address &destination,
                            uint8_t protocol);
 
   /**
@@ -240,8 +249,8 @@
    *        IP packet.
    *
    */
-  void InitializeChecksum (Address source, 
-                           Address destination,
+  void InitializeChecksum (const Address &source,
+                           const Address &destination,
                            uint8_t protocol);
 
   /**
diff -Naur ns-3.23/src/internet/model/tcp-l4-protocol.cc ns-3.24/src/internet/model/tcp-l4-protocol.cc
--- ns-3.23/src/internet/model/tcp-l4-protocol.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/tcp-l4-protocol.cc	2015-09-15 11:18:44.000000000 -0700
@@ -57,12 +57,12 @@
 
 #undef NS_LOG_APPEND_CONTEXT
 #define NS_LOG_APPEND_CONTEXT                                   \
-  if (m_node) { std::clog << Simulator::Now ().GetSeconds () << " [node " << m_node->GetId () << "] "; } 
+  if (m_node) { std::clog << Simulator::Now ().GetSeconds () << " [node " << m_node->GetId () << "] "; }
 
 /* see http://www.iana.org/assignments/protocol-numbers */
 const uint8_t TcpL4Protocol::PROT_NUMBER = 6;
 
-TypeId 
+TypeId
 TcpL4Protocol::GetTypeId (void)
 {
   static TypeId tid = TypeId ("ns3::TcpL4Protocol")
@@ -91,7 +91,7 @@
   : m_endPoints (new Ipv4EndPointDemux ()), m_endPoints6 (new Ipv6EndPointDemux ())
 {
   NS_LOG_FUNCTION_NOARGS ();
-  NS_LOG_LOGIC ("Made a TcpL4Protocol "<<this);
+  NS_LOG_LOGIC ("Made a TcpL4Protocol " << this);
 }
 
 TcpL4Protocol::~TcpL4Protocol ()
@@ -99,17 +99,12 @@
   NS_LOG_FUNCTION_NOARGS ();
 }
 
-void 
+void
 TcpL4Protocol::SetNode (Ptr<Node> node)
 {
   m_node = node;
 }
 
-/* 
- * This method is called by AddAgregate and completes the aggregation
- * by setting the node in the TCP stack, link it to the ipv4 stack and 
- * adding TCP socket factory to the node.
- */
 void
 TcpL4Protocol::NotifyNewAggregate ()
 {
@@ -132,21 +127,21 @@
   // functions.  Since these functions have different prototypes, we
   // need to keep track of whether we are connected to an IPv4 or
   // IPv6 lower layer and call the appropriate one.
-  
+
   if (ipv4 != 0 && m_downTarget.IsNull ())
     {
-      ipv4->Insert(this);
-      this->SetDownTarget(MakeCallback(&Ipv4::Send, ipv4));
+      ipv4->Insert (this);
+      this->SetDownTarget (MakeCallback (&Ipv4::Send, ipv4));
     }
   if (ipv6 != 0 && m_downTarget6.IsNull ())
     {
-      ipv6->Insert(this);
-      this->SetDownTarget6(MakeCallback(&Ipv6L3Protocol::Send, ipv6));
+      ipv6->Insert (this);
+      this->SetDownTarget6 (MakeCallback (&Ipv6L3Protocol::Send, ipv6));
     }
-  Object::NotifyNewAggregate ();
+  IpL4Protocol::NotifyNewAggregate ();
 }
 
-int 
+int
 TcpL4Protocol::GetProtocolNumber (void) const
 {
   return PROT_NUMBER;
@@ -236,7 +231,7 @@
                                 peerAddress, peerPort);
 }
 
-void 
+void
 TcpL4Protocol::DeAllocate (Ipv4EndPoint *endPoint)
 {
   NS_LOG_FUNCTION (this << endPoint);
@@ -287,13 +282,13 @@
   m_endPoints6->DeAllocate (endPoint);
 }
 
-void 
+void
 TcpL4Protocol::ReceiveIcmp (Ipv4Address icmpSource, uint8_t icmpTtl,
                             uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo,
                             Ipv4Address payloadSource,Ipv4Address payloadDestination,
                             const uint8_t payload[8])
 {
-  NS_LOG_FUNCTION (this << icmpSource << icmpTtl << icmpType << icmpCode << icmpInfo 
+  NS_LOG_FUNCTION (this << icmpSource << icmpTtl << icmpType << icmpCode << icmpInfo
                         << payloadSource << payloadDestination);
   uint16_t src, dst;
   src = payload[0] << 8;
@@ -309,18 +304,18 @@
   else
     {
       NS_LOG_DEBUG ("no endpoint found source=" << payloadSource <<
-                    ", destination="<<payloadDestination<<
+                    ", destination=" << payloadDestination <<
                     ", src=" << src << ", dst=" << dst);
     }
 }
 
-void 
+void
 TcpL4Protocol::ReceiveIcmp (Ipv6Address icmpSource, uint8_t icmpTtl,
                             uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo,
                             Ipv6Address payloadSource,Ipv6Address payloadDestination,
                             const uint8_t payload[8])
 {
-  NS_LOG_FUNCTION (this << icmpSource << icmpTtl << icmpType << icmpCode << icmpInfo 
+  NS_LOG_FUNCTION (this << icmpSource << icmpTtl << icmpType << icmpCode << icmpInfo
                         << payloadSource << payloadDestination);
   uint16_t src, dst;
   src = payload[0] << 8;
@@ -336,277 +331,203 @@
   else
     {
       NS_LOG_DEBUG ("no endpoint found source=" << payloadSource <<
-                    ", destination="<<payloadDestination<<
+                    ", destination=" << payloadDestination <<
                     ", src=" << src << ", dst=" << dst);
     }
 }
 
 enum IpL4Protocol::RxStatus
-TcpL4Protocol::Receive (Ptr<Packet> packet,
-                        Ipv4Header const &ipHeader,
-                        Ptr<Ipv4Interface> incomingInterface)
+TcpL4Protocol::PacketReceived (Ptr<Packet> packet, TcpHeader &incomingTcpHeader,
+                               const Address &source, const Address &destination)
 {
-  NS_LOG_FUNCTION (this << packet << ipHeader << incomingInterface);
 
-  TcpHeader tcpHeader;
-  if(Node::ChecksumEnabled ())
+  if (Node::ChecksumEnabled ())
     {
-      tcpHeader.EnableChecksums ();
-      tcpHeader.InitializeChecksum (ipHeader.GetSource (), ipHeader.GetDestination (), PROT_NUMBER);
+      incomingTcpHeader.EnableChecksums ();
+      incomingTcpHeader.InitializeChecksum (source, destination, PROT_NUMBER);
     }
 
-  packet->PeekHeader (tcpHeader);
+  packet->PeekHeader (incomingTcpHeader);
 
   NS_LOG_LOGIC ("TcpL4Protocol " << this
-                                 << " receiving seq " << tcpHeader.GetSequenceNumber ()
-                                 << " ack " << tcpHeader.GetAckNumber ()
-                                 << " flags "<< std::hex << (int)tcpHeader.GetFlags () << std::dec
+                                 << " receiving seq " << incomingTcpHeader.GetSequenceNumber ()
+                                 << " ack " << incomingTcpHeader.GetAckNumber ()
+                                 << " flags "<< TcpHeader::FlagsToString (incomingTcpHeader.GetFlags ())
                                  << " data size " << packet->GetSize ());
 
-  if(!tcpHeader.IsChecksumOk ())
+  if (!incomingTcpHeader.IsChecksumOk ())
     {
       NS_LOG_INFO ("Bad checksum, dropping packet!");
       return IpL4Protocol::RX_CSUM_FAILED;
     }
 
-  NS_LOG_LOGIC ("TcpL4Protocol "<<this<<" received a packet");
-  Ipv4EndPointDemux::EndPoints endPoints =
-    m_endPoints->Lookup (ipHeader.GetDestination (), tcpHeader.GetDestinationPort (),
-                         ipHeader.GetSource (), tcpHeader.GetSourcePort (),incomingInterface);
-  if (endPoints.empty ())
-    {
-      if (this->GetObject<Ipv6L3Protocol> () != 0)
-        {
-          NS_LOG_LOGIC ("  No Ipv4 endpoints matched on TcpL4Protocol, trying Ipv6 "<<this);
-          Ptr<Ipv6Interface> fakeInterface;
-          Ipv6Header ipv6Header;
-          Ipv6Address src = Ipv6Address::MakeIpv4MappedAddress (ipHeader.GetSource ());
-          Ipv6Address dst = Ipv6Address::MakeIpv4MappedAddress (ipHeader.GetDestination ());
-          ipv6Header.SetSourceAddress (src);
-          ipv6Header.SetDestinationAddress (dst);
-          return (this->Receive (packet, ipv6Header, fakeInterface));
-        }
+  return IpL4Protocol::RX_OK;
+}
 
-      NS_LOG_LOGIC ("  No endpoints matched on TcpL4Protocol "<<this);
-      std::ostringstream oss;
-      oss<<"  destination IP: ";
-      ipHeader.GetDestination ().Print (oss);
-      oss<<" destination port: "<< tcpHeader.GetDestinationPort ()<<" source IP: ";
-      ipHeader.GetSource ().Print (oss);
-      oss<<" source port: "<<tcpHeader.GetSourcePort ();
-      NS_LOG_LOGIC (oss.str ());
+void
+TcpL4Protocol::NoEndPointsFound (const TcpHeader &incomingHeader,
+                                 const Address &incomingSAddr,
+                                 const Address &incomingDAddr)
+{
+  if (!(incomingHeader.GetFlags () & TcpHeader::RST))
+    {
+      // build a RST packet and send
+      Ptr<Packet> rstPacket = Create<Packet> ();
+      TcpHeader outgoingTcpHeader;
 
-      if (!(tcpHeader.GetFlags () & TcpHeader::RST))
+      if (incomingHeader.GetFlags () & TcpHeader::ACK)
         {
-          // build a RST packet and send
-          Ptr<Packet> rstPacket = Create<Packet> ();
-          TcpHeader header;
-          if (tcpHeader.GetFlags () & TcpHeader::ACK)
-            {
-              // ACK bit was set
-              header.SetFlags (TcpHeader::RST);
-              header.SetSequenceNumber (header.GetAckNumber ());
-            }
-          else
-            {
-              header.SetFlags (TcpHeader::RST | TcpHeader::ACK);
-              header.SetSequenceNumber (SequenceNumber32 (0));
-              header.SetAckNumber (header.GetSequenceNumber () + SequenceNumber32 (1));
-            }
-          header.SetSourcePort (tcpHeader.GetDestinationPort ());
-          header.SetDestinationPort (tcpHeader.GetSourcePort ());
-          SendPacket (rstPacket, header, ipHeader.GetDestination (), ipHeader.GetSource ());
-          return IpL4Protocol::RX_ENDPOINT_CLOSED;
+          // ACK bit was set
+          outgoingTcpHeader.SetFlags (TcpHeader::RST);
+          outgoingTcpHeader.SetSequenceNumber (incomingHeader.GetAckNumber ());
         }
       else
         {
-          return IpL4Protocol::RX_ENDPOINT_CLOSED;
+          outgoingTcpHeader.SetFlags (TcpHeader::RST | TcpHeader::ACK);
+          outgoingTcpHeader.SetSequenceNumber (SequenceNumber32 (0));
+          outgoingTcpHeader.SetAckNumber (incomingHeader.GetSequenceNumber () +
+                                          SequenceNumber32 (1));
         }
+
+      // Remember that parameters refer to the incoming packet; in reply,
+      // we need to swap src/dst
+
+      outgoingTcpHeader.SetSourcePort (incomingHeader.GetDestinationPort ());
+      outgoingTcpHeader.SetDestinationPort (incomingHeader.GetSourcePort ());
+
+      SendPacket (rstPacket, outgoingTcpHeader, incomingDAddr, incomingSAddr);
     }
-  NS_ASSERT_MSG (endPoints.size () == 1, "Demux returned more than one endpoint");
-  NS_LOG_LOGIC ("TcpL4Protocol "<<this<<" forwarding up to endpoint/socket");
-  (*endPoints.begin ())->ForwardUp (packet, ipHeader, tcpHeader.GetSourcePort (), 
-                                    incomingInterface);
-  return IpL4Protocol::RX_OK;
 }
 
 enum IpL4Protocol::RxStatus
 TcpL4Protocol::Receive (Ptr<Packet> packet,
-                        Ipv6Header const &ipHeader,
-                        Ptr<Ipv6Interface> interface)
+                        Ipv4Header const &incomingIpHeader,
+                        Ptr<Ipv4Interface> incomingInterface)
 {
-  NS_LOG_FUNCTION (this << packet << ipHeader.GetSourceAddress () << ipHeader.GetDestinationAddress ());
+  NS_LOG_FUNCTION (this << packet << incomingIpHeader << incomingInterface);
 
-  TcpHeader tcpHeader;
+  TcpHeader incomingTcpHeader;
+  IpL4Protocol::RxStatus checksumControl;
 
-  // If we are receving a v4-mapped packet, we will re-calculate the TCP checksum
-  // Is it worth checking every received "v6" packet to see if it is v4-mapped in
-  // order to avoid re-calculating TCP checksums for v4-mapped packets?
+  checksumControl = PacketReceived (packet, incomingTcpHeader,
+                                    incomingIpHeader.GetSource (),
+                                    incomingIpHeader.GetDestination ());
 
-  if(Node::ChecksumEnabled ())
+  if (checksumControl != IpL4Protocol::RX_OK)
     {
-      tcpHeader.EnableChecksums ();
-      tcpHeader.InitializeChecksum (ipHeader.GetSourceAddress (), ipHeader.GetDestinationAddress (), PROT_NUMBER);
+      return checksumControl;
     }
 
-  packet->PeekHeader (tcpHeader);
-
-  NS_LOG_LOGIC ("TcpL4Protocol " << this
-                                 << " receiving seq " << tcpHeader.GetSequenceNumber ()
-                                 << " ack " << tcpHeader.GetAckNumber ()
-                                 << " flags "<< std::hex << (int)tcpHeader.GetFlags () << std::dec
-                                 << " data size " << packet->GetSize ());
+  NS_LOG_LOGIC ("TcpL4Protocol " << this << " received a packet");
 
-  if(!tcpHeader.IsChecksumOk ())
-    {
-      NS_LOG_INFO ("Bad checksum, dropping packet!");
-      return IpL4Protocol::RX_CSUM_FAILED;
-    }
+  Ipv4EndPointDemux::EndPoints endPoints;
+  endPoints = m_endPoints->Lookup (incomingIpHeader.GetDestination (),
+                                   incomingTcpHeader.GetDestinationPort (),
+                                   incomingIpHeader.GetSource (),
+                                   incomingTcpHeader.GetSourcePort (),
+                                   incomingInterface);
 
-  NS_LOG_LOGIC ("TcpL4Protocol "<<this<<" received a packet");
-  Ipv6EndPointDemux::EndPoints endPoints =
-    m_endPoints6->Lookup (ipHeader.GetDestinationAddress (), tcpHeader.GetDestinationPort (),
-                          ipHeader.GetSourceAddress (), tcpHeader.GetSourcePort (),interface);
   if (endPoints.empty ())
     {
-      NS_LOG_LOGIC ("  No IPv6 endpoints matched on TcpL4Protocol "<<this);
-      std::ostringstream oss;
-      oss<<"  destination IP: ";
-      (ipHeader.GetDestinationAddress ()).Print (oss);
-      oss<<" destination port: "<< tcpHeader.GetDestinationPort ()<<" source IP: ";
-      (ipHeader.GetSourceAddress ()).Print (oss);
-      oss<<" source port: "<<tcpHeader.GetSourcePort ();
-      NS_LOG_LOGIC (oss.str ());
-
-      if (!(tcpHeader.GetFlags () & TcpHeader::RST))
-        {
-          // build a RST packet and send
-          Ptr<Packet> rstPacket = Create<Packet> ();
-          TcpHeader header;
-          if (tcpHeader.GetFlags () & TcpHeader::ACK)
-            {
-              // ACK bit was set
-              header.SetFlags (TcpHeader::RST);
-              header.SetSequenceNumber (header.GetAckNumber ());
-            }
-          else
-            {
-              header.SetFlags (TcpHeader::RST | TcpHeader::ACK);
-              header.SetSequenceNumber (SequenceNumber32 (0));
-              header.SetAckNumber (header.GetSequenceNumber () + SequenceNumber32 (1));
-            }
-          header.SetSourcePort (tcpHeader.GetDestinationPort ());
-          header.SetDestinationPort (tcpHeader.GetSourcePort ());
-          SendPacket (rstPacket, header, ipHeader.GetDestinationAddress (), ipHeader.GetSourceAddress ());
-          return IpL4Protocol::RX_ENDPOINT_CLOSED;
-        }
-      else
+      if (this->GetObject<Ipv6L3Protocol> () != 0)
         {
-          return IpL4Protocol::RX_ENDPOINT_CLOSED;
+          NS_LOG_LOGIC ("  No Ipv4 endpoints matched on TcpL4Protocol, trying Ipv6 " << this);
+          Ptr<Ipv6Interface> fakeInterface;
+          Ipv6Header ipv6Header;
+          Ipv6Address src, dst;
+
+          src = Ipv6Address::MakeIpv4MappedAddress (incomingIpHeader.GetSource ());
+          dst = Ipv6Address::MakeIpv4MappedAddress (incomingIpHeader.GetDestination ());
+          ipv6Header.SetSourceAddress (src);
+          ipv6Header.SetDestinationAddress (dst);
+          return (this->Receive (packet, ipv6Header, fakeInterface));
         }
+
+      NS_LOG_LOGIC ("No endpoints matched on TcpL4Protocol "<< this <<
+                    " destination IP: " << incomingIpHeader.GetDestination () <<
+                    " destination port: "<< incomingTcpHeader.GetDestinationPort () <<
+                    " source IP: " << incomingIpHeader.GetSource () <<
+                    " source port: "<< incomingTcpHeader.GetSourcePort ());
+
+      NoEndPointsFound (incomingTcpHeader, incomingIpHeader.GetSource (),
+                        incomingIpHeader.GetDestination ());
+
+      return IpL4Protocol::RX_ENDPOINT_CLOSED;
+
     }
+
   NS_ASSERT_MSG (endPoints.size () == 1, "Demux returned more than one endpoint");
-  NS_LOG_LOGIC ("TcpL4Protocol "<<this<<" forwarding up to endpoint/socket");
-  (*endPoints.begin ())->ForwardUp (packet, ipHeader, tcpHeader.GetSourcePort (), interface);
+  NS_LOG_LOGIC ("TcpL4Protocol " << this << " forwarding up to endpoint/socket");
+
+  (*endPoints.begin ())->ForwardUp (packet, incomingIpHeader,
+                                    incomingTcpHeader.GetSourcePort (),
+                                    incomingInterface);
+
   return IpL4Protocol::RX_OK;
 }
 
-void
-TcpL4Protocol::Send (Ptr<Packet> packet, 
-                     Ipv4Address saddr, Ipv4Address daddr,
-                     uint16_t sport, uint16_t dport, Ptr<NetDevice> oif)
+enum IpL4Protocol::RxStatus
+TcpL4Protocol::Receive (Ptr<Packet> packet,
+                        Ipv6Header const &incomingIpHeader,
+                        Ptr<Ipv6Interface> interface)
 {
-  NS_LOG_FUNCTION (this << packet << saddr << daddr << sport << dport << oif);
+  NS_LOG_FUNCTION (this << packet << incomingIpHeader.GetSourceAddress () <<
+                   incomingIpHeader.GetDestinationAddress ());
 
-  TcpHeader tcpHeader;
-  tcpHeader.SetDestinationPort (dport);
-  tcpHeader.SetSourcePort (sport);
-  if(Node::ChecksumEnabled ())
-    {
-      tcpHeader.EnableChecksums ();
-    }
-  tcpHeader.InitializeChecksum (saddr,
-                                daddr,
-                                PROT_NUMBER);
-  tcpHeader.SetFlags (TcpHeader::ACK);
-  tcpHeader.SetAckNumber (SequenceNumber32 (0));
+  TcpHeader incomingTcpHeader;
+  IpL4Protocol::RxStatus checksumControl;
+
+  // If we are receving a v4-mapped packet, we will re-calculate the TCP checksum
+  // Is it worth checking every received "v6" packet to see if it is v4-mapped in
+  // order to avoid re-calculating TCP checksums for v4-mapped packets?
 
-  packet->AddHeader (tcpHeader);
+  checksumControl = PacketReceived (packet, incomingTcpHeader,
+                                    incomingIpHeader.GetSourceAddress (),
+                                    incomingIpHeader.GetDestinationAddress ());
 
-  Ptr<Ipv4> ipv4 = m_node->GetObject<Ipv4> ();
-  if (ipv4 != 0)
+  if (checksumControl != IpL4Protocol::RX_OK)
     {
-      Ipv4Header header;
-      header.SetDestination (daddr);
-      header.SetProtocol (PROT_NUMBER);
-      Socket::SocketErrno errno_;
-      Ptr<Ipv4Route> route;
-      Ptr<NetDevice> oif (0); //specify non-zero if bound to a source address
-      if (ipv4->GetRoutingProtocol () != 0)
-        {
-          route = ipv4->GetRoutingProtocol ()->RouteOutput (packet, header, oif, errno_);
-        }
-      else
-        {
-          NS_LOG_ERROR ("No IPV4 Routing Protocol");
-          route = 0;
-        }
-      ipv4->Send (packet, saddr, daddr, PROT_NUMBER, route);
+      return checksumControl;
     }
-}
 
-void
-TcpL4Protocol::Send (Ptr<Packet> packet,
-                     Ipv6Address saddr, Ipv6Address daddr,
-                     uint16_t sport, uint16_t dport, Ptr<NetDevice> oif)
-{
-  NS_LOG_FUNCTION (this << packet << saddr << daddr << sport << dport << oif);
-
-  TcpHeader tcpHeader;
-  tcpHeader.SetDestinationPort (dport);
-  tcpHeader.SetSourcePort (sport);
-  if(Node::ChecksumEnabled ())
+  NS_LOG_LOGIC ("TcpL4Protocol " << this << " received a packet");
+  Ipv6EndPointDemux::EndPoints endPoints =
+    m_endPoints6->Lookup (incomingIpHeader.GetDestinationAddress (),
+                          incomingTcpHeader.GetDestinationPort (),
+                          incomingIpHeader.GetSourceAddress (),
+                          incomingTcpHeader.GetSourcePort (), interface);
+  if (endPoints.empty ())
     {
-      tcpHeader.EnableChecksums ();
-    }
-  tcpHeader.InitializeChecksum (saddr,
-                                daddr,
-                                PROT_NUMBER);
-  tcpHeader.SetFlags (TcpHeader::ACK);
-  tcpHeader.SetAckNumber (SequenceNumber32 (0));
+      NS_LOG_LOGIC ("No endpoints matched on TcpL4Protocol "<< this <<
+                    " destination IP: " << incomingIpHeader.GetDestinationAddress () <<
+                    " destination port: "<< incomingTcpHeader.GetDestinationPort () <<
+                    " source IP: " << incomingIpHeader.GetSourceAddress () <<
+                    " source port: "<< incomingTcpHeader.GetSourcePort ());
 
-  packet->AddHeader (tcpHeader);
+      NoEndPointsFound (incomingTcpHeader, incomingIpHeader.GetSourceAddress (),
+                        incomingIpHeader.GetDestinationAddress ());
 
-  Ptr<Ipv6L3Protocol> ipv6 = m_node->GetObject<Ipv6L3Protocol> ();
-  if (ipv6 != 0)
-    {
-      Ipv6Header header;
-      header.SetDestinationAddress (daddr);
-      header.SetNextHeader (PROT_NUMBER);
-      Socket::SocketErrno errno_;
-      Ptr<Ipv6Route> route;
-      Ptr<NetDevice> oif (0); //specify non-zero if bound to a source address
-      if (ipv6->GetRoutingProtocol () != 0)
-        {
-          route = ipv6->GetRoutingProtocol ()->RouteOutput (packet, header, oif, errno_);
-        }
-      else
-        {
-          NS_LOG_ERROR ("No IPV6 Routing Protocol");
-          route = 0;
-        }
-      ipv6->Send (packet, saddr, daddr, PROT_NUMBER, route);
+      return IpL4Protocol::RX_ENDPOINT_CLOSED;
     }
+
+  NS_ASSERT_MSG (endPoints.size () == 1, "Demux returned more than one endpoint");
+  NS_LOG_LOGIC ("TcpL4Protocol " << this << " forwarding up to endpoint/socket");
+
+  (*endPoints.begin ())->ForwardUp (packet, incomingIpHeader,
+                                    incomingTcpHeader.GetSourcePort (), interface);
+
+  return IpL4Protocol::RX_OK;
 }
 
 void
-TcpL4Protocol::SendPacket (Ptr<Packet> packet, const TcpHeader &outgoing,
-                           Ipv4Address saddr, Ipv4Address daddr, Ptr<NetDevice> oif)
+TcpL4Protocol::SendPacketV4 (Ptr<Packet> packet, const TcpHeader &outgoing,
+                             const Ipv4Address &saddr, const Ipv4Address &daddr,
+                             Ptr<NetDevice> oif) const
 {
   NS_LOG_LOGIC ("TcpL4Protocol " << this
                                  << " sending seq " << outgoing.GetSequenceNumber ()
                                  << " ack " << outgoing.GetAckNumber ()
-                                 << " flags " << std::hex << (int)outgoing.GetFlags () << std::dec
+                                 << " flags " << TcpHeader::FlagsToString (outgoing.GetFlags ())
                                  << " data size " << packet->GetSize ());
   NS_LOG_FUNCTION (this << packet << saddr << daddr << oif);
   // XXX outgoingHeader cannot be logged
@@ -614,7 +535,7 @@
   TcpHeader outgoingHeader = outgoing;
   /** \todo UrgentPointer */
   /* outgoingHeader.SetUrgentPointer (0); */
-  if(Node::ChecksumEnabled ())
+  if (Node::ChecksumEnabled ())
     {
       outgoingHeader.EnableChecksums ();
     }
@@ -622,11 +543,12 @@
 
   packet->AddHeader (outgoingHeader);
 
-  Ptr<Ipv4> ipv4 = 
+  Ptr<Ipv4> ipv4 =
     m_node->GetObject<Ipv4> ();
   if (ipv4 != 0)
     {
       Ipv4Header header;
+      header.SetSource (saddr);
       header.SetDestination (daddr);
       header.SetProtocol (PROT_NUMBER);
       Socket::SocketErrno errno_;
@@ -643,29 +565,32 @@
       m_downTarget (packet, saddr, daddr, PROT_NUMBER, route);
     }
   else
-    NS_FATAL_ERROR ("Trying to use Tcp on a node without an Ipv4 interface");
+    {
+      NS_FATAL_ERROR ("Trying to use Tcp on a node without an Ipv4 interface");
+    }
 }
 
 void
-TcpL4Protocol::SendPacket (Ptr<Packet> packet, const TcpHeader &outgoing,
-                           Ipv6Address saddr, Ipv6Address daddr, Ptr<NetDevice> oif)
+TcpL4Protocol::SendPacketV6 (Ptr<Packet> packet, const TcpHeader &outgoing,
+                             const Ipv6Address &saddr, const Ipv6Address &daddr,
+                             Ptr<NetDevice> oif) const
 {
   NS_LOG_LOGIC ("TcpL4Protocol " << this
                                  << " sending seq " << outgoing.GetSequenceNumber ()
                                  << " ack " << outgoing.GetAckNumber ()
-                                 << " flags " << std::hex << (int)outgoing.GetFlags () << std::dec
+                                 << " flags " << TcpHeader::FlagsToString (outgoing.GetFlags ())
                                  << " data size " << packet->GetSize ());
   NS_LOG_FUNCTION (this << packet << saddr << daddr << oif);
   // XXX outgoingHeader cannot be logged
 
   if (daddr.IsIpv4MappedAddress ())
     {
-      return (SendPacket (packet, outgoing, saddr.GetIpv4MappedAddress(), daddr.GetIpv4MappedAddress(), oif));
+      return (SendPacket (packet, outgoing, saddr.GetIpv4MappedAddress (), daddr.GetIpv4MappedAddress (), oif));
     }
   TcpHeader outgoingHeader = outgoing;
   /** \todo UrgentPointer */
   /* outgoingHeader.SetUrgentPointer (0); */
-  if(Node::ChecksumEnabled ())
+  if (Node::ChecksumEnabled ())
     {
       outgoingHeader.EnableChecksums ();
     }
@@ -677,8 +602,8 @@
   if (ipv6 != 0)
     {
       Ipv6Header header;
-      header.SetDestinationAddress (daddr);
       header.SetSourceAddress (saddr);
+      header.SetDestinationAddress (daddr);
       header.SetNextHeader (PROT_NUMBER);
       Socket::SocketErrno errno_;
       Ptr<Ipv6Route> route;
@@ -694,7 +619,91 @@
       m_downTarget6 (packet, saddr, daddr, PROT_NUMBER, route);
     }
   else
-    NS_FATAL_ERROR ("Trying to use Tcp on a node without an Ipv6 interface");
+    {
+      NS_FATAL_ERROR ("Trying to use Tcp on a node without an Ipv6 interface");
+    }
+}
+
+void
+TcpL4Protocol::SendPacket (Ptr<Packet> pkt, const TcpHeader &outgoing,
+                           const Address &saddr, const Address &daddr,
+                           Ptr<NetDevice> oif) const
+{
+  if (Ipv4Address::IsMatchingType (saddr))
+    {
+      NS_ASSERT (Ipv4Address::IsMatchingType (daddr));
+
+      SendPacketV4 (pkt, outgoing, Ipv4Address::ConvertFrom (saddr),
+                    Ipv4Address::ConvertFrom (daddr), oif);
+
+      return;
+    }
+  else if (Ipv6Address::IsMatchingType (saddr))
+    {
+      NS_ASSERT (Ipv6Address::IsMatchingType (daddr));
+
+      SendPacketV6 (pkt, outgoing, Ipv6Address::ConvertFrom (saddr),
+                    Ipv6Address::ConvertFrom (daddr), oif);
+
+      return;
+    }
+  else if (InetSocketAddress::IsMatchingType (saddr))
+    {
+      InetSocketAddress s = InetSocketAddress::ConvertFrom (saddr);
+      InetSocketAddress d = InetSocketAddress::ConvertFrom (daddr);
+
+      SendPacketV4 (pkt, outgoing, s.GetIpv4 (), d.GetIpv4 (), oif);
+
+      return;
+    }
+  else if (Inet6SocketAddress::IsMatchingType (saddr))
+    {
+      Inet6SocketAddress s = Inet6SocketAddress::ConvertFrom (saddr);
+      Inet6SocketAddress d = Inet6SocketAddress::ConvertFrom (daddr);
+
+      SendPacketV6 (pkt, outgoing, s.GetIpv6 (), d.GetIpv6 (), oif);
+
+      return;
+    }
+
+  NS_FATAL_ERROR ("Trying to send a packet without IP addresses");
+}
+
+void
+TcpL4Protocol::AddSocket (Ptr<TcpSocketBase> socket)
+{
+  std::vector<Ptr<TcpSocketBase> >::iterator it = m_sockets.begin ();
+
+  while (it != m_sockets.end ())
+    {
+      if (*it == socket)
+        {
+          return;
+        }
+
+      ++it;
+    }
+
+  m_sockets.push_back (socket);
+}
+
+bool
+TcpL4Protocol::RemoveSocket (Ptr<TcpSocketBase> socket)
+{
+  std::vector<Ptr<TcpSocketBase> >::iterator it = m_sockets.begin ();
+
+  while (it != m_sockets.end ())
+    {
+      if (*it == socket)
+        {
+          m_sockets.erase (it);
+          return true;
+        }
+
+      ++it;
+    }
+
+  return false;
 }
 
 void
diff -Naur ns-3.23/src/internet/model/tcp-l4-protocol.h ns-3.24/src/internet/model/tcp-l4-protocol.h
--- ns-3.23/src/internet/model/tcp-l4-protocol.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/tcp-l4-protocol.h	2015-09-15 11:18:44.000000000 -0700
@@ -23,13 +23,11 @@
 
 #include <stdint.h>
 
-#include "ns3/packet.h"
 #include "ns3/ipv4-address.h"
 #include "ns3/ipv6-address.h"
-#include "ns3/ptr.h"
-#include "ns3/object-factory.h"
+#include "ns3/sequence-number.h"
 #include "ip-l4-protocol.h"
-#include "ns3/net-device.h"
+
 
 namespace ns3 {
 
@@ -45,12 +43,24 @@
 
 /**
  * \ingroup tcp
- * \brief A layer between the sockets interface and IP
+ * \brief Tcp socket creation and multiplexing/demultiplexing
  * 
- * This class allocates "endpoint" objects (ns3::Ipv4EndPoint) for TCP,
+ * A single instance of this class is held by one instance of class Node.
+ *
+ * The creation of TcpSocket are handled in the method CreateSocket, which is
+ * called by TcpSocketFactory. Upon creation, this class is responsible to
+ * the socket initialization and handle multiplexing/demultiplexing of data
+ * between node's TCP sockets. Demultiplexing is done by receiving
+ * packets from IP, and forwards them up to the right socket. Multiplexing
+ * is done through the SendPacket function, which sends the packet down the stack.
+ *
+ * Moreover, this class allocates "endpoint" objects (ns3::Ipv4EndPoint) for TCP,
  * and SHOULD checksum packets its receives from the socket layer going down
- * the stack , but currently checksumming is disabled.  It also receives 
- * packets from IP, and forwards them up to the endpoints.
+ * the stack, but currently checksumming is disabled.
+ *
+ * \see CreateSocket
+ * \see NotifyNewAggregate
+ * \see SendPacket
 */
 
 class TcpL4Protocol : public IpL4Protocol {
@@ -71,16 +81,16 @@
    */
   void SetNode (Ptr<Node> node);
 
-  virtual int GetProtocolNumber (void) const;
-
   /**
-   * \brief Create a TCP socket
+   * \brief Create a TCP socket using the TypeId set by SocketType attribute
+   *
    * \return A smart Socket pointer to a TcpSocket allocated by this instance
    * of the TCP protocol
    */
   Ptr<Socket> CreateSocket (void);
   /**
-   * \brief Create a TCP socket
+   * \brief Create a TCP socket using the specified TypeId
+   *
    * \return A smart Socket pointer to a TcpSocket allocated by this instance
    * of the TCP protocol
    *
@@ -160,6 +170,36 @@
                            Ipv6Address peerAddress, uint16_t peerPort);
 
   /**
+   * \brief Send a packet via TCP (IP-agnostic)
+   *
+   * \param pkt The packet to send
+   * \param outgoing The packet header
+   * \param saddr The source Ipv4Address
+   * \param daddr The destination Ipv4Address
+   * \param oif The output interface bound. Defaults to null (unspecified).
+   */
+  void SendPacket (Ptr<Packet> pkt, const TcpHeader &outgoing,
+                   const Address &saddr, const Address &daddr,
+                   Ptr<NetDevice> oif = 0) const;
+
+  /**
+   * \brief Make a socket fully operational
+   *
+   * Called after a socket has been bound, it is inserted in an internal vector.
+   *
+   * \param socket Socket to be added
+   */
+  void AddSocket (Ptr<TcpSocketBase> socket);
+
+  /**
+   * \brief Remove a socket from the internal list
+   *
+   * \param socket socket to Remove
+   * \return true if the socket has been removed
+   */
+  bool RemoveSocket (Ptr<TcpSocketBase> socket);
+
+  /**
    * \brief Remove an IPv4 Endpoint.
    * \param endPoint the end point to remove
    */
@@ -170,37 +210,12 @@
    */
   void DeAllocate (Ipv6EndPoint *endPoint);
 
-  /**
-   * \brief Send a packet via TCP (IPv4)
-   * \param packet The packet to send
-   * \param saddr The source Ipv4Address
-   * \param daddr The destination Ipv4Address
-   * \param sport The source port number
-   * \param dport The destination port number
-   * \param oif The output interface bound. Defaults to null (unspecified).
-   */
-  void Send (Ptr<Packet> packet,
-             Ipv4Address saddr, Ipv4Address daddr, 
-             uint16_t sport, uint16_t dport, Ptr<NetDevice> oif = 0);
-  /**
-   * \brief Send a packet via TCP (IPv6)
-   * \param packet The packet to send
-   * \param saddr The source Ipv4Address
-   * \param daddr The destination Ipv4Address
-   * \param sport The source port number
-   * \param dport The destination port number
-   * \param oif The output interface bound. Defaults to null (unspecified).
-   */
-  void Send (Ptr<Packet> packet,
-             Ipv6Address saddr, Ipv6Address daddr, 
-             uint16_t sport, uint16_t dport, Ptr<NetDevice> oif = 0);
-
-
+  // From IpL4Protocol
   virtual enum IpL4Protocol::RxStatus Receive (Ptr<Packet> p,
-                                               Ipv4Header const &header,
+                                               Ipv4Header const &incomingIpHeader,
                                                Ptr<Ipv4Interface> incomingInterface);
   virtual enum IpL4Protocol::RxStatus Receive (Ptr<Packet> p,
-                                               Ipv6Header const &header,
+                                               Ipv6Header const &incomingIpHeader,
                                                Ptr<Ipv6Interface> incomingInterface);
 
   virtual void ReceiveIcmp (Ipv4Address icmpSource, uint8_t icmpTtl,
@@ -212,32 +227,65 @@
                             Ipv6Address payloadSource,Ipv6Address payloadDestination,
                             const uint8_t payload[8]);
 
-  // From IpL4Protocol
   virtual void SetDownTarget (IpL4Protocol::DownTargetCallback cb);
   virtual void SetDownTarget6 (IpL4Protocol::DownTargetCallback6 cb);
-  // From IpL4Protocol
+  virtual int GetProtocolNumber (void) const;
   virtual IpL4Protocol::DownTargetCallback GetDownTarget (void) const;
   virtual IpL4Protocol::DownTargetCallback6 GetDownTarget6 (void) const;
 
 protected:
   virtual void DoDispose (void);
-  /* 
-   * This function will notify other components connected to the node that a new stack member is now connected
-   * This will be used to notify Layer 3 protocol of layer 4 protocol stack to connect them together.
+
+  /**
+   * \brief Setup socket factory and callbacks when aggregated to a node
+   *
+   * This function will notify other components connected to the node that a
+   * new stack member is now connected. This will be used to notify Layer 3
+   * protocol of layer 4 protocol stack to connect them together.
+   * The aggregation is completed by setting the node in the TCP stack, link
+   * it to the ipv4 or ipv6 stack and adding TCP socket factory to the node.
    */
   virtual void NotifyNewAggregate ();
+
+  /**
+   * \brief Get the tcp header of the incoming packet and checks its checksum if needed
+   *
+   * \param packet Received packet
+   * \param incomingTcpHeader Overwritten with the tcp header of the packet
+   * \param source Source address (an underlying Ipv4Address or Ipv6Address)
+   * \param destination Destination address (an underlying Ipv4Address or Ipv6Address)
+   *
+   * \return RX_CSUM_FAILED if the checksum check fails, RX_OK otherwise
+   */
+  enum IpL4Protocol::RxStatus
+  PacketReceived (Ptr<Packet> packet, TcpHeader &incomingTcpHeader,
+                  const Address &source, const Address &destination);
+
+  /**
+   * \brief Check if RST packet should be sent, and in case, send it
+   *
+   * The function is called when no endpoint is found for the received
+   * packet. So TcpL4Protocol do not know to who the packet should be
+   * given to. An RST packet is sent out as reply unless the received packet
+   * has the RST flag set.
+   *
+   * \param incomingHeader TCP header of the incoming packet
+   * \param incomingSAddr Source address of the incoming packet
+   * \param incomingDAddr Destination address of the incoming packet
+   *
+   */
+  void NoEndPointsFound (const TcpHeader &incomingHeader, const Address &incomingSAddr,
+                         const Address &incomingDAddr);
+
 private:
-  Ptr<Node> m_node; //!< the node this stack is associated with
-  Ipv4EndPointDemux *m_endPoints; //!< A list of IPv4 end points.
+  Ptr<Node> m_node;                //!< the node this stack is associated with
+  Ipv4EndPointDemux *m_endPoints;  //!< A list of IPv4 end points.
   Ipv6EndPointDemux *m_endPoints6; //!< A list of IPv6 end points.
-  TypeId m_rttTypeId; //!< The RTT Estimator TypeId
-  TypeId m_socketTypeId; //!< The socket TypeId
-private:
-  friend class TcpSocketBase;
-  void SendPacket (Ptr<Packet>, const TcpHeader &,
-                   Ipv4Address, Ipv4Address, Ptr<NetDevice> oif = 0);
-  void SendPacket (Ptr<Packet>, const TcpHeader &,
-                   Ipv6Address, Ipv6Address, Ptr<NetDevice> oif = 0);
+  TypeId m_rttTypeId;              //!< The RTT Estimator TypeId
+  TypeId m_socketTypeId;           //!< The socket TypeId
+  std::vector<Ptr<TcpSocketBase> > m_sockets;      //!< list of sockets
+  IpL4Protocol::DownTargetCallback m_downTarget;   //!< Callback to send packets over IPv4
+  IpL4Protocol::DownTargetCallback6 m_downTarget6; //!< Callback to send packets over IPv6
 
   /**
    * \brief Copy constructor
@@ -253,9 +301,31 @@
    */
   TcpL4Protocol &operator = (const TcpL4Protocol &);
 
-  std::vector<Ptr<TcpSocketBase> > m_sockets;      //!< list of sockets
-  IpL4Protocol::DownTargetCallback m_downTarget;   //!< Callback to send packets over IPv4
-  IpL4Protocol::DownTargetCallback6 m_downTarget6; //!< Callback to send packets over IPv6
+  /**
+   * \brief Send a packet via TCP (IPv4)
+   *
+   * \param pkt The packet to send
+   * \param outgoing The packet header
+   * \param saddr The source Ipv4Address
+   * \param daddr The destination Ipv4Address
+   * \param oif The output interface bound. Defaults to null (unspecified).
+   */
+  void SendPacketV4 (Ptr<Packet> pkt, const TcpHeader &outgoing,
+                     const Ipv4Address &saddr, const Ipv4Address &daddr,
+                     Ptr<NetDevice> oif = 0) const;
+
+  /**
+   * \brief Send a packet via TCP (IPv6)
+   *
+   * \param pkt The packet to send
+   * \param outgoing The packet header
+   * \param saddr The source Ipv4Address
+   * \param daddr The destination Ipv4Address
+   * \param oif The output interface bound. Defaults to null (unspecified).
+   */
+  void SendPacketV6 (Ptr<Packet> pkt, const TcpHeader &outgoing,
+                     const Ipv6Address &saddr, const Ipv6Address &daddr,
+                     Ptr<NetDevice> oif = 0) const;
 };
 
 } // namespace ns3
diff -Naur ns-3.23/src/internet/model/tcp-newreno.cc ns-3.24/src/internet/model/tcp-newreno.cc
--- ns-3.23/src/internet/model/tcp-newreno.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/tcp-newreno.cc	2015-09-15 11:18:44.000000000 -0700
@@ -49,14 +49,6 @@
                    BooleanValue (false),
                    MakeBooleanAccessor (&TcpNewReno::m_limitedTx),
                    MakeBooleanChecker ())
-    .AddTraceSource ("CongestionWindow",
-                     "The TCP connection's congestion window",
-                     MakeTraceSourceAccessor (&TcpNewReno::m_cWnd),
-                     "ns3::TracedValue::Uint32Callback")
-    .AddTraceSource ("SlowStartThreshold",
-                     "TCP slow start threshold (bytes)",
-                     MakeTraceSourceAccessor (&TcpNewReno::m_ssThresh),
-                     "ns3::TracedValue::Uint32Callback")
  ;
   return tid;
 }
@@ -71,10 +63,6 @@
 
 TcpNewReno::TcpNewReno (const TcpNewReno& sock)
   : TcpSocketBase (sock),
-    m_cWnd (sock.m_cWnd),
-    m_ssThresh (sock.m_ssThresh),
-    m_initialCWnd (sock.m_initialCWnd),
-    m_initialSsThresh (sock.m_initialSsThresh),
     m_retxThresh (sock.m_retxThresh),
     m_inFastRec (false),
     m_limitedTx (sock.m_limitedTx)
@@ -87,32 +75,6 @@
 {
 }
 
-/* We initialize m_cWnd from this function, after attributes initialized */
-int
-TcpNewReno::Listen (void)
-{
-  NS_LOG_FUNCTION (this);
-  InitializeCwnd ();
-  return TcpSocketBase::Listen ();
-}
-
-/* We initialize m_cWnd from this function, after attributes initialized */
-int
-TcpNewReno::Connect (const Address & address)
-{
-  NS_LOG_FUNCTION (this << address);
-  InitializeCwnd ();
-  return TcpSocketBase::Connect (address);
-}
-
-/* Limit the size of in-flight data by cwnd and receiver's rxwin */
-uint32_t
-TcpNewReno::Window (void)
-{
-  NS_LOG_FUNCTION (this);
-  return std::min (m_rWnd.Get (), m_cWnd.Get ());
-}
-
 Ptr<TcpSocketBase>
 TcpNewReno::Fork (void)
 {
@@ -220,55 +182,4 @@
   DoRetransmit ();                          // Retransmit the packet
 }
 
-void
-TcpNewReno::SetSegSize (uint32_t size)
-{
-  NS_ABORT_MSG_UNLESS (m_state == CLOSED, "TcpNewReno::SetSegSize() cannot change segment size after connection started.");
-  m_segmentSize = size;
-}
-
-void
-TcpNewReno::SetInitialSSThresh (uint32_t threshold)
-{
-  NS_ABORT_MSG_UNLESS (m_state == CLOSED, "TcpNewReno::SetSSThresh() cannot change initial ssThresh after connection started.");
-  m_initialSsThresh = threshold;
-}
-
-uint32_t
-TcpNewReno::GetInitialSSThresh (void) const
-{
-  return m_initialSsThresh;
-}
-
-void
-TcpNewReno::SetInitialCwnd (uint32_t cwnd)
-{
-  NS_ABORT_MSG_UNLESS (m_state == CLOSED, "TcpNewReno::SetInitialCwnd() cannot change initial cwnd after connection started.");
-  m_initialCWnd = cwnd;
-}
-
-uint32_t
-TcpNewReno::GetInitialCwnd (void) const
-{
-  return m_initialCWnd;
-}
-
-void 
-TcpNewReno::InitializeCwnd (void)
-{
-  /*
-   * Initialize congestion window, default to 1 MSS (RFC2001, sec.1) and must
-   * not be larger than 2 MSS (RFC2581, sec.3.1). Both m_initiaCWnd and
-   * m_segmentSize are set by the attribute system in ns3::TcpSocket.
-   */
-  m_cWnd = m_initialCWnd * m_segmentSize;
-  m_ssThresh = m_initialSsThresh;
-}
-
-void
-TcpNewReno::ScaleSsThresh (uint8_t scaleFactor)
-{
-  m_ssThresh <<= scaleFactor;
-}
-
 } // namespace ns3
diff -Naur ns-3.23/src/internet/model/tcp-newreno.h ns-3.24/src/internet/model/tcp-newreno.h
--- ns-3.23/src/internet/model/tcp-newreno.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/tcp-newreno.h	2015-09-15 11:18:44.000000000 -0700
@@ -52,36 +52,13 @@
   TcpNewReno (const TcpNewReno& sock);
   virtual ~TcpNewReno (void);
 
-  // From TcpSocketBase
-  virtual int Connect (const Address &address);
-  virtual int Listen (void);
-
 protected:
-  virtual uint32_t Window (void); // Return the max possible number of unacked bytes
   virtual Ptr<TcpSocketBase> Fork (void); // Call CopyObject<TcpNewReno> to clone me
   virtual void NewAck (SequenceNumber32 const& seq); // Inc cwnd and call NewAck() of parent
   virtual void DupAck (const TcpHeader& t, uint32_t count);  // Halving cwnd and reset nextTxSequence
   virtual void Retransmit (void); // Exit fast recovery upon retransmit timeout
 
-  // Implementing ns3::TcpSocket -- Attribute get/set
-  virtual void     SetSegSize (uint32_t size);
-  virtual void     SetInitialSSThresh (uint32_t threshold);
-  virtual uint32_t GetInitialSSThresh (void) const;
-  virtual void     SetInitialCwnd (uint32_t cwnd);
-  virtual uint32_t GetInitialCwnd (void) const;
-  virtual void ScaleSsThresh (uint8_t scaleFactor);
-
-private:
-  /**
-   * \brief Set the congestion window when connection starts
-   */
-  void InitializeCwnd (void);
-
 protected:
-  TracedValue<uint32_t>  m_cWnd;         //!< Congestion window
-  TracedValue<uint32_t>  m_ssThresh;     //!< Slow Start Threshold
-  uint32_t               m_initialCWnd;  //!< Initial cWnd value
-  uint32_t               m_initialSsThresh;  //!< Initial Slow Start Threshold value
   SequenceNumber32       m_recover;      //!< Previous highest Tx seqnum for fast recovery
   uint32_t               m_retxThresh;   //!< Fast Retransmit threshold
   bool                   m_inFastRec;    //!< currently in fast recovery
diff -Naur ns-3.23/src/internet/model/tcp-reno.cc ns-3.24/src/internet/model/tcp-reno.cc
--- ns-3.23/src/internet/model/tcp-reno.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/tcp-reno.cc	2015-09-15 11:18:44.000000000 -0700
@@ -45,14 +45,6 @@
                     UintegerValue (3),
                     MakeUintegerAccessor (&TcpReno::m_retxThresh),
                     MakeUintegerChecker<uint32_t> ())
-    .AddTraceSource ("CongestionWindow",
-                     "The TCP connection's congestion window",
-                     MakeTraceSourceAccessor (&TcpReno::m_cWnd),
-                     "ns3::TracedValue::Uint32Callback")
-    .AddTraceSource ("SlowStartThreshold",
-                     "TCP slow start threshold (bytes)",
-                     MakeTraceSourceAccessor (&TcpReno::m_ssThresh),
-                     "ns3::TracedValue::Uint32Callback")
   ;
   return tid;
 }
@@ -64,10 +56,6 @@
 
 TcpReno::TcpReno (const TcpReno& sock)
   : TcpSocketBase (sock),
-    m_cWnd (sock.m_cWnd),
-    m_ssThresh (sock.m_ssThresh),
-    m_initialCWnd (sock.m_initialCWnd),
-    m_initialSsThresh (sock.m_initialSsThresh),
     m_retxThresh (sock.m_retxThresh),
     m_inFastRec (false)
 {
@@ -79,32 +67,6 @@
 {
 }
 
-/* We initialize m_cWnd from this function, after attributes initialized */
-int
-TcpReno::Listen (void)
-{
-  NS_LOG_FUNCTION (this);
-  InitializeCwnd ();
-  return TcpSocketBase::Listen ();
-}
-
-/* We initialize m_cWnd from this function, after attributes initialized */
-int
-TcpReno::Connect (const Address & address)
-{
-  NS_LOG_FUNCTION (this << address);
-  InitializeCwnd ();
-  return TcpSocketBase::Connect (address);
-}
-
-/* Limit the size of in-flight data by cwnd and receiver's rxwin */
-uint32_t
-TcpReno::Window (void)
-{
-  NS_LOG_FUNCTION (this);
-  return std::min (m_rWnd.Get (), m_cWnd.Get ());
-}
-
 Ptr<TcpSocketBase>
 TcpReno::Fork (void)
 {
@@ -195,56 +157,4 @@
   DoRetransmit ();                          // Retransmit the packet
 }
 
-void
-TcpReno::SetSegSize (uint32_t size)
-{
-  NS_ABORT_MSG_UNLESS (m_state == CLOSED, "TcpReno::SetSegSize() cannot change segment size after connection started.");
-  m_segmentSize = size;
-}
-
-void
-TcpReno::SetInitialSSThresh (uint32_t threshold)
-{
-  NS_ABORT_MSG_UNLESS (m_state == CLOSED, "TcpReno::SetSSThresh() cannot change initial ssThresh after connection started.");
-  m_initialSsThresh = threshold;
-}
-
-uint32_t
-TcpReno::GetInitialSSThresh (void) const
-{
-  return m_initialSsThresh;
-}
-
-void
-TcpReno::SetInitialCwnd (uint32_t cwnd)
-{
-  NS_ABORT_MSG_UNLESS (m_state == CLOSED, "TcpReno::SetInitialCwnd() cannot change initial cwnd after connection started.");
-  m_initialCWnd = cwnd;
-}
-
-uint32_t
-TcpReno::GetInitialCwnd (void) const
-{
-  return m_initialCWnd;
-}
-
-void 
-TcpReno::InitializeCwnd (void)
-{
-  /*
-   * Initialize congestion window, default to 1 MSS (RFC2001, sec.1) and must
-   * not be larger than 2 MSS (RFC2581, sec.3.1). Both m_initiaCWnd and
-   * m_segmentSize are set by the attribute system in ns3::TcpSocket.
-   */
-  m_cWnd = m_initialCWnd * m_segmentSize;
-  m_ssThresh = m_initialSsThresh;
-}
-
-void
-TcpReno::ScaleSsThresh (uint8_t scaleFactor)
-{
-  m_ssThresh <<= scaleFactor;
-}
-
-
 } // namespace ns3
diff -Naur ns-3.23/src/internet/model/tcp-reno.h ns-3.24/src/internet/model/tcp-reno.h
--- ns-3.23/src/internet/model/tcp-reno.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/tcp-reno.h	2015-09-15 11:18:44.000000000 -0700
@@ -54,36 +54,13 @@
   TcpReno (const TcpReno& sock);
   virtual ~TcpReno (void);
 
-  // From TcpSocketBase
-  virtual int Connect (const Address &address);
-  virtual int Listen (void);
-
 protected:
-  virtual uint32_t Window (void); // Return the max possible number of unacked bytes
   virtual Ptr<TcpSocketBase> Fork (void); // Call CopyObject<TcpReno> to clone me
   virtual void NewAck (const SequenceNumber32& seq); // Inc cwnd and call NewAck() of parent
   virtual void DupAck (const TcpHeader& t, uint32_t count);  // Fast retransmit
   virtual void Retransmit (void); // Retransmit timeout
 
-  // Implementing ns3::TcpSocket -- Attribute get/set
-  virtual void     SetSegSize (uint32_t size);
-  virtual void     SetInitialSSThresh (uint32_t threshold);
-  virtual uint32_t GetInitialSSThresh (void) const;
-  virtual void     SetInitialCwnd (uint32_t cwnd);
-  virtual uint32_t GetInitialCwnd (void) const;
-  virtual void ScaleSsThresh (uint8_t scaleFactor);
-
-private:
-  /**
-   * \brief Set the congestion window when connection starts
-   */
-  void InitializeCwnd (void);
-
 protected:
-  TracedValue<uint32_t>  m_cWnd;         //!< Congestion window
-  TracedValue<uint32_t>  m_ssThresh;     //!< Slow Start Threshold
-  uint32_t               m_initialCWnd;  //!< Initial cWnd value
-  uint32_t               m_initialSsThresh;  //!< Initial Slow Start Threshold value
   uint32_t               m_retxThresh;   //!< Fast Retransmit threshold
   bool                   m_inFastRec;    //!< currently in fast recovery
 };
diff -Naur ns-3.23/src/internet/model/tcp-socket-base.cc ns-3.24/src/internet/model/tcp-socket-base.cc
--- ns-3.23/src/internet/model/tcp-socket-base.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/tcp-socket-base.cc	2015-09-15 11:18:44.000000000 -0700
@@ -141,7 +141,7 @@
     .AddTraceSource ("RWND",
                      "Remote side's flow control window",
                      MakeTraceSourceAccessor (&TcpSocketBase::m_rWnd),
-                     "ns3::TracedValue::Uint32Callback")
+                     "ns3::TracedValueCallback::Uint32")
     .AddTraceSource ("HighestRxSequence",
                      "Highest sequence number received from peer",
                      MakeTraceSourceAccessor (&TcpSocketBase::m_highRxMark),
@@ -150,6 +150,14 @@
                      "Highest ack received from peer",
                      MakeTraceSourceAccessor (&TcpSocketBase::m_highRxAckMark),
                      "ns3::SequenceNumber32TracedValueCallback")
+    .AddTraceSource ("CongestionWindow",
+                     "The TCP connection's congestion window",
+                     MakeTraceSourceAccessor (&TcpSocketBase::m_cWnd),
+                     "ns3::TracedValueCallback::Uint32")
+    .AddTraceSource ("SlowStartThreshold",
+                     "TCP slow start threshold (bytes)",
+                     MakeTraceSourceAccessor (&TcpSocketBase::m_ssThresh),
+                     "ns3::TracedValueCallback::Uint32")
   ;
   return tid;
 }
@@ -221,6 +229,10 @@
     m_rWnd (sock.m_rWnd),
     m_highRxMark (sock.m_highRxMark),
     m_highRxAckMark (sock.m_highRxAckMark),
+    m_cWnd (sock.m_cWnd),
+    m_ssThresh (sock.m_ssThresh),
+    m_initialCWnd (sock.m_initialCWnd),
+    m_initialSsThresh (sock.m_initialSsThresh),
     m_winScalingEnabled (sock.m_winScalingEnabled),
     m_sndScaleFactor (sock.m_sndScaleFactor),
     m_rcvScaleFactor (sock.m_rcvScaleFactor),
@@ -331,10 +343,8 @@
       return -1;
     }
 
-  if (std::find(m_tcp->m_sockets.begin(), m_tcp->m_sockets.end(), this) == m_tcp->m_sockets.end())
-    {
-      m_tcp->m_sockets.push_back (this);
-    }
+  m_tcp->AddSocket(this);
+
   return SetupCallback ();
 }
 
@@ -349,10 +359,8 @@
       return -1;
     }
 
-  if (std::find(m_tcp->m_sockets.begin(), m_tcp->m_sockets.end(), this) == m_tcp->m_sockets.end())
-    {
-      m_tcp->m_sockets.push_back (this);
-    }
+  m_tcp->AddSocket(this);
+
   return SetupCallback ();
 }
 
@@ -421,21 +429,64 @@
       return -1;
     }
 
-  if (std::find(m_tcp->m_sockets.begin(), m_tcp->m_sockets.end(), this) == m_tcp->m_sockets.end())
-    {
-      m_tcp->m_sockets.push_back (this);
-    }
+  m_tcp->AddSocket(this);
+
   NS_LOG_LOGIC ("TcpSocketBase " << this << " got an endpoint: " << m_endPoint);
 
   return SetupCallback ();
 }
 
+void
+TcpSocketBase::InitializeCwnd (void)
+{
+  m_cWnd = m_initialCWnd * m_segmentSize;
+  m_ssThresh = m_initialSsThresh;
+}
+
+void
+TcpSocketBase::SetInitialSSThresh (uint32_t threshold)
+{
+  NS_ABORT_MSG_UNLESS (m_state == CLOSED,
+    "TcpSocketBase::SetSSThresh() cannot change initial ssThresh after connection started.");
+
+  m_initialSsThresh = threshold;
+}
+
+uint32_t
+TcpSocketBase::GetInitialSSThresh (void) const
+{
+  return m_initialSsThresh;
+}
+
+void
+TcpSocketBase::SetInitialCwnd (uint32_t cwnd)
+{
+  NS_ABORT_MSG_UNLESS (m_state == CLOSED,
+    "TcpSocketBase::SetInitialCwnd() cannot change initial cwnd after connection started.");
+
+  m_initialCWnd = cwnd;
+}
+
+uint32_t
+TcpSocketBase::GetInitialCwnd (void) const
+{
+  return m_initialCWnd;
+}
+
+void
+TcpSocketBase::ScaleSsThresh (uint8_t scaleFactor)
+{
+  m_ssThresh <<= scaleFactor;
+}
+
 /* Inherit from Socket class: Initiate connection to a remote address:port */
 int
 TcpSocketBase::Connect (const Address & address)
 {
   NS_LOG_FUNCTION (this << address);
 
+  InitializeCwnd ();
+
   // If haven't do so, Bind() this socket first
   if (InetSocketAddress::IsMatchingType (address) && m_endPoint6 == 0)
     {
@@ -507,6 +558,9 @@
 TcpSocketBase::Listen (void)
 {
   NS_LOG_FUNCTION (this);
+
+  InitializeCwnd ();
+
   // Linux quits EINVAL if we're not in CLOSED state, so match what they do
   if (m_state != CLOSED)
     {
@@ -891,13 +945,34 @@
 TcpSocketBase::ForwardUp (Ptr<Packet> packet, Ipv4Header header, uint16_t port,
                           Ptr<Ipv4Interface> incomingInterface)
 {
-  DoForwardUp (packet, header, port, incomingInterface);
+  NS_LOG_LOGIC ("Socket " << this << " forward up " <<
+                m_endPoint->GetPeerAddress () <<
+                ":" << m_endPoint->GetPeerPort () <<
+                " to " << m_endPoint->GetLocalAddress () <<
+                ":" << m_endPoint->GetLocalPort ());
+
+  Address fromAddress = InetSocketAddress (header.GetSource (), port);
+  Address toAddress = InetSocketAddress (header.GetDestination (),
+                                         m_endPoint->GetLocalPort ());
+
+  DoForwardUp (packet, fromAddress, toAddress);
 }
 
 void
-TcpSocketBase::ForwardUp6 (Ptr<Packet> packet, Ipv6Header header, uint16_t port, Ptr<Ipv6Interface> incomingInterface)
+TcpSocketBase::ForwardUp6 (Ptr<Packet> packet, Ipv6Header header, uint16_t port,
+                           Ptr<Ipv6Interface> incomingInterface)
 {
-  DoForwardUp (packet, header, port);
+  NS_LOG_LOGIC ("Socket " << this << " forward up " <<
+                m_endPoint6->GetPeerAddress () <<
+                ":" << m_endPoint6->GetPeerPort () <<
+                " to " << m_endPoint6->GetLocalAddress () <<
+                ":" << m_endPoint6->GetLocalPort ());
+
+  Address fromAddress = Inet6SocketAddress (header.GetSourceAddress (), port);
+  Address toAddress = Inet6SocketAddress (header.GetDestinationAddress (),
+                                          m_endPoint6->GetLocalPort ());
+
+  DoForwardUp (packet, fromAddress, toAddress);
 }
 
 void
@@ -926,21 +1001,10 @@
     }
 }
 
-/* The real function to handle the incoming packet from lower layers. This is
-    wrapped by ForwardUp() so that this function can be overloaded by daughter
-    classes. */
 void
-TcpSocketBase::DoForwardUp (Ptr<Packet> packet, Ipv4Header header, uint16_t port,
-                            Ptr<Ipv4Interface> incomingInterface)
+TcpSocketBase::DoForwardUp (Ptr<Packet> packet, const Address &fromAddress,
+                            const Address &toAddress)
 {
-  NS_LOG_LOGIC ("Socket " << this << " forward up " <<
-                m_endPoint->GetPeerAddress () <<
-                ":" << m_endPoint->GetPeerPort () <<
-                " to " << m_endPoint->GetLocalAddress () <<
-                ":" << m_endPoint->GetLocalPort ());
-  Address fromAddress = InetSocketAddress (header.GetSource (), port);
-  Address toAddress = InetSocketAddress (header.GetDestination (), m_endPoint->GetLocalPort ());
-
   // Peel off TCP header and do validity checking
   TcpHeader tcpHeader;
   uint32_t bytesRemoved = packet->RemoveHeader (tcpHeader);
@@ -984,112 +1048,13 @@
     {
       UpdateWindowSize (tcpHeader);
     }
-
-  // TCP state machine code in different process functions
-  // C.f.: tcp_rcv_state_process() in tcp_input.c in Linux kernel
-  switch (m_state)
+  else if (tcpHeader.GetFlags () & TcpHeader::SYN)
     {
-    case ESTABLISHED:
-      ProcessEstablished (packet, tcpHeader);
-      break;
-    case LISTEN:
-      ProcessListen (packet, tcpHeader, fromAddress, toAddress);
-      break;
-    case TIME_WAIT:
-      // Do nothing
-      break;
-    case CLOSED:
-      // Send RST if the incoming packet is not a RST
-      if ((tcpHeader.GetFlags () & ~(TcpHeader::PSH | TcpHeader::URG)) != TcpHeader::RST)
-        { // Since m_endPoint is not configured yet, we cannot use SendRST here
-          TcpHeader h;
-          h.SetFlags (TcpHeader::RST);
-          h.SetSequenceNumber (m_nextTxSequence);
-          h.SetAckNumber (m_rxBuffer->NextRxSequence ());
-          h.SetSourcePort (tcpHeader.GetDestinationPort ());
-          h.SetDestinationPort (tcpHeader.GetSourcePort ());
-          h.SetWindowSize (AdvertisedWindowSize ());
-          AddOptions (h);
-          m_tcp->SendPacket (Create<Packet> (), h, header.GetDestination (), header.GetSource (), m_boundnetdevice);
-        }
-      break;
-    case SYN_SENT:
-      ProcessSynSent (packet, tcpHeader);
-      break;
-    case SYN_RCVD:
-      ProcessSynRcvd (packet, tcpHeader, fromAddress, toAddress);
-      break;
-    case FIN_WAIT_1:
-    case FIN_WAIT_2:
-    case CLOSE_WAIT:
-      ProcessWait (packet, tcpHeader);
-      break;
-    case CLOSING:
-      ProcessClosing (packet, tcpHeader);
-      break;
-    case LAST_ACK:
-      ProcessLastAck (packet, tcpHeader);
-      break;
-    default: // mute compiler
-      break;
-    }
-}
-
-// XXX this is duplicate code with the other DoForwardUp()
-void
-TcpSocketBase::DoForwardUp (Ptr<Packet> packet, Ipv6Header header, uint16_t port)
-{
-  NS_LOG_LOGIC ("Socket " << this << " forward up " <<
-                m_endPoint6->GetPeerAddress () <<
-                ":" << m_endPoint6->GetPeerPort () <<
-                " to " << m_endPoint6->GetLocalAddress () <<
-                ":" << m_endPoint6->GetLocalPort ());
-  Address fromAddress = Inet6SocketAddress (header.GetSourceAddress (), port);
-  Address toAddress = Inet6SocketAddress (header.GetDestinationAddress (), m_endPoint6->GetLocalPort ());
-
-  // Peel off TCP header and do validity checking
-  TcpHeader tcpHeader;
-  uint32_t bytesRemoved = packet->RemoveHeader (tcpHeader);
-  if (bytesRemoved == 0 || bytesRemoved > 60)
-    {
-      NS_LOG_ERROR ("Bytes removed: " << bytesRemoved << " invalid");
-      return; // Discard invalid packet
-    }
-
-  ReadOptions (tcpHeader);
-
-  if (tcpHeader.GetFlags () & TcpHeader::ACK)
-    {
-      EstimateRtt (tcpHeader);
-    }
-
-  // Discard fully out of range packets
-  if (packet->GetSize ()
-      && OutOfRange (tcpHeader.GetSequenceNumber (), tcpHeader.GetSequenceNumber () + packet->GetSize ()))
-    {
-      NS_LOG_LOGIC ("At state " << TcpStateName[m_state] <<
-                    " received packet of seq [" << tcpHeader.GetSequenceNumber () <<
-                    ":" << tcpHeader.GetSequenceNumber () + packet->GetSize () <<
-                    ") out of range [" << m_rxBuffer->NextRxSequence () << ":" <<
-                    m_rxBuffer->MaxRxSequence () << ")");
-      // Acknowledgement should be sent for all unacceptable packets (RFC793, p.69)
-      if (m_state == ESTABLISHED && !(tcpHeader.GetFlags () & TcpHeader::RST))
-        {
-          SendEmptyPacket (TcpHeader::ACK);
-        }
-      return;
-    }
-
-  // Update Rx window size, i.e. the flow control window
-  if (m_rWnd.Get () == 0 && tcpHeader.GetWindowSize () != 0 && m_persistEvent.IsRunning ())
-    { // persist probes end
-      NS_LOG_LOGIC (this << " Leaving zerowindow persist state");
-      m_persistEvent.Cancel ();
-    }
-
-  if (tcpHeader.GetFlags () & TcpHeader::ACK)
-    {
-      UpdateWindowSize (tcpHeader);
+      /* The window field in a segment where the SYN bit is set (i.e., a <SYN>
+       * or <SYN,ACK>) MUST NOT be scaled (from RFC 7323 page 9). But should be
+       * saved anyway..
+       */
+      m_rWnd = tcpHeader.GetWindowSize ();
     }
 
   // TCP state machine code in different process functions
@@ -1117,7 +1082,7 @@
           h.SetDestinationPort (tcpHeader.GetSourcePort ());
           h.SetWindowSize (AdvertisedWindowSize ());
           AddOptions (h);
-          m_tcp->SendPacket (Create<Packet> (), h, header.GetDestinationAddress (), header.GetSourceAddress (), m_boundnetdevice);
+          m_tcp->SendPacket (Create<Packet> (), h, toAddress, fromAddress, m_boundnetdevice);
         }
       break;
     case SYN_SENT:
@@ -1181,7 +1146,7 @@
     { // Received RST or the TCP flags is invalid, in either case, terminate this socket
       if (tcpflags != TcpHeader::RST)
         { // this must be an invalid flag, send reset
-          NS_LOG_LOGIC ("Illegal flag " << tcpflags << " received. Reset packet is sent.");
+          NS_LOG_LOGIC ("Illegal flag " << TcpHeader::FlagsToString (tcpflags) << " received. Reset packet is sent.");
           SendRST ();
         }
       CloseAndNotify ();
@@ -1306,7 +1271,8 @@
     { // Other in-sequence input
       if (tcpflags != TcpHeader::RST)
         { // When (1) rx of FIN+ACK; (2) rx of FIN; (3) rx of bad flags
-          NS_LOG_LOGIC ("Illegal flag " << std::hex << static_cast<uint32_t> (tcpflags) << std::dec << " received. Reset packet is sent.");
+          NS_LOG_LOGIC ("Illegal flag " << TcpHeader::FlagsToString (tcpflags) <<
+                        " received. Reset packet is sent.");
           SendRST ();
         }
       CloseAndNotify ();
@@ -1386,7 +1352,8 @@
     { // Other in-sequence input
       if (tcpflags != TcpHeader::RST)
         { // When (1) rx of SYN+ACK; (2) rx of FIN; (3) rx of bad flags
-          NS_LOG_LOGIC ("Illegal flag " << tcpflags << " received. Reset packet is sent.");
+          NS_LOG_LOGIC ("Illegal flag " << TcpHeader::FlagsToString (tcpflags) <<
+                        " received. Reset packet is sent.");
           if (m_endPoint)
             {
               m_endPoint->SetPeer (InetSocketAddress::ConvertFrom (fromAddress).GetIpv4 (),
@@ -1442,7 +1409,8 @@
     { // This is a RST or bad flags
       if (tcpflags != TcpHeader::RST)
         {
-          NS_LOG_LOGIC ("Illegal flag " << tcpflags << " received. Reset packet is sent.");
+          NS_LOG_LOGIC ("Illegal flag " << TcpHeader::FlagsToString (tcpflags) <<
+                        " received. Reset packet is sent.");
           SendRST ();
         }
       CloseAndNotify ();
@@ -1499,7 +1467,7 @@
         }
       else if (tcpflags != TcpHeader::RST)
         { // Receive of SYN or SYN+ACK or bad flags or pure data
-          NS_LOG_LOGIC ("Illegal flag " << tcpflags << " received. Reset packet is sent.");
+          NS_LOG_LOGIC ("Illegal flag " << TcpHeader::FlagsToString (tcpflags) << " received. Reset packet is sent.");
           SendRST ();
         }
       CloseAndNotify ();
@@ -1536,7 +1504,7 @@
     }
   else
     { // Received a SYN or SYN+ACK or bad flags
-      NS_LOG_LOGIC ("Illegal flag " << tcpflags << " received. Reset packet is sent.");
+      NS_LOG_LOGIC ("Illegal flag " << TcpHeader::FlagsToString (tcpflags) << " received. Reset packet is sent.");
       SendRST ();
       CloseAndNotify ();
     }
@@ -1626,12 +1594,7 @@
   m_endPoint = 0;
   if (m_tcp != 0)
     {
-      std::vector<Ptr<TcpSocketBase> >::iterator it
-        = std::find (m_tcp->m_sockets.begin (), m_tcp->m_sockets.end (), this);
-      if (it != m_tcp->m_sockets.end ())
-        {
-          m_tcp->m_sockets.erase (it);
-        }
+      m_tcp->RemoveSocket(this);
     }
   NS_LOG_LOGIC (this << " Cancelled ReTxTimeout event which was set to expire at " <<
                 (Simulator::Now () + Simulator::GetDelayLeft (m_retxEvent)).GetSeconds ());
@@ -1647,12 +1610,7 @@
   m_endPoint6 = 0;
   if (m_tcp != 0)
     {
-      std::vector<Ptr<TcpSocketBase> >::iterator it
-        = std::find (m_tcp->m_sockets.begin (), m_tcp->m_sockets.end (), this);
-      if (it != m_tcp->m_sockets.end ())
-        {
-          m_tcp->m_sockets.erase (it);
-        }
+      m_tcp->RemoveSocket(this);
     }
   NS_LOG_LOGIC (this << " Cancelled ReTxTimeout event which was set to expire at " <<
                 (Simulator::Now () + Simulator::GetDelayLeft (m_retxEvent)).GetSeconds ());
@@ -1798,12 +1756,7 @@
       m_endPoint->SetDestroyCallback (MakeNullCallback<void> ());
       m_tcp->DeAllocate (m_endPoint);
       m_endPoint = 0;
-      std::vector<Ptr<TcpSocketBase> >::iterator it
-        = std::find (m_tcp->m_sockets.begin (), m_tcp->m_sockets.end (), this);
-      if (it != m_tcp->m_sockets.end ())
-        {
-          m_tcp->m_sockets.erase (it);
-        }
+      m_tcp->RemoveSocket(this);
     }
   else if (m_endPoint6 != 0)
     {
@@ -1811,12 +1764,7 @@
       m_endPoint6->SetDestroyCallback (MakeNullCallback<void> ());
       m_tcp->DeAllocate (m_endPoint6);
       m_endPoint6 = 0;
-      std::vector<Ptr<TcpSocketBase> >::iterator it
-        = std::find (m_tcp->m_sockets.begin (), m_tcp->m_sockets.end (), this);
-      if (it != m_tcp->m_sockets.end ())
-        {
-          m_tcp->m_sockets.erase (it);
-        }
+      m_tcp->RemoveSocket(this);
     }
 }
 
@@ -1905,7 +1853,7 @@
                                       Inet6SocketAddress::ConvertFrom (fromAddress).GetPort ());
       m_endPoint = 0;
     }
-  m_tcp->m_sockets.push_back (this);
+  m_tcp->AddSocket(this);
 
   // Change the cloned socket from LISTEN state to SYN_RCVD
   NS_LOG_INFO ("LISTEN -> SYN_RCVD");
@@ -2034,7 +1982,8 @@
                     (Simulator::Now () + m_rto.Get ()).GetSeconds () );
       m_retxEvent = Simulator::Schedule (m_rto, &TcpSocketBase::ReTxTimeout, this);
     }
-  NS_LOG_LOGIC ("Send packet via TcpL4Protocol with flags 0x" << std::hex << static_cast<uint32_t> (flags) << std::dec);
+  NS_LOG_LOGIC ("Send packet via TcpL4Protocol with flags" <<
+                TcpHeader::FlagsToString (flags));
   if (m_endPoint)
     {
       m_tcp->SendPacket (p, header, m_endPoint->GetLocalAddress (),
@@ -2140,6 +2089,13 @@
 }
 
 uint32_t
+TcpSocketBase::Window (void)
+{
+  NS_LOG_FUNCTION (this);
+  return std::min (m_rWnd.Get (), m_cWnd.Get ());
+}
+
+uint32_t
 TcpSocketBase::AvailableWindow ()
 {
   NS_LOG_FUNCTION_NOARGS ();
@@ -2627,9 +2583,10 @@
         }
     }
 
+  bool timestampAttribute = m_timestampEnabled;
   m_timestampEnabled = false;
 
-  if (header.HasOption (TcpOption::TS))
+  if (header.HasOption (TcpOption::TS) && timestampAttribute)
     {
       m_timestampEnabled = true;
       ProcessOptionTimestamp (header.GetOption (TcpOption::TS));
diff -Naur ns-3.23/src/internet/model/tcp-socket-base.h ns-3.24/src/internet/model/tcp-socket-base.h
--- ns-3.23/src/internet/model/tcp-socket-base.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/tcp-socket-base.h	2015-09-15 11:18:44.000000000 -0700
@@ -198,10 +198,10 @@
   virtual uint32_t GetRcvBufSize (void) const;
   virtual void     SetSegSize (uint32_t size);
   virtual uint32_t GetSegSize (void) const;
-  virtual void     SetInitialSSThresh (uint32_t threshold) = 0;
-  virtual uint32_t GetInitialSSThresh (void) const = 0;
-  virtual void     SetInitialCwnd (uint32_t cwnd) = 0;
-  virtual uint32_t GetInitialCwnd (void) const = 0;
+  virtual void     SetInitialSSThresh (uint32_t threshold);
+  virtual uint32_t GetInitialSSThresh (void) const;
+  virtual void     SetInitialCwnd (uint32_t cwnd);
+  virtual uint32_t GetInitialCwnd (void) const;
   virtual void     SetConnTimeout (Time timeout);
   virtual Time     GetConnTimeout (void) const;
   virtual void     SetConnCount (uint32_t count);
@@ -293,23 +293,19 @@
   void ForwardUp6 (Ptr<Packet> packet, Ipv6Header header, uint16_t port, Ptr<Ipv6Interface> incomingInterface);
 
   /**
-   * \brief Called by TcpSocketBase::ForwardUp().
+   * \brief Called by TcpSocketBase::ForwardUp{,6}().
    *
-   * \param packet the incoming packet
-   * \param header the packet's IPv4 header
-   * \param port the remote port
-   * \param incomingInterface the incoming interface
-   */
-  virtual void DoForwardUp (Ptr<Packet> packet, Ipv4Header header, uint16_t port, Ptr<Ipv4Interface> incomingInterface); //Get a pkt from L3
-
-  /**
-   * \brief Called by TcpSocketBase::ForwardUp6().
+   * Get a packet from L3. This is the real function to handle the
+   * incoming packet from lower layers. This is
+   * wrapped by ForwardUp() so that this function can be overloaded by daughter
+   * classes.
    *
    * \param packet the incoming packet
-   * \param header the packet's IPv6 header
-   * \param port the remote port
+   * \param fromAddress the address of the sender of packet
+   * \param toAddress the address of the receiver of packet (hopefully, us)
    */
-  virtual void DoForwardUp (Ptr<Packet> packet, Ipv6Header header, uint16_t port);
+  virtual void DoForwardUp (Ptr<Packet> packet, const Address &fromAddress,
+                            const Address &toAddress);
 
   /**
    * \brief Called by the L3 protocol when it received an ICMP packet to pass on to TCP.
@@ -518,7 +514,7 @@
    * \brief Return the max possible number of unacked bytes
    * \returns the max possible number of unacked bytes
    */
-  virtual uint32_t Window (void) = 0;
+  virtual uint32_t Window (void);
 
   /**
    * \brief Return unfilled portion of window
@@ -697,7 +693,16 @@
    *
    * \param scaleFactor the sender scale factor
    */
-  virtual void ScaleSsThresh (uint8_t scaleFactor) = 0;
+  virtual void ScaleSsThresh (uint8_t scaleFactor);
+
+  /**
+   * \brief Initialize congestion window
+   *
+   * Default cWnd to 1 MSS (RFC2001, sec.1) and must
+   * not be larger than 2 MSS (RFC2581, sec.3.1). Both m_initiaCWnd and
+   * m_segmentSize are set by the attribute system in ns3::TcpSocket.
+   */
+  virtual void InitializeCwnd ();
 
 protected:
   // Counters and events
@@ -754,6 +759,12 @@
   TracedValue<SequenceNumber32> m_highRxMark;     //!< Highest seqno received
   TracedValue<SequenceNumber32> m_highRxAckMark;  //!< Highest ack received
 
+  // Congestion control
+  TracedValue<uint32_t> m_cWnd;     //!< Congestion window
+  TracedValue<uint32_t> m_ssThresh; //!< Slow start threshold
+  uint32_t               m_initialCWnd;      //!< Initial cWnd value
+  uint32_t               m_initialSsThresh;  //!< Initial Slow Start Threshold value
+
   // Options
   bool    m_winScalingEnabled;    //!< Window Scale option enabled
   uint8_t m_sndScaleFactor;       //!< Sent Window Scale (i.e., the one of the node)
diff -Naur ns-3.23/src/internet/model/tcp-socket.cc ns-3.24/src/internet/model/tcp-socket.cc
--- ns-3.23/src/internet/model/tcp-socket.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/tcp-socket.cc	2015-09-15 11:18:44.000000000 -0700
@@ -33,7 +33,11 @@
 
 NS_OBJECT_ENSURE_REGISTERED (TcpSocket);
 
-const char* const TcpSocket::TcpStateName[LAST_STATE] = { "CLOSED", "LISTEN", "SYN_SENT", "SYN_RCVD", "ESTABLISHED", "CLOSE_WAIT", "LAST_ACK", "FIN_WAIT_1", "FIN_WAIT_2", "CLOSING", "TIME_WAIT" };
+const char* const
+TcpSocket::TcpStateName[TcpSocket::LAST_STATE] = { "CLOSED", "LISTEN", "SYN_SENT",
+                                        "SYN_RCVD", "ESTABLISHED", "CLOSE_WAIT",
+                                        "LAST_ACK", "FIN_WAIT_1", "FIN_WAIT_2",
+                                        "CLOSING", "TIME_WAIT" };
 
 TypeId
 TcpSocket::GetTypeId (void)
diff -Naur ns-3.23/src/internet/model/tcp-socket.h ns-3.24/src/internet/model/tcp-socket.h
--- ns-3.23/src/internet/model/tcp-socket.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/tcp-socket.h	2015-09-15 11:18:44.000000000 -0700
@@ -36,37 +36,6 @@
 class Packet;
 
 /**
- * \ingroup tcp
- * \brief Names of the 11 TCP states
- *
- * \todo This should be a member of TcpSocket.
- */
-typedef enum {
-  CLOSED,       // 0
-  LISTEN,       // 1
-  SYN_SENT,     // 2
-  SYN_RCVD,     // 3
-  ESTABLISHED,  // 4
-  CLOSE_WAIT,   // 5
-  LAST_ACK,     // 6
-  FIN_WAIT_1,   // 7
-  FIN_WAIT_2,   // 8
-  CLOSING,      // 9
-  TIME_WAIT,   // 10
-  LAST_STATE
-} TcpStates_t;
-
-/**
- * \ingroup tcp
- * TracedValue Callback signature for TcpStates_t
- *
- * \param [in] oldValue original value of the traced variable
- * \param [in] newValue new value of the traced variable
- */
-typedef void (* TcpStatesTracedValueCallback)(const TcpStates_t oldValue,
-                                              const TcpStates_t newValue);
-
-/**
  * \ingroup socket
  *
  * \brief (abstract) base class of all TcpSockets
@@ -88,9 +57,40 @@
   virtual ~TcpSocket (void);
 
   /**
+   * \ingroup tcp
+   * \brief Names of the 11 TCP states
+   *
+   */
+  typedef enum {
+    CLOSED = 0,   /**< Socket is finished                                     */
+    LISTEN,       /**< Listening for a connection                             */
+    SYN_SENT,     /**< Sent a connection request, waiting for ack             */
+    SYN_RCVD,     /**< Received a connection request, sent ack,
+                    *  waiting for final ack in three-way handshake.          */
+    ESTABLISHED,  /**< Connection established                                 */
+    CLOSE_WAIT,   /**< Remote side has shutdown and is waiting for
+                    *  us to finish writing our data and to shutdown
+                    *  (we have to close() to move on to LAST_ACK)            */
+    LAST_ACK,     /**< Our side has shutdown after remote has
+                    *  shutdown.  There may still be data in our
+                    *  buffer that we have to finish sending                  */
+    FIN_WAIT_1,   /**< Our side has shutdown, waiting to complete
+                    *  transmission of remaining buffered data                */
+    FIN_WAIT_2,   /**< All buffered data sent, waiting for remote to shutdown */
+    CLOSING,      /**< Both sides have shutdown but we still have
+                    *  data we have to finish sending                         */
+    TIME_WAIT,    /**< Timeout to catch resent junk before entering
+                    *  closed, can only be entered from FIN_WAIT2
+                    *  or CLOSING.  Required because the other end
+                    *  may not have gotten our last ACK causing it
+                    *  to retransmit the data packet (which we ignore)        */
+    LAST_STATE    /**< Last state, used only in debug messages                */
+  } TcpStates_t;
+
+  /**
    * \brief Literal names of TCP states for use in log messages
    */
-  static const char* const TcpStateName[LAST_STATE];
+  static const char* const TcpStateName[TcpSocket::LAST_STATE];
 
 private:
   // Indirect the attribute setting and getting through private virtual methods
@@ -239,6 +239,16 @@
 
 };
 
+/**
+ * \ingroup tcp
+ * TracedValue Callback signature for TcpStates_t
+ *
+ * \param [in] oldValue original value of the traced variable
+ * \param [in] newValue new value of the traced variable
+ */
+typedef void (* TcpStatesTracedValueCallback)(const TcpSocket::TcpStates_t oldValue,
+                                              const TcpSocket::TcpStates_t newValue);
+
 } // namespace ns3
 
 #endif /* TCP_SOCKET_H */
diff -Naur ns-3.23/src/internet/model/tcp-tahoe.cc ns-3.24/src/internet/model/tcp-tahoe.cc
--- ns-3.23/src/internet/model/tcp-tahoe.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/tcp-tahoe.cc	2015-09-15 11:18:44.000000000 -0700
@@ -45,29 +45,17 @@
                     UintegerValue (3),
                     MakeUintegerAccessor (&TcpTahoe::m_retxThresh),
                     MakeUintegerChecker<uint32_t> ())
-    .AddTraceSource ("CongestionWindow",
-                     "The TCP connection's congestion window",
-                     MakeTraceSourceAccessor (&TcpTahoe::m_cWnd),
-                     "ns3::TracedValue::Uint32Callback")
-    .AddTraceSource ("SlowStartThreshold",
-                     "TCP slow start threshold (bytes)",
-                     MakeTraceSourceAccessor (&TcpTahoe::m_ssThresh),
-                     "ns3::TracedValue::Uint32Callback")
   ;
   return tid;
 }
 
-TcpTahoe::TcpTahoe (void) : m_initialCWnd (1), m_retxThresh (3)
+TcpTahoe::TcpTahoe (void) : m_retxThresh (3)
 {
   NS_LOG_FUNCTION (this);
 }
 
 TcpTahoe::TcpTahoe (const TcpTahoe& sock)
   : TcpSocketBase (sock),
-    m_cWnd (sock.m_cWnd),
-    m_ssThresh (sock.m_ssThresh),
-    m_initialCWnd (sock.m_initialCWnd),
-    m_initialSsThresh (sock.m_initialSsThresh),
     m_retxThresh (sock.m_retxThresh)
 {
   NS_LOG_FUNCTION (this);
@@ -78,32 +66,6 @@
 {
 }
 
-/* We initialize m_cWnd from this function, after attributes initialized */
-int
-TcpTahoe::Listen (void)
-{
-  NS_LOG_FUNCTION (this);
-  InitializeCwnd ();
-  return TcpSocketBase::Listen ();
-}
-
-/* We initialize m_cWnd from this function, after attributes initialized */
-int
-TcpTahoe::Connect (const Address & address)
-{
-  NS_LOG_FUNCTION (this << address);
-  InitializeCwnd ();
-  return TcpSocketBase::Connect (address);
-}
-
-/* Limit the size of in-flight data by cwnd and receiver's rxwin */
-uint32_t
-TcpTahoe::Window (void)
-{
-  NS_LOG_FUNCTION (this);
-  return std::min (m_rWnd.Get (), m_cWnd.Get ());
-}
-
 Ptr<TcpSocketBase>
 TcpTahoe::Fork (void)
 {
@@ -170,56 +132,4 @@
   DoRetransmit ();                          // Retransmit the packet
 }
 
-void
-TcpTahoe::SetSegSize (uint32_t size)
-{
-  NS_ABORT_MSG_UNLESS (m_state == CLOSED, "TcpTahoe::SetSegSize() cannot change segment size after connection started.");
-  m_segmentSize = size;
-}
-
-void
-TcpTahoe::SetInitialSSThresh (uint32_t threshold)
-{
-  NS_ABORT_MSG_UNLESS (m_state == CLOSED, "TcpTahoe::SetSSThresh() cannot change initial ssThresh after connection started.");
-  m_initialSsThresh = threshold;
-}
-
-uint32_t
-TcpTahoe::GetInitialSSThresh (void) const
-{
-  return m_initialSsThresh;
-}
-
-void
-TcpTahoe::SetInitialCwnd (uint32_t cwnd)
-{
-  NS_ABORT_MSG_UNLESS (m_state == CLOSED, "TcpTahoe::SetInitialCwnd() cannot change initial cwnd after connection started.");
-  m_initialCWnd = cwnd;
-}
-
-uint32_t
-TcpTahoe::GetInitialCwnd (void) const
-{
-  return m_initialCWnd;
-}
-
-void 
-TcpTahoe::InitializeCwnd (void)
-{
-  /*
-   * Initialize congestion window, default to 1 MSS (RFC2001, sec.1) and must
-   * not be larger than 2 MSS (RFC2581, sec.3.1). Both m_initiaCWnd and
-   * m_segmentSize are set by the attribute system in ns3::TcpSocket.
-   */
-  m_cWnd = m_initialCWnd * m_segmentSize;
-  m_ssThresh = m_initialSsThresh;
-}
-
-void
-TcpTahoe::ScaleSsThresh (uint8_t scaleFactor)
-{
-  m_ssThresh <<= scaleFactor;
-}
-
-
 } // namespace ns3
diff -Naur ns-3.23/src/internet/model/tcp-tahoe.h ns-3.24/src/internet/model/tcp-tahoe.h
--- ns-3.23/src/internet/model/tcp-tahoe.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/tcp-tahoe.h	2015-09-15 11:18:44.000000000 -0700
@@ -58,35 +58,13 @@
   TcpTahoe (const TcpTahoe& sock);
   virtual ~TcpTahoe (void);
 
-  // From TcpSocketBase
-  virtual int Connect (const Address &address);
-  virtual int Listen (void);
-
 protected:
-  virtual uint32_t Window (void); // Return the max possible number of unacked bytes
   virtual Ptr<TcpSocketBase> Fork (void); // Call CopyObject<TcpTahoe> to clone me
   virtual void NewAck (SequenceNumber32 const& seq); // Inc cwnd and call NewAck() of parent
   virtual void DupAck (const TcpHeader& t, uint32_t count);  // Treat 3 dupack as timeout
   virtual void Retransmit (void); // Retransmit time out
 
-  // Implementing ns3::TcpSocket -- Attribute get/set
-  virtual void     SetSegSize (uint32_t size);
-  virtual void     SetInitialSSThresh (uint32_t threshold);
-  virtual uint32_t GetInitialSSThresh (void) const;
-  virtual void     SetInitialCwnd (uint32_t cwnd);
-  virtual uint32_t GetInitialCwnd (void) const;
-  virtual void ScaleSsThresh (uint8_t scaleFactor);
-private:
-  /**
-   * \brief Set the congestion window when connection starts
-   */
-  void InitializeCwnd (void);
-
 protected:
-  TracedValue<uint32_t>  m_cWnd;         //!< Congestion window
-  TracedValue<uint32_t>  m_ssThresh;     //!< Slow Start Threshold
-  uint32_t               m_initialCWnd;  //!< Initial cWnd value
-  uint32_t               m_initialSsThresh;  //!< Initial Slow Start Threshold value
   uint32_t               m_retxThresh;   //!< Fast Retransmit threshold
 };
 
diff -Naur ns-3.23/src/internet/model/tcp-westwood.cc ns-3.24/src/internet/model/tcp-westwood.cc
--- ns-3.23/src/internet/model/tcp-westwood.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/tcp-westwood.cc	2015-09-15 11:18:44.000000000 -0700
@@ -55,13 +55,6 @@
       .SetParent<TcpSocketBase>()
       .SetGroupName ("Internet")
       .AddConstructor<TcpWestwood>()
-      .AddTraceSource("CongestionWindow", "The TCP connection's congestion window",
-                      MakeTraceSourceAccessor(&TcpWestwood::m_cWnd),
-                      "ns3::TracedValue::Uint32Callback")
-      .AddTraceSource ("SlowStartThreshold",
-                       "TCP slow start threshold (bytes)",
-                       MakeTraceSourceAccessor (&TcpWestwood::m_ssThresh),
-                       "ns3::TracedValue::Uint32Callback")
       .AddAttribute("FilterType", "Use this to choose no filter or Tustin's approximation filter",
                     EnumValue(TcpWestwood::TUSTIN), MakeEnumAccessor(&TcpWestwood::m_fType),
                     MakeEnumChecker(TcpWestwood::NONE, "None", TcpWestwood::TUSTIN, "Tustin"))
@@ -71,7 +64,7 @@
                     MakeEnumChecker(TcpWestwood::WESTWOOD, "Westwood",TcpWestwood::WESTWOODPLUS, "WestwoodPlus"))
       .AddTraceSource("EstimatedBW", "The estimated bandwidth",
                     MakeTraceSourceAccessor(&TcpWestwood::m_currentBW),
-                      "ns3::TracedValue::DoubleCallback");
+                      "ns3::TracedValueCallback::Double");
   return tid;
 }
 
@@ -92,10 +85,6 @@
 
 TcpWestwood::TcpWestwood (const TcpWestwood& sock) :
   TcpSocketBase(sock),
-  m_cWnd(sock.m_cWnd),
-  m_ssThresh(sock.m_ssThresh),
-  m_initialCWnd(sock.m_initialCWnd),
-  m_initialSsThresh (sock.m_initialSsThresh),
   m_inFastRec(false),
   m_currentBW(sock.m_currentBW),
   m_lastSampleBW(sock.m_lastSampleBW),
@@ -117,29 +106,6 @@
 {
 }
 
-int
-TcpWestwood::Listen (void)
-{
-  NS_LOG_FUNCTION (this);
-  InitializeCwnd();
-  return TcpSocketBase::Listen();
-}
-
-int
-TcpWestwood::Connect (const Address & address)
-{
-  NS_LOG_FUNCTION (this << address);
-  InitializeCwnd();
-  return TcpSocketBase::Connect(address);
-}
-
-uint32_t
-TcpWestwood::Window (void)
-{
-  NS_LOG_FUNCTION (this);
-  return std::min (m_rWnd.Get (), m_cWnd.Get ());
-}
-
 Ptr<TcpSocketBase>
 TcpWestwood::Fork (void)
 {
@@ -380,60 +346,4 @@
     }
 }
 
-void
-TcpWestwood::SetSegSize (uint32_t size)
-{
-  NS_ABORT_MSG_UNLESS(m_state == CLOSED, "TcpWestwood::SetSegSize() cannot change segment size after connection started.");
-  m_segmentSize = size;
-}
-
-void
-TcpWestwood::SetInitialSSThresh (uint32_t threshold)
-{
-  NS_LOG_FUNCTION (this);
-  NS_ABORT_MSG_UNLESS (m_state == CLOSED, "TcpWestwood::SetSSThresh() cannot change initial ssThresh after connection started.");
-  m_initialSsThresh = threshold;
-}
-
-uint32_t
-TcpWestwood::GetInitialSSThresh (void) const
-{
-  NS_LOG_FUNCTION (this);
-  return m_initialSsThresh;
-}
-
-void
-TcpWestwood::SetInitialCwnd (uint32_t cwnd)
-{
-  NS_ABORT_MSG_UNLESS(m_state == CLOSED, "TcpWestwood::SetInitialCwnd() cannot change initial cwnd after connection started.");
-  m_initialCWnd = cwnd;
-}
-
-uint32_t
-TcpWestwood::GetInitialCwnd (void) const
-{
-  NS_LOG_FUNCTION (this);
-  return m_initialCWnd;
-}
-
-void
-TcpWestwood::InitializeCwnd(void)
-{
-  NS_LOG_FUNCTION (this);
-  /*
-   * Initialize congestion window, default to 1 MSS (RFC2001, sec.1) and must
-   * not be larger than 2 MSS (RFC2581, sec.3.1). Both m_initiaCWnd and
-   * m_segmentSize are set by the attribute system in ns3::TcpSocket.
-   */
-  m_cWnd = m_initialCWnd * m_segmentSize;
-  m_ssThresh = m_initialSsThresh;
-}
-
-void
-TcpWestwood::ScaleSsThresh (uint8_t scaleFactor)
-{
-  m_ssThresh <<= scaleFactor;
-}
-
-
 } // namespace ns3
diff -Naur ns-3.23/src/internet/model/tcp-westwood.h ns-3.24/src/internet/model/tcp-westwood.h
--- ns-3.23/src/internet/model/tcp-westwood.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/tcp-westwood.h	2015-09-15 11:18:44.000000000 -0700
@@ -94,12 +94,7 @@
     TUSTIN
   };
 
-  // From TcpSocketBase
-  virtual int Connect (const Address &address);
-  virtual int Listen (void);
-
 protected:
-  virtual uint32_t Window (void); // Return the max possible number of unacked bytes
   virtual Ptr<TcpSocketBase> Fork (void); // Call CopyObject<TcpTahoe> to clone me
   virtual void NewAck (SequenceNumber32 const& seq); // Inc cwnd and call NewAck() of parent
   virtual void DupAck (const TcpHeader& t, uint32_t count);  // Treat 3 dupack as timeout
@@ -120,21 +115,8 @@
    */
   virtual void EstimateRtt (const TcpHeader& header);
 
-  // Implementing ns3::TcpSocket -- Attribute get/set
-  virtual void     SetSegSize (uint32_t size);
-  virtual void     SetInitialSSThresh (uint32_t threshold);
-  virtual uint32_t GetInitialSSThresh (void) const;
-  virtual void     SetInitialCwnd (uint32_t cwnd);
-  virtual uint32_t GetInitialCwnd (void) const;
-  virtual void ScaleSsThresh (uint8_t scaleFactor);
-
 private:
   /**
-   * Initialize cwnd at the beginning of a connection
-   */
-  void InitializeCwnd (void);
-
-  /**
    * Calculate the number of acknowledged packets upon the receipt of an ACK packet
    *
    * \param tcpHeader the header of the received ACK packet
@@ -164,10 +146,6 @@
   void Filtering (void);
 
 protected:
-  TracedValue<uint32_t>  m_cWnd;                   //!< Congestion window
-  TracedValue<uint32_t>  m_ssThresh;               //!< Slow Start Threshold
-  uint32_t               m_initialCWnd;            //!< Initial cWnd value
-  uint32_t               m_initialSsThresh;        //!< Initial Slow Start Threshold value
   bool                   m_inFastRec;              //!< Currently in fast recovery if TRUE
 
   TracedValue<double>    m_currentBW;              //!< Current value of the estimated BW
diff -Naur ns-3.23/src/internet/model/udp-l4-protocol.cc ns-3.24/src/internet/model/udp-l4-protocol.cc
--- ns-3.23/src/internet/model/udp-l4-protocol.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/udp-l4-protocol.cc	2015-09-15 11:18:44.000000000 -0700
@@ -120,7 +120,7 @@
       ipv6->Insert (this);
       this->SetDownTarget6 (MakeCallback (&Ipv6L3Protocol::Send, ipv6));
     }
-  Object::NotifyNewAggregate ();
+  IpL4Protocol::NotifyNewAggregate ();
 }
 
 int 
diff -Naur ns-3.23/src/internet/model/udp-socket-impl.cc ns-3.24/src/internet/model/udp-socket-impl.cc
--- ns-3.23/src/internet/model/udp-socket-impl.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/model/udp-socket-impl.cc	2015-09-15 11:18:44.000000000 -0700
@@ -329,6 +329,14 @@
 {
   NS_LOG_FUNCTION_NOARGS ();
   m_shutdownRecv = true;
+  if (m_endPoint)
+    {
+      m_endPoint->SetRxEnabled (false);
+    }
+  if (m_endPoint6)
+    {
+      m_endPoint6->SetRxEnabled (false);
+    }
   return 0;
 }
 
diff -Naur ns-3.23/src/internet/test/ipv6-dual-stack-test-suite.cc ns-3.24/src/internet/test/ipv6-dual-stack-test-suite.cc
--- ns-3.23/src/internet/test/ipv6-dual-stack-test-suite.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/test/ipv6-dual-stack-test-suite.cc	2015-09-15 11:18:44.000000000 -0700
@@ -37,7 +37,6 @@
 #include "ns3/uinteger.h"
 #include "ns3/log.h"
 
-#include "ns3/ipv4-end-point.h"
 #include "ns3/arp-l3-protocol.h"
 #include "ns3/ipv4-l3-protocol.h"
 #include "ns3/ipv6-l3-protocol.h"
diff -Naur ns-3.23/src/internet/test/tcp-test.cc ns-3.24/src/internet/test/tcp-test.cc
--- ns-3.23/src/internet/test/tcp-test.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/test/tcp-test.cc	2015-09-15 11:18:44.000000000 -0700
@@ -38,7 +38,6 @@
 #include "ns3/uinteger.h"
 #include "ns3/log.h"
 
-#include "ns3/ipv4-end-point.h"
 #include "ns3/arp-l3-protocol.h"
 #include "ns3/ipv4-l3-protocol.h"
 #include "ns3/ipv6-l3-protocol.h"
diff -Naur ns-3.23/src/internet/test/tcp-timestamp-test.cc ns-3.24/src/internet/test/tcp-timestamp-test.cc
--- ns-3.23/src/internet/test/tcp-timestamp-test.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/test/tcp-timestamp-test.cc	2015-09-15 11:18:44.000000000 -0700
@@ -36,7 +36,6 @@
 #include "ns3/log.h"
 #include "ns3/tcp-socket-base.h"
 
-#include "ns3/ipv4-end-point.h"
 #include "ns3/arp-l3-protocol.h"
 #include "ns3/ipv4-l3-protocol.h"
 #include "ns3/ipv6-l3-protocol.h"
diff -Naur ns-3.23/src/internet/test/tcp-wscaling-test.cc ns-3.24/src/internet/test/tcp-wscaling-test.cc
--- ns-3.23/src/internet/test/tcp-wscaling-test.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/test/tcp-wscaling-test.cc	2015-09-15 11:18:44.000000000 -0700
@@ -39,7 +39,6 @@
 #include "ns3/uinteger.h"
 #include "ns3/log.h"
 
-#include "ns3/ipv4-end-point.h"
 #include "ns3/arp-l3-protocol.h"
 #include "ns3/ipv4-l3-protocol.h"
 #include "ns3/ipv6-l3-protocol.h"
diff -Naur ns-3.23/src/internet/wscript ns-3.24/src/internet/wscript
--- ns-3.23/src/internet/wscript	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/internet/wscript	2015-09-15 11:18:44.000000000 -0700
@@ -65,7 +65,7 @@
         conf.msg("Checking for NSC location", False)
         conf.report_optional_feature("nsc", "Network Simulation Cradle", False,
                                      "NSC not found (see option --with-nsc)")
-	return
+        return
     
     if Options.platform in ['linux', 'freebsd']:
         arch = os.uname()[4]
@@ -263,7 +263,6 @@
         'model/ipv4-interface.h',
         'model/ipv4-l3-protocol.h',
         'model/ipv6-l3-protocol.h',
-        'model/ipv4-end-point.h',
         'model/ipv6-extension.h',
         'model/ipv6-extension-demux.h',
         'model/ipv6-extension-header.h',
diff -Naur ns-3.23/src/lr-wpan/bindings/modulegen__gcc_ILP32.py ns-3.24/src/lr-wpan/bindings/modulegen__gcc_ILP32.py
--- ns-3.23/src/lr-wpan/bindings/modulegen__gcc_ILP32.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/lr-wpan/bindings/modulegen__gcc_ILP32.py	2015-09-15 11:18:44.000000000 -0700
@@ -20,20 +20,20 @@
 def register_types(module):
     root_module = module.get_root()
     
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyEnumeration [enumeration]
+    module.add_enum('LrWpanPhyEnumeration', ['IEEE_802_15_4_PHY_BUSY', 'IEEE_802_15_4_PHY_BUSY_RX', 'IEEE_802_15_4_PHY_BUSY_TX', 'IEEE_802_15_4_PHY_FORCE_TRX_OFF', 'IEEE_802_15_4_PHY_IDLE', 'IEEE_802_15_4_PHY_INVALID_PARAMETER', 'IEEE_802_15_4_PHY_RX_ON', 'IEEE_802_15_4_PHY_SUCCESS', 'IEEE_802_15_4_PHY_TRX_OFF', 'IEEE_802_15_4_PHY_TX_ON', 'IEEE_802_15_4_PHY_UNSUPPORTED_ATTRIBUTE', 'IEEE_802_15_4_PHY_READ_ONLY', 'IEEE_802_15_4_PHY_UNSPECIFIED'])
     ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanTxOption [enumeration]
     module.add_enum('LrWpanTxOption', ['TX_OPTION_NONE', 'TX_OPTION_ACK', 'TX_OPTION_GTS', 'TX_OPTION_INDIRECT'])
     ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMcpsDataConfirmStatus [enumeration]
     module.add_enum('LrWpanMcpsDataConfirmStatus', ['IEEE_802_15_4_SUCCESS', 'IEEE_802_15_4_TRANSACTION_OVERFLOW', 'IEEE_802_15_4_TRANSACTION_EXPIRED', 'IEEE_802_15_4_CHANNEL_ACCESS_FAILURE', 'IEEE_802_15_4_INVALID_ADDRESS', 'IEEE_802_15_4_INVALID_GTS', 'IEEE_802_15_4_NO_ACK', 'IEEE_802_15_4_COUNTER_ERROR', 'IEEE_802_15_4_FRAME_TOO_LONG', 'IEEE_802_15_4_UNAVAILABLE_KEY', 'IEEE_802_15_4_UNSUPPORTED_SECURITY', 'IEEE_802_15_4_INVALID_PARAMETER'])
-    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyOption [enumeration]
-    module.add_enum('LrWpanPhyOption', ['IEEE_802_15_4_868MHZ_BPSK', 'IEEE_802_15_4_915MHZ_BPSK', 'IEEE_802_15_4_868MHZ_ASK', 'IEEE_802_15_4_915MHZ_ASK', 'IEEE_802_15_4_868MHZ_OQPSK', 'IEEE_802_15_4_915MHZ_OQPSK', 'IEEE_802_15_4_2_4GHZ_OQPSK', 'IEEE_802_15_4_INVALID_PHY_OPTION'])
-    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyEnumeration [enumeration]
-    module.add_enum('LrWpanPhyEnumeration', ['IEEE_802_15_4_PHY_BUSY', 'IEEE_802_15_4_PHY_BUSY_RX', 'IEEE_802_15_4_PHY_BUSY_TX', 'IEEE_802_15_4_PHY_FORCE_TRX_OFF', 'IEEE_802_15_4_PHY_IDLE', 'IEEE_802_15_4_PHY_INVALID_PARAMETER', 'IEEE_802_15_4_PHY_RX_ON', 'IEEE_802_15_4_PHY_SUCCESS', 'IEEE_802_15_4_PHY_TRX_OFF', 'IEEE_802_15_4_PHY_TX_ON', 'IEEE_802_15_4_PHY_UNSUPPORTED_ATTRIBUTE', 'IEEE_802_15_4_PHY_READ_ONLY', 'IEEE_802_15_4_PHY_UNSPECIFIED'])
     ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPibAttributeIdentifier [enumeration]
     module.add_enum('LrWpanPibAttributeIdentifier', ['phyCurrentChannel', 'phyChannelsSupported', 'phyTransmitPower', 'phyCCAMode', 'phyCurrentPage', 'phyMaxFrameDuration', 'phySHRDuration', 'phySymbolsPerOctet'])
-    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanAssociationStatus [enumeration]
-    module.add_enum('LrWpanAssociationStatus', ['ASSOCIATED', 'PAN_AT_CAPACITY', 'PAN_ACCESS_DENIED', 'ASSOCIATED_WITHOUT_ADDRESS', 'DISASSOCIATED'])
     ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMacState [enumeration]
     module.add_enum('LrWpanMacState', ['MAC_IDLE', 'MAC_CSMA', 'MAC_SENDING', 'MAC_ACK_PENDING', 'CHANNEL_ACCESS_FAILURE', 'CHANNEL_IDLE', 'SET_PHY_TX_ON'])
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyOption [enumeration]
+    module.add_enum('LrWpanPhyOption', ['IEEE_802_15_4_868MHZ_BPSK', 'IEEE_802_15_4_915MHZ_BPSK', 'IEEE_802_15_4_868MHZ_ASK', 'IEEE_802_15_4_915MHZ_ASK', 'IEEE_802_15_4_868MHZ_OQPSK', 'IEEE_802_15_4_915MHZ_OQPSK', 'IEEE_802_15_4_2_4GHZ_OQPSK', 'IEEE_802_15_4_INVALID_PHY_OPTION'])
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanAssociationStatus [enumeration]
+    module.add_enum('LrWpanAssociationStatus', ['ASSOCIATED', 'PAN_AT_CAPACITY', 'PAN_ACCESS_DENIED', 'ASSOCIATED_WITHOUT_ADDRESS', 'DISASSOCIATED'])
     ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanAddressMode [enumeration]
     module.add_enum('LrWpanAddressMode', ['NO_PANID_ADDR', 'ADDR_MODE_RESERVED', 'SHORT_ADDR', 'EXT_ADDR'])
     ## address.h (module 'network'): ns3::Address [class]
@@ -94,6 +94,10 @@
     module.add_class('Mac16Address', import_from_module='ns.network')
     ## mac16-address.h (module 'network'): ns3::Mac16Address [class]
     root_module['ns3::Mac16Address'].implicitly_converts_to(root_module['ns3::Address'])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    module.add_class('Mac48Address', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    root_module['ns3::Mac48Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## mac64-address.h (module 'network'): ns3::Mac64Address [class]
     module.add_class('Mac64Address', import_from_module='ns.network')
     ## mac64-address.h (module 'network'): ns3::Mac64Address [class]
@@ -137,7 +141,7 @@
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
+    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SSL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
     ## sequence-number.h (module 'network'): ns3::SequenceNumber<unsigned char, signed char> [class]
@@ -152,6 +156,10 @@
     module.add_class('TagBuffer', import_from_module='ns.network')
     ## nstime.h (module 'core'): ns3::TimeWithUnit [class]
     module.add_class('TimeWithUnit', import_from_module='ns.core')
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::LrWpanMacState> [class]
+    module.add_class('TracedValue', template_parameters=['ns3::LrWpanMacState'])
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::LrWpanPhyEnumeration> [class]
+    module.add_class('TracedValue', template_parameters=['ns3::LrWpanPhyEnumeration'])
     ## type-id.h (module 'core'): ns3::TypeId [class]
     module.add_class('TypeId', import_from_module='ns.core')
     ## type-id.h (module 'core'): ns3::TypeId::AttributeFlag [enumeration]
@@ -232,16 +240,28 @@
     module.add_class('AttributeChecker', allow_subclassing=False, automatic_type_narrowing=True, import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
     ## attribute.h (module 'core'): ns3::AttributeValue [class]
     module.add_class('AttributeValue', allow_subclassing=False, automatic_type_narrowing=True, import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
+    ## boolean.h (module 'core'): ns3::BooleanChecker [class]
+    module.add_class('BooleanChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## boolean.h (module 'core'): ns3::BooleanValue [class]
+    module.add_class('BooleanValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## callback.h (module 'core'): ns3::CallbackChecker [class]
     module.add_class('CallbackChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## callback.h (module 'core'): ns3::CallbackImplBase [class]
     module.add_class('CallbackImplBase', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     ## callback.h (module 'core'): ns3::CallbackValue [class]
     module.add_class('CallbackValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## double.h (module 'core'): ns3::DoubleValue [class]
+    module.add_class('DoubleValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## enum.h (module 'core'): ns3::EnumChecker [class]
+    module.add_class('EnumChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## enum.h (module 'core'): ns3::EnumValue [class]
+    module.add_class('EnumValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## event-impl.h (module 'core'): ns3::EventImpl [class]
     module.add_class('EventImpl', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    ## integer.h (module 'core'): ns3::IntegerValue [class]
+    module.add_class('IntegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
     module.add_class('Ipv4AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressValue [class]
@@ -276,6 +296,10 @@
     module.add_class('Mac16AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## mac16-address.h (module 'network'): ns3::Mac16AddressValue [class]
     module.add_class('Mac16AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker [class]
+    module.add_class('Mac48AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue [class]
+    module.add_class('Mac48AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## mac64-address.h (module 'network'): ns3::Mac64AddressChecker [class]
     module.add_class('Mac64AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## mac64-address.h (module 'network'): ns3::Mac64AddressValue [class]
@@ -302,6 +326,8 @@
     module.add_class('TypeIdChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## type-id.h (module 'core'): ns3::TypeIdValue [class]
     module.add_class('TypeIdValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## uinteger.h (module 'core'): ns3::UintegerValue [class]
+    module.add_class('UintegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## address.h (module 'network'): ns3::AddressChecker [class]
     module.add_class('AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## address.h (module 'network'): ns3::AddressValue [class]
@@ -335,9 +361,6 @@
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::McpsDataIndicationParams, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::McpsDataIndicationCallback')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::McpsDataIndicationParams, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::McpsDataIndicationCallback*')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::McpsDataIndicationParams, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::McpsDataIndicationCallback&')
-    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *', u'ns3::SequenceNumber32TracedValueCallback')
-    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) **', u'ns3::SequenceNumber32TracedValueCallback*')
-    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *&', u'ns3::SequenceNumber32TracedValueCallback&')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::McpsDataConfirmParams, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::McpsDataConfirmCallback')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::McpsDataConfirmParams, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::McpsDataConfirmCallback*')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::McpsDataConfirmParams, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::McpsDataConfirmCallback&')
@@ -362,6 +385,18 @@
     nested_module = module.add_cpp_namespace('Hash')
     register_types_ns3_Hash(nested_module)
     
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
+    
+    ## Register a nested module for the namespace internal
+    
+    nested_module = module.add_cpp_namespace('internal')
+    register_types_ns3_internal(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -397,6 +432,50 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *', u'ns3::TracedValueCallback::Bool')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) **', u'ns3::TracedValueCallback::Bool*')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *&', u'ns3::TracedValueCallback::Bool&')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *', u'ns3::TracedValueCallback::Double')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) **', u'ns3::TracedValueCallback::Double*')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *&', u'ns3::TracedValueCallback::Double&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *', u'ns3::TracedValueCallback::SequenceNumber32')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) **', u'ns3::TracedValueCallback::SequenceNumber32*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *&', u'ns3::TracedValueCallback::SequenceNumber32&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *', u'ns3::TracedValueCallback::Uint8')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) **', u'ns3::TracedValueCallback::Uint8*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *&', u'ns3::TracedValueCallback::Uint8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *', u'ns3::TracedValueCallback::Uint32')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) **', u'ns3::TracedValueCallback::Uint32*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *&', u'ns3::TracedValueCallback::Uint32&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *', u'ns3::TracedValueCallback::Int16')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) **', u'ns3::TracedValueCallback::Int16*')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *&', u'ns3::TracedValueCallback::Int16&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::LrWpanPhyEnumeration, ns3::LrWpanPhyEnumeration ) *', u'ns3::TracedValueCallback::LrWpanPhyEnumeration')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::LrWpanPhyEnumeration, ns3::LrWpanPhyEnumeration ) **', u'ns3::TracedValueCallback::LrWpanPhyEnumeration*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::LrWpanPhyEnumeration, ns3::LrWpanPhyEnumeration ) *&', u'ns3::TracedValueCallback::LrWpanPhyEnumeration&')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *', u'ns3::TracedValueCallback::Int32')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) **', u'ns3::TracedValueCallback::Int32*')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *&', u'ns3::TracedValueCallback::Int32&')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *', u'ns3::TracedValueCallback::Int8')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) **', u'ns3::TracedValueCallback::Int8*')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *&', u'ns3::TracedValueCallback::Int8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *', u'ns3::TracedValueCallback::Uint16')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) **', u'ns3::TracedValueCallback::Uint16*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *&', u'ns3::TracedValueCallback::Uint16&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::LrWpanMacState, ns3::LrWpanMacState ) *', u'ns3::TracedValueCallback::LrWpanMacState')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::LrWpanMacState, ns3::LrWpanMacState ) **', u'ns3::TracedValueCallback::LrWpanMacState*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::LrWpanMacState, ns3::LrWpanMacState ) *&', u'ns3::TracedValueCallback::LrWpanMacState&')
+
+def register_types_ns3_internal(module):
+    root_module = module.get_root()
+    
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AsciiTraceHelper_methods(root_module, root_module['ns3::AsciiTraceHelper'])
@@ -423,6 +502,7 @@
     register_Ns3LrWpanPhyPpduHeaderSymbolNumber_methods(root_module, root_module['ns3::LrWpanPhyPpduHeaderSymbolNumber'])
     register_Ns3LrWpanSpectrumValueHelper_methods(root_module, root_module['ns3::LrWpanSpectrumValueHelper'])
     register_Ns3Mac16Address_methods(root_module, root_module['ns3::Mac16Address'])
+    register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
     register_Ns3Mac64Address_methods(root_module, root_module['ns3::Mac64Address'])
     register_Ns3McpsDataConfirmParams_methods(root_module, root_module['ns3::McpsDataConfirmParams'])
     register_Ns3McpsDataIndicationParams_methods(root_module, root_module['ns3::McpsDataIndicationParams'])
@@ -448,6 +528,8 @@
     register_Ns3Tag_methods(root_module, root_module['ns3::Tag'])
     register_Ns3TagBuffer_methods(root_module, root_module['ns3::TagBuffer'])
     register_Ns3TimeWithUnit_methods(root_module, root_module['ns3::TimeWithUnit'])
+    register_Ns3TracedValue__Ns3LrWpanMacState_methods(root_module, root_module['ns3::TracedValue< ns3::LrWpanMacState >'])
+    register_Ns3TracedValue__Ns3LrWpanPhyEnumeration_methods(root_module, root_module['ns3::TracedValue< ns3::LrWpanPhyEnumeration >'])
     register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
     register_Ns3TypeIdAttributeInformation_methods(root_module, root_module['ns3::TypeId::AttributeInformation'])
     register_Ns3TypeIdTraceSourceInformation_methods(root_module, root_module['ns3::TypeId::TraceSourceInformation'])
@@ -481,11 +563,17 @@
     register_Ns3AttributeAccessor_methods(root_module, root_module['ns3::AttributeAccessor'])
     register_Ns3AttributeChecker_methods(root_module, root_module['ns3::AttributeChecker'])
     register_Ns3AttributeValue_methods(root_module, root_module['ns3::AttributeValue'])
+    register_Ns3BooleanChecker_methods(root_module, root_module['ns3::BooleanChecker'])
+    register_Ns3BooleanValue_methods(root_module, root_module['ns3::BooleanValue'])
     register_Ns3CallbackChecker_methods(root_module, root_module['ns3::CallbackChecker'])
     register_Ns3CallbackImplBase_methods(root_module, root_module['ns3::CallbackImplBase'])
     register_Ns3CallbackValue_methods(root_module, root_module['ns3::CallbackValue'])
+    register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
+    register_Ns3EnumChecker_methods(root_module, root_module['ns3::EnumChecker'])
+    register_Ns3EnumValue_methods(root_module, root_module['ns3::EnumValue'])
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
+    register_Ns3IntegerValue_methods(root_module, root_module['ns3::IntegerValue'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
     register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
     register_Ns3Ipv4MaskChecker_methods(root_module, root_module['ns3::Ipv4MaskChecker'])
@@ -503,6 +591,8 @@
     register_Ns3LrWpanSpectrumSignalParameters_methods(root_module, root_module['ns3::LrWpanSpectrumSignalParameters'])
     register_Ns3Mac16AddressChecker_methods(root_module, root_module['ns3::Mac16AddressChecker'])
     register_Ns3Mac16AddressValue_methods(root_module, root_module['ns3::Mac16AddressValue'])
+    register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
+    register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3Mac64AddressChecker_methods(root_module, root_module['ns3::Mac64AddressChecker'])
     register_Ns3Mac64AddressValue_methods(root_module, root_module['ns3::Mac64AddressValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
@@ -515,6 +605,7 @@
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
+    register_Ns3UintegerValue_methods(root_module, root_module['ns3::UintegerValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3LrWpanNetDevice_methods(root_module, root_module['ns3::LrWpanNetDevice'])
@@ -762,17 +853,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -794,11 +885,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -808,16 +894,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -1055,14 +1131,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -1123,11 +1203,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3EventId_methods(root_module, cls):
@@ -1633,10 +1708,10 @@
     return
 
 def register_Ns3LrWpanEdPower_methods(root_module, cls):
-    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanEdPower::LrWpanEdPower() [constructor]
-    cls.add_constructor([])
     ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanEdPower::LrWpanEdPower(ns3::LrWpanEdPower const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::LrWpanEdPower const &', 'arg0')])
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanEdPower::LrWpanEdPower() [constructor]
+    cls.add_constructor([])
     ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanEdPower::averagePower [variable]
     cls.add_instance_attribute('averagePower', 'double', is_const=False)
     ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanEdPower::lastUpdate [variable]
@@ -1749,6 +1824,78 @@
                    is_static=True)
     return
 
+def register_Ns3Mac48Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(ns3::Mac48Address const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetBroadcast() [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv4Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv4Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv6Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast6Prefix() [member function]
+    cls.add_method('GetMulticast6Prefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticastPrefix() [member function]
+    cls.add_method('GetMulticastPrefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsBroadcast() const [member function]
+    cls.add_method('IsBroadcast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsGroup() const [member function]
+    cls.add_method('IsGroup', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static bool ns3::Mac48Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
 def register_Ns3Mac64Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -2241,7 +2388,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -2259,10 +2406,10 @@
     cls.add_method('Close', 
                    'void', 
                    [])
-    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
+    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t & packets, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
     cls.add_method('Diff', 
                    'bool', 
-                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
+                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t &', 'packets'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
                    is_static=True)
     ## pcap-file.h (module 'network'): bool ns3::PcapFile::Eof() const [member function]
     cls.add_method('Eof', 
@@ -2326,10 +2473,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header const & header, ns3::Ptr<const ns3::Packet> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file.h (module 'network'): ns3::PcapFile::SNAPLEN_DEFAULT [variable]
     cls.add_static_attribute('SNAPLEN_DEFAULT', 'uint32_t const', is_const=True)
     ## pcap-file.h (module 'network'): ns3::PcapFile::ZONE_DEFAULT [variable]
@@ -2501,10 +2648,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -2611,6 +2758,74 @@
     cls.add_constructor([param('ns3::Time const', 'time'), param('ns3::Time::Unit const', 'unit')])
     return
 
+def register_Ns3TracedValue__Ns3LrWpanMacState_methods(root_module, cls):
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::LrWpanMacState>::TracedValue() [constructor]
+    cls.add_constructor([])
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::LrWpanMacState>::TracedValue(ns3::TracedValue<ns3::LrWpanMacState> const & o) [copy constructor]
+    cls.add_constructor([param('ns3::TracedValue< ns3::LrWpanMacState > const &', 'o')])
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::LrWpanMacState>::TracedValue(ns3::LrWpanMacState const & v) [constructor]
+    cls.add_constructor([param('ns3::LrWpanMacState const &', 'v')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::LrWpanMacState>::Connect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Connect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::LrWpanMacState>::ConnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('ConnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::LrWpanMacState>::Disconnect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Disconnect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::LrWpanMacState>::DisconnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('DisconnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): ns3::LrWpanMacState ns3::TracedValue<ns3::LrWpanMacState>::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::LrWpanMacState', 
+                   [], 
+                   is_const=True)
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::LrWpanMacState>::Set(ns3::LrWpanMacState const & v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::LrWpanMacState const &', 'v')])
+    return
+
+def register_Ns3TracedValue__Ns3LrWpanPhyEnumeration_methods(root_module, cls):
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::LrWpanPhyEnumeration>::TracedValue() [constructor]
+    cls.add_constructor([])
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::LrWpanPhyEnumeration>::TracedValue(ns3::TracedValue<ns3::LrWpanPhyEnumeration> const & o) [copy constructor]
+    cls.add_constructor([param('ns3::TracedValue< ns3::LrWpanPhyEnumeration > const &', 'o')])
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::LrWpanPhyEnumeration>::TracedValue(ns3::LrWpanPhyEnumeration const & v) [constructor]
+    cls.add_constructor([param('ns3::LrWpanPhyEnumeration const &', 'v')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::LrWpanPhyEnumeration>::Connect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Connect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::LrWpanPhyEnumeration>::ConnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('ConnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::LrWpanPhyEnumeration>::Disconnect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Disconnect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::LrWpanPhyEnumeration>::DisconnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('DisconnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): ns3::LrWpanPhyEnumeration ns3::TracedValue<ns3::LrWpanPhyEnumeration>::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::LrWpanPhyEnumeration', 
+                   [], 
+                   is_const=True)
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::LrWpanPhyEnumeration>::Set(ns3::LrWpanPhyEnumeration const & v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::LrWpanPhyEnumeration const &', 'v')])
+    return
+
 def register_Ns3TypeId_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -3448,10 +3663,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header const & header, ns3::Ptr<const ns3::Packet> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('ns3::Time', 't'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('ns3::Time', 't'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, uint8_t const * buffer, uint32_t length) [member function]
     cls.add_method('Write', 
                    'void', 
@@ -3643,11 +3858,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'd')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## spectrum-phy.h (module 'spectrum'): ns3::Ptr<ns3::NetDevice> ns3::SpectrumPhy::GetDevice() [member function]
+    ## spectrum-phy.h (module 'spectrum'): ns3::Ptr<ns3::NetDevice> ns3::SpectrumPhy::GetDevice() const [member function]
     cls.add_method('GetDevice', 
                    'ns3::Ptr< ns3::NetDevice >', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## spectrum-phy.h (module 'spectrum'): void ns3::SpectrumPhy::SetMobility(ns3::Ptr<ns3::MobilityModel> m) [member function]
     cls.add_method('SetMobility', 
                    'void', 
@@ -4049,6 +4264,47 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3BooleanChecker_methods(root_module, cls):
+    ## boolean.h (module 'core'): ns3::BooleanChecker::BooleanChecker() [constructor]
+    cls.add_constructor([])
+    ## boolean.h (module 'core'): ns3::BooleanChecker::BooleanChecker(ns3::BooleanChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::BooleanChecker const &', 'arg0')])
+    return
+
+def register_Ns3BooleanValue_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue(ns3::BooleanValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::BooleanValue const &', 'arg0')])
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue() [constructor]
+    cls.add_constructor([])
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue(bool value) [constructor]
+    cls.add_constructor([param('bool', 'value')])
+    ## boolean.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::BooleanValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## boolean.h (module 'core'): bool ns3::BooleanValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## boolean.h (module 'core'): bool ns3::BooleanValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## boolean.h (module 'core'): std::string ns3::BooleanValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## boolean.h (module 'core'): void ns3::BooleanValue::Set(bool value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('bool', 'value')])
+    return
+
 def register_Ns3CallbackChecker_methods(root_module, cls):
     ## callback.h (module 'core'): ns3::CallbackChecker::CallbackChecker() [constructor]
     cls.add_constructor([])
@@ -4061,11 +4317,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -4096,6 +4362,39 @@
                    [param('ns3::CallbackBase', 'base')])
     return
 
+def register_Ns3DoubleValue_methods(root_module, cls):
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue() [constructor]
+    cls.add_constructor([])
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue(ns3::DoubleValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DoubleValue const &', 'arg0')])
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue(double const & value) [constructor]
+    cls.add_constructor([param('double const &', 'value')])
+    ## double.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::DoubleValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## double.h (module 'core'): bool ns3::DoubleValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## double.h (module 'core'): double ns3::DoubleValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## double.h (module 'core'): std::string ns3::DoubleValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## double.h (module 'core'): void ns3::DoubleValue::Set(double const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('double const &', 'value')])
+    return
+
 def register_Ns3EmptyAttributeValue_methods(root_module, cls):
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue::EmptyAttributeValue(ns3::EmptyAttributeValue const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::EmptyAttributeValue const &', 'arg0')])
@@ -4118,6 +4417,84 @@
                    is_const=True, visibility='private', is_virtual=True)
     return
 
+def register_Ns3EnumChecker_methods(root_module, cls):
+    ## enum.h (module 'core'): ns3::EnumChecker::EnumChecker(ns3::EnumChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EnumChecker const &', 'arg0')])
+    ## enum.h (module 'core'): ns3::EnumChecker::EnumChecker() [constructor]
+    cls.add_constructor([])
+    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int value, std::string name) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('int', 'value'), param('std::string', 'name')])
+    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int value, std::string name) [member function]
+    cls.add_method('AddDefault', 
+                   'void', 
+                   [param('int', 'value'), param('std::string', 'name')])
+    ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): bool ns3::EnumChecker::Copy(ns3::AttributeValue const & src, ns3::AttributeValue & dst) const [member function]
+    cls.add_method('Copy', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'src'), param('ns3::AttributeValue &', 'dst')], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): std::string ns3::EnumChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): std::string ns3::EnumChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): bool ns3::EnumChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EnumValue_methods(root_module, cls):
+    ## enum.h (module 'core'): ns3::EnumValue::EnumValue(ns3::EnumValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EnumValue const &', 'arg0')])
+    ## enum.h (module 'core'): ns3::EnumValue::EnumValue() [constructor]
+    cls.add_constructor([])
+    ## enum.h (module 'core'): ns3::EnumValue::EnumValue(int value) [constructor]
+    cls.add_constructor([param('int', 'value')])
+    ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): bool ns3::EnumValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## enum.h (module 'core'): int ns3::EnumValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'int', 
+                   [], 
+                   is_const=True)
+    ## enum.h (module 'core'): std::string ns3::EnumValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): void ns3::EnumValue::Set(int value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('int', 'value')])
+    return
+
 def register_Ns3EventImpl_methods(root_module, cls):
     ## event-impl.h (module 'core'): ns3::EventImpl::EventImpl(ns3::EventImpl const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::EventImpl const &', 'arg0')])
@@ -4142,6 +4519,39 @@
                    is_pure_virtual=True, visibility='protected', is_virtual=True)
     return
 
+def register_Ns3IntegerValue_methods(root_module, cls):
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue() [constructor]
+    cls.add_constructor([])
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue(ns3::IntegerValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::IntegerValue const &', 'arg0')])
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue(int64_t const & value) [constructor]
+    cls.add_constructor([param('int64_t const &', 'value')])
+    ## integer.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::IntegerValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## integer.h (module 'core'): bool ns3::IntegerValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## integer.h (module 'core'): int64_t ns3::IntegerValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## integer.h (module 'core'): std::string ns3::IntegerValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## integer.h (module 'core'): void ns3::IntegerValue::Set(int64_t const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('int64_t const &', 'value')])
+    return
+
 def register_Ns3Ipv4AddressChecker_methods(root_module, cls):
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker::Ipv4AddressChecker() [constructor]
     cls.add_constructor([])
@@ -4723,11 +5133,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'd')], 
                    is_virtual=True)
-    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::Ptr<ns3::NetDevice> ns3::LrWpanPhy::GetDevice() [member function]
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::Ptr<ns3::NetDevice> ns3::LrWpanPhy::GetDevice() const [member function]
     cls.add_method('GetDevice', 
                    'ns3::Ptr< ns3::NetDevice >', 
                    [], 
-                   is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::SetAntenna(ns3::Ptr<ns3::AntennaModel> a) [member function]
     cls.add_method('SetAntenna', 
                    'void', 
@@ -4899,6 +5309,46 @@
                    [param('ns3::Mac16Address const &', 'value')])
     return
 
+def register_Ns3Mac48AddressChecker_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker(ns3::Mac48AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac48AddressValue_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressValue const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'value')])
+    ## mac48-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac48AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## mac48-address.h (module 'network'): ns3::Mac48Address ns3::Mac48AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): std::string ns3::Mac48AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48AddressValue::Set(ns3::Mac48Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac48Address const &', 'value')])
+    return
+
 def register_Ns3Mac64AddressChecker_methods(root_module, cls):
     ## mac64-address.h (module 'network'): ns3::Mac64AddressChecker::Mac64AddressChecker() [constructor]
     cls.add_constructor([])
@@ -5509,6 +5959,39 @@
                    [param('ns3::TypeId const &', 'value')])
     return
 
+def register_Ns3UintegerValue_methods(root_module, cls):
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue() [constructor]
+    cls.add_constructor([])
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue(ns3::UintegerValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::UintegerValue const &', 'arg0')])
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue(uint64_t const & value) [constructor]
+    cls.add_constructor([param('uint64_t const &', 'value')])
+    ## uinteger.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::UintegerValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## uinteger.h (module 'core'): bool ns3::UintegerValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## uinteger.h (module 'core'): uint64_t ns3::UintegerValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## uinteger.h (module 'core'): std::string ns3::UintegerValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## uinteger.h (module 'core'): void ns3::UintegerValue::Set(uint64_t const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('uint64_t const &', 'value')])
+    return
+
 def register_Ns3AddressChecker_methods(root_module, cls):
     ## address.h (module 'network'): ns3::AddressChecker::AddressChecker() [constructor]
     cls.add_constructor([])
@@ -5839,6 +6322,8 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
+    register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -5851,6 +6336,12 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
+def register_functions_ns3_internal(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.23/src/lr-wpan/bindings/modulegen__gcc_LP64.py ns-3.24/src/lr-wpan/bindings/modulegen__gcc_LP64.py
--- ns-3.23/src/lr-wpan/bindings/modulegen__gcc_LP64.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/lr-wpan/bindings/modulegen__gcc_LP64.py	2015-09-15 11:18:44.000000000 -0700
@@ -20,20 +20,20 @@
 def register_types(module):
     root_module = module.get_root()
     
-    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyEnumeration [enumeration]
-    module.add_enum('LrWpanPhyEnumeration', ['IEEE_802_15_4_PHY_BUSY', 'IEEE_802_15_4_PHY_BUSY_RX', 'IEEE_802_15_4_PHY_BUSY_TX', 'IEEE_802_15_4_PHY_FORCE_TRX_OFF', 'IEEE_802_15_4_PHY_IDLE', 'IEEE_802_15_4_PHY_INVALID_PARAMETER', 'IEEE_802_15_4_PHY_RX_ON', 'IEEE_802_15_4_PHY_SUCCESS', 'IEEE_802_15_4_PHY_TRX_OFF', 'IEEE_802_15_4_PHY_TX_ON', 'IEEE_802_15_4_PHY_UNSUPPORTED_ATTRIBUTE', 'IEEE_802_15_4_PHY_READ_ONLY', 'IEEE_802_15_4_PHY_UNSPECIFIED'])
     ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanTxOption [enumeration]
     module.add_enum('LrWpanTxOption', ['TX_OPTION_NONE', 'TX_OPTION_ACK', 'TX_OPTION_GTS', 'TX_OPTION_INDIRECT'])
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyOption [enumeration]
+    module.add_enum('LrWpanPhyOption', ['IEEE_802_15_4_868MHZ_BPSK', 'IEEE_802_15_4_915MHZ_BPSK', 'IEEE_802_15_4_868MHZ_ASK', 'IEEE_802_15_4_915MHZ_ASK', 'IEEE_802_15_4_868MHZ_OQPSK', 'IEEE_802_15_4_915MHZ_OQPSK', 'IEEE_802_15_4_2_4GHZ_OQPSK', 'IEEE_802_15_4_INVALID_PHY_OPTION'])
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyEnumeration [enumeration]
+    module.add_enum('LrWpanPhyEnumeration', ['IEEE_802_15_4_PHY_BUSY', 'IEEE_802_15_4_PHY_BUSY_RX', 'IEEE_802_15_4_PHY_BUSY_TX', 'IEEE_802_15_4_PHY_FORCE_TRX_OFF', 'IEEE_802_15_4_PHY_IDLE', 'IEEE_802_15_4_PHY_INVALID_PARAMETER', 'IEEE_802_15_4_PHY_RX_ON', 'IEEE_802_15_4_PHY_SUCCESS', 'IEEE_802_15_4_PHY_TRX_OFF', 'IEEE_802_15_4_PHY_TX_ON', 'IEEE_802_15_4_PHY_UNSUPPORTED_ATTRIBUTE', 'IEEE_802_15_4_PHY_READ_ONLY', 'IEEE_802_15_4_PHY_UNSPECIFIED'])
     ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMcpsDataConfirmStatus [enumeration]
     module.add_enum('LrWpanMcpsDataConfirmStatus', ['IEEE_802_15_4_SUCCESS', 'IEEE_802_15_4_TRANSACTION_OVERFLOW', 'IEEE_802_15_4_TRANSACTION_EXPIRED', 'IEEE_802_15_4_CHANNEL_ACCESS_FAILURE', 'IEEE_802_15_4_INVALID_ADDRESS', 'IEEE_802_15_4_INVALID_GTS', 'IEEE_802_15_4_NO_ACK', 'IEEE_802_15_4_COUNTER_ERROR', 'IEEE_802_15_4_FRAME_TOO_LONG', 'IEEE_802_15_4_UNAVAILABLE_KEY', 'IEEE_802_15_4_UNSUPPORTED_SECURITY', 'IEEE_802_15_4_INVALID_PARAMETER'])
+    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanAssociationStatus [enumeration]
+    module.add_enum('LrWpanAssociationStatus', ['ASSOCIATED', 'PAN_AT_CAPACITY', 'PAN_ACCESS_DENIED', 'ASSOCIATED_WITHOUT_ADDRESS', 'DISASSOCIATED'])
     ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPibAttributeIdentifier [enumeration]
     module.add_enum('LrWpanPibAttributeIdentifier', ['phyCurrentChannel', 'phyChannelsSupported', 'phyTransmitPower', 'phyCCAMode', 'phyCurrentPage', 'phyMaxFrameDuration', 'phySHRDuration', 'phySymbolsPerOctet'])
     ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanMacState [enumeration]
     module.add_enum('LrWpanMacState', ['MAC_IDLE', 'MAC_CSMA', 'MAC_SENDING', 'MAC_ACK_PENDING', 'CHANNEL_ACCESS_FAILURE', 'CHANNEL_IDLE', 'SET_PHY_TX_ON'])
-    ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanAssociationStatus [enumeration]
-    module.add_enum('LrWpanAssociationStatus', ['ASSOCIATED', 'PAN_AT_CAPACITY', 'PAN_ACCESS_DENIED', 'ASSOCIATED_WITHOUT_ADDRESS', 'DISASSOCIATED'])
-    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanPhyOption [enumeration]
-    module.add_enum('LrWpanPhyOption', ['IEEE_802_15_4_868MHZ_BPSK', 'IEEE_802_15_4_915MHZ_BPSK', 'IEEE_802_15_4_868MHZ_ASK', 'IEEE_802_15_4_915MHZ_ASK', 'IEEE_802_15_4_868MHZ_OQPSK', 'IEEE_802_15_4_915MHZ_OQPSK', 'IEEE_802_15_4_2_4GHZ_OQPSK', 'IEEE_802_15_4_INVALID_PHY_OPTION'])
     ## lr-wpan-mac.h (module 'lr-wpan'): ns3::LrWpanAddressMode [enumeration]
     module.add_enum('LrWpanAddressMode', ['NO_PANID_ADDR', 'ADDR_MODE_RESERVED', 'SHORT_ADDR', 'EXT_ADDR'])
     ## address.h (module 'network'): ns3::Address [class]
@@ -94,6 +94,10 @@
     module.add_class('Mac16Address', import_from_module='ns.network')
     ## mac16-address.h (module 'network'): ns3::Mac16Address [class]
     root_module['ns3::Mac16Address'].implicitly_converts_to(root_module['ns3::Address'])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    module.add_class('Mac48Address', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    root_module['ns3::Mac48Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## mac64-address.h (module 'network'): ns3::Mac64Address [class]
     module.add_class('Mac64Address', import_from_module='ns.network')
     ## mac64-address.h (module 'network'): ns3::Mac64Address [class]
@@ -137,7 +141,7 @@
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
+    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SSL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
     ## sequence-number.h (module 'network'): ns3::SequenceNumber<unsigned char, signed char> [class]
@@ -152,6 +156,10 @@
     module.add_class('TagBuffer', import_from_module='ns.network')
     ## nstime.h (module 'core'): ns3::TimeWithUnit [class]
     module.add_class('TimeWithUnit', import_from_module='ns.core')
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::LrWpanMacState> [class]
+    module.add_class('TracedValue', template_parameters=['ns3::LrWpanMacState'])
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::LrWpanPhyEnumeration> [class]
+    module.add_class('TracedValue', template_parameters=['ns3::LrWpanPhyEnumeration'])
     ## type-id.h (module 'core'): ns3::TypeId [class]
     module.add_class('TypeId', import_from_module='ns.core')
     ## type-id.h (module 'core'): ns3::TypeId::AttributeFlag [enumeration]
@@ -232,16 +240,28 @@
     module.add_class('AttributeChecker', allow_subclassing=False, automatic_type_narrowing=True, import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
     ## attribute.h (module 'core'): ns3::AttributeValue [class]
     module.add_class('AttributeValue', allow_subclassing=False, automatic_type_narrowing=True, import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
+    ## boolean.h (module 'core'): ns3::BooleanChecker [class]
+    module.add_class('BooleanChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## boolean.h (module 'core'): ns3::BooleanValue [class]
+    module.add_class('BooleanValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## callback.h (module 'core'): ns3::CallbackChecker [class]
     module.add_class('CallbackChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## callback.h (module 'core'): ns3::CallbackImplBase [class]
     module.add_class('CallbackImplBase', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
     ## callback.h (module 'core'): ns3::CallbackValue [class]
     module.add_class('CallbackValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## double.h (module 'core'): ns3::DoubleValue [class]
+    module.add_class('DoubleValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## enum.h (module 'core'): ns3::EnumChecker [class]
+    module.add_class('EnumChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## enum.h (module 'core'): ns3::EnumValue [class]
+    module.add_class('EnumValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## event-impl.h (module 'core'): ns3::EventImpl [class]
     module.add_class('EventImpl', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
+    ## integer.h (module 'core'): ns3::IntegerValue [class]
+    module.add_class('IntegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
     module.add_class('Ipv4AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressValue [class]
@@ -276,6 +296,10 @@
     module.add_class('Mac16AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## mac16-address.h (module 'network'): ns3::Mac16AddressValue [class]
     module.add_class('Mac16AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker [class]
+    module.add_class('Mac48AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue [class]
+    module.add_class('Mac48AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## mac64-address.h (module 'network'): ns3::Mac64AddressChecker [class]
     module.add_class('Mac64AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## mac64-address.h (module 'network'): ns3::Mac64AddressValue [class]
@@ -302,6 +326,8 @@
     module.add_class('TypeIdChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## type-id.h (module 'core'): ns3::TypeIdValue [class]
     module.add_class('TypeIdValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## uinteger.h (module 'core'): ns3::UintegerValue [class]
+    module.add_class('UintegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## address.h (module 'network'): ns3::AddressChecker [class]
     module.add_class('AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## address.h (module 'network'): ns3::AddressValue [class]
@@ -335,9 +361,6 @@
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::McpsDataIndicationParams, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::McpsDataIndicationCallback')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::McpsDataIndicationParams, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::McpsDataIndicationCallback*')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::McpsDataIndicationParams, ns3::Ptr< ns3::Packet >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::McpsDataIndicationCallback&')
-    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *', u'ns3::SequenceNumber32TracedValueCallback')
-    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) **', u'ns3::SequenceNumber32TracedValueCallback*')
-    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *&', u'ns3::SequenceNumber32TracedValueCallback&')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::McpsDataConfirmParams, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::McpsDataConfirmCallback')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::McpsDataConfirmParams, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::McpsDataConfirmCallback*')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::McpsDataConfirmParams, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::McpsDataConfirmCallback&')
@@ -362,6 +385,18 @@
     nested_module = module.add_cpp_namespace('Hash')
     register_types_ns3_Hash(nested_module)
     
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
+    
+    ## Register a nested module for the namespace internal
+    
+    nested_module = module.add_cpp_namespace('internal')
+    register_types_ns3_internal(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -397,6 +432,50 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *', u'ns3::TracedValueCallback::Bool')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) **', u'ns3::TracedValueCallback::Bool*')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *&', u'ns3::TracedValueCallback::Bool&')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *', u'ns3::TracedValueCallback::Double')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) **', u'ns3::TracedValueCallback::Double*')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *&', u'ns3::TracedValueCallback::Double&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *', u'ns3::TracedValueCallback::SequenceNumber32')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) **', u'ns3::TracedValueCallback::SequenceNumber32*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *&', u'ns3::TracedValueCallback::SequenceNumber32&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *', u'ns3::TracedValueCallback::Uint8')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) **', u'ns3::TracedValueCallback::Uint8*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *&', u'ns3::TracedValueCallback::Uint8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *', u'ns3::TracedValueCallback::Uint32')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) **', u'ns3::TracedValueCallback::Uint32*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *&', u'ns3::TracedValueCallback::Uint32&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *', u'ns3::TracedValueCallback::Int16')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) **', u'ns3::TracedValueCallback::Int16*')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *&', u'ns3::TracedValueCallback::Int16&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::LrWpanPhyEnumeration, ns3::LrWpanPhyEnumeration ) *', u'ns3::TracedValueCallback::LrWpanPhyEnumeration')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::LrWpanPhyEnumeration, ns3::LrWpanPhyEnumeration ) **', u'ns3::TracedValueCallback::LrWpanPhyEnumeration*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::LrWpanPhyEnumeration, ns3::LrWpanPhyEnumeration ) *&', u'ns3::TracedValueCallback::LrWpanPhyEnumeration&')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *', u'ns3::TracedValueCallback::Int32')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) **', u'ns3::TracedValueCallback::Int32*')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *&', u'ns3::TracedValueCallback::Int32&')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *', u'ns3::TracedValueCallback::Int8')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) **', u'ns3::TracedValueCallback::Int8*')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *&', u'ns3::TracedValueCallback::Int8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *', u'ns3::TracedValueCallback::Uint16')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) **', u'ns3::TracedValueCallback::Uint16*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *&', u'ns3::TracedValueCallback::Uint16&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::LrWpanMacState, ns3::LrWpanMacState ) *', u'ns3::TracedValueCallback::LrWpanMacState')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::LrWpanMacState, ns3::LrWpanMacState ) **', u'ns3::TracedValueCallback::LrWpanMacState*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::LrWpanMacState, ns3::LrWpanMacState ) *&', u'ns3::TracedValueCallback::LrWpanMacState&')
+
+def register_types_ns3_internal(module):
+    root_module = module.get_root()
+    
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AsciiTraceHelper_methods(root_module, root_module['ns3::AsciiTraceHelper'])
@@ -423,6 +502,7 @@
     register_Ns3LrWpanPhyPpduHeaderSymbolNumber_methods(root_module, root_module['ns3::LrWpanPhyPpduHeaderSymbolNumber'])
     register_Ns3LrWpanSpectrumValueHelper_methods(root_module, root_module['ns3::LrWpanSpectrumValueHelper'])
     register_Ns3Mac16Address_methods(root_module, root_module['ns3::Mac16Address'])
+    register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
     register_Ns3Mac64Address_methods(root_module, root_module['ns3::Mac64Address'])
     register_Ns3McpsDataConfirmParams_methods(root_module, root_module['ns3::McpsDataConfirmParams'])
     register_Ns3McpsDataIndicationParams_methods(root_module, root_module['ns3::McpsDataIndicationParams'])
@@ -448,6 +528,8 @@
     register_Ns3Tag_methods(root_module, root_module['ns3::Tag'])
     register_Ns3TagBuffer_methods(root_module, root_module['ns3::TagBuffer'])
     register_Ns3TimeWithUnit_methods(root_module, root_module['ns3::TimeWithUnit'])
+    register_Ns3TracedValue__Ns3LrWpanMacState_methods(root_module, root_module['ns3::TracedValue< ns3::LrWpanMacState >'])
+    register_Ns3TracedValue__Ns3LrWpanPhyEnumeration_methods(root_module, root_module['ns3::TracedValue< ns3::LrWpanPhyEnumeration >'])
     register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
     register_Ns3TypeIdAttributeInformation_methods(root_module, root_module['ns3::TypeId::AttributeInformation'])
     register_Ns3TypeIdTraceSourceInformation_methods(root_module, root_module['ns3::TypeId::TraceSourceInformation'])
@@ -481,11 +563,17 @@
     register_Ns3AttributeAccessor_methods(root_module, root_module['ns3::AttributeAccessor'])
     register_Ns3AttributeChecker_methods(root_module, root_module['ns3::AttributeChecker'])
     register_Ns3AttributeValue_methods(root_module, root_module['ns3::AttributeValue'])
+    register_Ns3BooleanChecker_methods(root_module, root_module['ns3::BooleanChecker'])
+    register_Ns3BooleanValue_methods(root_module, root_module['ns3::BooleanValue'])
     register_Ns3CallbackChecker_methods(root_module, root_module['ns3::CallbackChecker'])
     register_Ns3CallbackImplBase_methods(root_module, root_module['ns3::CallbackImplBase'])
     register_Ns3CallbackValue_methods(root_module, root_module['ns3::CallbackValue'])
+    register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
+    register_Ns3EnumChecker_methods(root_module, root_module['ns3::EnumChecker'])
+    register_Ns3EnumValue_methods(root_module, root_module['ns3::EnumValue'])
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
+    register_Ns3IntegerValue_methods(root_module, root_module['ns3::IntegerValue'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
     register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
     register_Ns3Ipv4MaskChecker_methods(root_module, root_module['ns3::Ipv4MaskChecker'])
@@ -503,6 +591,8 @@
     register_Ns3LrWpanSpectrumSignalParameters_methods(root_module, root_module['ns3::LrWpanSpectrumSignalParameters'])
     register_Ns3Mac16AddressChecker_methods(root_module, root_module['ns3::Mac16AddressChecker'])
     register_Ns3Mac16AddressValue_methods(root_module, root_module['ns3::Mac16AddressValue'])
+    register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
+    register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3Mac64AddressChecker_methods(root_module, root_module['ns3::Mac64AddressChecker'])
     register_Ns3Mac64AddressValue_methods(root_module, root_module['ns3::Mac64AddressValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
@@ -515,6 +605,7 @@
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
+    register_Ns3UintegerValue_methods(root_module, root_module['ns3::UintegerValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3LrWpanNetDevice_methods(root_module, root_module['ns3::LrWpanNetDevice'])
@@ -762,17 +853,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -794,11 +885,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -808,16 +894,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -1055,14 +1131,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -1123,11 +1203,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3EventId_methods(root_module, cls):
@@ -1633,10 +1708,10 @@
     return
 
 def register_Ns3LrWpanEdPower_methods(root_module, cls):
-    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanEdPower::LrWpanEdPower(ns3::LrWpanEdPower const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::LrWpanEdPower const &', 'arg0')])
     ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanEdPower::LrWpanEdPower() [constructor]
     cls.add_constructor([])
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanEdPower::LrWpanEdPower(ns3::LrWpanEdPower const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LrWpanEdPower const &', 'arg0')])
     ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanEdPower::averagePower [variable]
     cls.add_instance_attribute('averagePower', 'double', is_const=False)
     ## lr-wpan-phy.h (module 'lr-wpan'): ns3::LrWpanEdPower::lastUpdate [variable]
@@ -1749,6 +1824,78 @@
                    is_static=True)
     return
 
+def register_Ns3Mac48Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(ns3::Mac48Address const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetBroadcast() [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv4Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv4Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv6Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast6Prefix() [member function]
+    cls.add_method('GetMulticast6Prefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticastPrefix() [member function]
+    cls.add_method('GetMulticastPrefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsBroadcast() const [member function]
+    cls.add_method('IsBroadcast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsGroup() const [member function]
+    cls.add_method('IsGroup', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static bool ns3::Mac48Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
 def register_Ns3Mac64Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -2241,7 +2388,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -2259,10 +2406,10 @@
     cls.add_method('Close', 
                    'void', 
                    [])
-    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
+    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t & packets, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
     cls.add_method('Diff', 
                    'bool', 
-                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
+                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t &', 'packets'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
                    is_static=True)
     ## pcap-file.h (module 'network'): bool ns3::PcapFile::Eof() const [member function]
     cls.add_method('Eof', 
@@ -2326,10 +2473,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header const & header, ns3::Ptr<const ns3::Packet> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file.h (module 'network'): ns3::PcapFile::SNAPLEN_DEFAULT [variable]
     cls.add_static_attribute('SNAPLEN_DEFAULT', 'uint32_t const', is_const=True)
     ## pcap-file.h (module 'network'): ns3::PcapFile::ZONE_DEFAULT [variable]
@@ -2501,10 +2648,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -2611,6 +2758,74 @@
     cls.add_constructor([param('ns3::Time const', 'time'), param('ns3::Time::Unit const', 'unit')])
     return
 
+def register_Ns3TracedValue__Ns3LrWpanMacState_methods(root_module, cls):
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::LrWpanMacState>::TracedValue() [constructor]
+    cls.add_constructor([])
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::LrWpanMacState>::TracedValue(ns3::TracedValue<ns3::LrWpanMacState> const & o) [copy constructor]
+    cls.add_constructor([param('ns3::TracedValue< ns3::LrWpanMacState > const &', 'o')])
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::LrWpanMacState>::TracedValue(ns3::LrWpanMacState const & v) [constructor]
+    cls.add_constructor([param('ns3::LrWpanMacState const &', 'v')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::LrWpanMacState>::Connect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Connect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::LrWpanMacState>::ConnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('ConnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::LrWpanMacState>::Disconnect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Disconnect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::LrWpanMacState>::DisconnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('DisconnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): ns3::LrWpanMacState ns3::TracedValue<ns3::LrWpanMacState>::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::LrWpanMacState', 
+                   [], 
+                   is_const=True)
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::LrWpanMacState>::Set(ns3::LrWpanMacState const & v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::LrWpanMacState const &', 'v')])
+    return
+
+def register_Ns3TracedValue__Ns3LrWpanPhyEnumeration_methods(root_module, cls):
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::LrWpanPhyEnumeration>::TracedValue() [constructor]
+    cls.add_constructor([])
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::LrWpanPhyEnumeration>::TracedValue(ns3::TracedValue<ns3::LrWpanPhyEnumeration> const & o) [copy constructor]
+    cls.add_constructor([param('ns3::TracedValue< ns3::LrWpanPhyEnumeration > const &', 'o')])
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::LrWpanPhyEnumeration>::TracedValue(ns3::LrWpanPhyEnumeration const & v) [constructor]
+    cls.add_constructor([param('ns3::LrWpanPhyEnumeration const &', 'v')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::LrWpanPhyEnumeration>::Connect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Connect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::LrWpanPhyEnumeration>::ConnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('ConnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::LrWpanPhyEnumeration>::Disconnect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Disconnect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::LrWpanPhyEnumeration>::DisconnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('DisconnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): ns3::LrWpanPhyEnumeration ns3::TracedValue<ns3::LrWpanPhyEnumeration>::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::LrWpanPhyEnumeration', 
+                   [], 
+                   is_const=True)
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::LrWpanPhyEnumeration>::Set(ns3::LrWpanPhyEnumeration const & v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::LrWpanPhyEnumeration const &', 'v')])
+    return
+
 def register_Ns3TypeId_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -3448,10 +3663,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header const & header, ns3::Ptr<const ns3::Packet> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('ns3::Time', 't'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('ns3::Time', 't'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, uint8_t const * buffer, uint32_t length) [member function]
     cls.add_method('Write', 
                    'void', 
@@ -3643,11 +3858,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'd')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## spectrum-phy.h (module 'spectrum'): ns3::Ptr<ns3::NetDevice> ns3::SpectrumPhy::GetDevice() [member function]
+    ## spectrum-phy.h (module 'spectrum'): ns3::Ptr<ns3::NetDevice> ns3::SpectrumPhy::GetDevice() const [member function]
     cls.add_method('GetDevice', 
                    'ns3::Ptr< ns3::NetDevice >', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## spectrum-phy.h (module 'spectrum'): void ns3::SpectrumPhy::SetMobility(ns3::Ptr<ns3::MobilityModel> m) [member function]
     cls.add_method('SetMobility', 
                    'void', 
@@ -4049,6 +4264,47 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3BooleanChecker_methods(root_module, cls):
+    ## boolean.h (module 'core'): ns3::BooleanChecker::BooleanChecker() [constructor]
+    cls.add_constructor([])
+    ## boolean.h (module 'core'): ns3::BooleanChecker::BooleanChecker(ns3::BooleanChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::BooleanChecker const &', 'arg0')])
+    return
+
+def register_Ns3BooleanValue_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue(ns3::BooleanValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::BooleanValue const &', 'arg0')])
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue() [constructor]
+    cls.add_constructor([])
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue(bool value) [constructor]
+    cls.add_constructor([param('bool', 'value')])
+    ## boolean.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::BooleanValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## boolean.h (module 'core'): bool ns3::BooleanValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## boolean.h (module 'core'): bool ns3::BooleanValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## boolean.h (module 'core'): std::string ns3::BooleanValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## boolean.h (module 'core'): void ns3::BooleanValue::Set(bool value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('bool', 'value')])
+    return
+
 def register_Ns3CallbackChecker_methods(root_module, cls):
     ## callback.h (module 'core'): ns3::CallbackChecker::CallbackChecker() [constructor]
     cls.add_constructor([])
@@ -4061,11 +4317,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -4096,6 +4362,39 @@
                    [param('ns3::CallbackBase', 'base')])
     return
 
+def register_Ns3DoubleValue_methods(root_module, cls):
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue() [constructor]
+    cls.add_constructor([])
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue(ns3::DoubleValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DoubleValue const &', 'arg0')])
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue(double const & value) [constructor]
+    cls.add_constructor([param('double const &', 'value')])
+    ## double.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::DoubleValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## double.h (module 'core'): bool ns3::DoubleValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## double.h (module 'core'): double ns3::DoubleValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## double.h (module 'core'): std::string ns3::DoubleValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## double.h (module 'core'): void ns3::DoubleValue::Set(double const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('double const &', 'value')])
+    return
+
 def register_Ns3EmptyAttributeValue_methods(root_module, cls):
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue::EmptyAttributeValue(ns3::EmptyAttributeValue const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::EmptyAttributeValue const &', 'arg0')])
@@ -4118,6 +4417,84 @@
                    is_const=True, visibility='private', is_virtual=True)
     return
 
+def register_Ns3EnumChecker_methods(root_module, cls):
+    ## enum.h (module 'core'): ns3::EnumChecker::EnumChecker(ns3::EnumChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EnumChecker const &', 'arg0')])
+    ## enum.h (module 'core'): ns3::EnumChecker::EnumChecker() [constructor]
+    cls.add_constructor([])
+    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int value, std::string name) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('int', 'value'), param('std::string', 'name')])
+    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int value, std::string name) [member function]
+    cls.add_method('AddDefault', 
+                   'void', 
+                   [param('int', 'value'), param('std::string', 'name')])
+    ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): bool ns3::EnumChecker::Copy(ns3::AttributeValue const & src, ns3::AttributeValue & dst) const [member function]
+    cls.add_method('Copy', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'src'), param('ns3::AttributeValue &', 'dst')], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): std::string ns3::EnumChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): std::string ns3::EnumChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): bool ns3::EnumChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EnumValue_methods(root_module, cls):
+    ## enum.h (module 'core'): ns3::EnumValue::EnumValue(ns3::EnumValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EnumValue const &', 'arg0')])
+    ## enum.h (module 'core'): ns3::EnumValue::EnumValue() [constructor]
+    cls.add_constructor([])
+    ## enum.h (module 'core'): ns3::EnumValue::EnumValue(int value) [constructor]
+    cls.add_constructor([param('int', 'value')])
+    ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): bool ns3::EnumValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## enum.h (module 'core'): int ns3::EnumValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'int', 
+                   [], 
+                   is_const=True)
+    ## enum.h (module 'core'): std::string ns3::EnumValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): void ns3::EnumValue::Set(int value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('int', 'value')])
+    return
+
 def register_Ns3EventImpl_methods(root_module, cls):
     ## event-impl.h (module 'core'): ns3::EventImpl::EventImpl(ns3::EventImpl const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::EventImpl const &', 'arg0')])
@@ -4142,6 +4519,39 @@
                    is_pure_virtual=True, visibility='protected', is_virtual=True)
     return
 
+def register_Ns3IntegerValue_methods(root_module, cls):
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue() [constructor]
+    cls.add_constructor([])
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue(ns3::IntegerValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::IntegerValue const &', 'arg0')])
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue(int64_t const & value) [constructor]
+    cls.add_constructor([param('int64_t const &', 'value')])
+    ## integer.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::IntegerValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## integer.h (module 'core'): bool ns3::IntegerValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## integer.h (module 'core'): int64_t ns3::IntegerValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## integer.h (module 'core'): std::string ns3::IntegerValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## integer.h (module 'core'): void ns3::IntegerValue::Set(int64_t const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('int64_t const &', 'value')])
+    return
+
 def register_Ns3Ipv4AddressChecker_methods(root_module, cls):
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker::Ipv4AddressChecker() [constructor]
     cls.add_constructor([])
@@ -4723,11 +5133,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'd')], 
                    is_virtual=True)
-    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::Ptr<ns3::NetDevice> ns3::LrWpanPhy::GetDevice() [member function]
+    ## lr-wpan-phy.h (module 'lr-wpan'): ns3::Ptr<ns3::NetDevice> ns3::LrWpanPhy::GetDevice() const [member function]
     cls.add_method('GetDevice', 
                    'ns3::Ptr< ns3::NetDevice >', 
                    [], 
-                   is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## lr-wpan-phy.h (module 'lr-wpan'): void ns3::LrWpanPhy::SetAntenna(ns3::Ptr<ns3::AntennaModel> a) [member function]
     cls.add_method('SetAntenna', 
                    'void', 
@@ -4899,6 +5309,46 @@
                    [param('ns3::Mac16Address const &', 'value')])
     return
 
+def register_Ns3Mac48AddressChecker_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker(ns3::Mac48AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac48AddressValue_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressValue const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'value')])
+    ## mac48-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac48AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## mac48-address.h (module 'network'): ns3::Mac48Address ns3::Mac48AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): std::string ns3::Mac48AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48AddressValue::Set(ns3::Mac48Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac48Address const &', 'value')])
+    return
+
 def register_Ns3Mac64AddressChecker_methods(root_module, cls):
     ## mac64-address.h (module 'network'): ns3::Mac64AddressChecker::Mac64AddressChecker() [constructor]
     cls.add_constructor([])
@@ -5509,6 +5959,39 @@
                    [param('ns3::TypeId const &', 'value')])
     return
 
+def register_Ns3UintegerValue_methods(root_module, cls):
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue() [constructor]
+    cls.add_constructor([])
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue(ns3::UintegerValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::UintegerValue const &', 'arg0')])
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue(uint64_t const & value) [constructor]
+    cls.add_constructor([param('uint64_t const &', 'value')])
+    ## uinteger.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::UintegerValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## uinteger.h (module 'core'): bool ns3::UintegerValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## uinteger.h (module 'core'): uint64_t ns3::UintegerValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## uinteger.h (module 'core'): std::string ns3::UintegerValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## uinteger.h (module 'core'): void ns3::UintegerValue::Set(uint64_t const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('uint64_t const &', 'value')])
+    return
+
 def register_Ns3AddressChecker_methods(root_module, cls):
     ## address.h (module 'network'): ns3::AddressChecker::AddressChecker() [constructor]
     cls.add_constructor([])
@@ -5839,6 +6322,8 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
+    register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -5851,6 +6336,12 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
+def register_functions_ns3_internal(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.23/src/lr-wpan/model/lr-wpan-mac.cc ns-3.24/src/lr-wpan/model/lr-wpan-mac.cc
--- ns-3.23/src/lr-wpan/model/lr-wpan-mac.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/lr-wpan/model/lr-wpan-mac.cc	2015-09-15 11:18:44.000000000 -0700
@@ -111,6 +111,10 @@
                      "packet sniffer attached to the device",
                      MakeTraceSourceAccessor (&LrWpanMac::m_promiscSnifferTrace),
                      "ns3::Packet::TracedCallback")
+    .AddTraceSource ("MacStateValue",
+                     "The state of LrWpan Mac",
+                     MakeTraceSourceAccessor (&LrWpanMac::m_lrWpanMacState),
+                     "ns3::TracedValueCallback::LrWpanMacState")
     .AddTraceSource ("MacState",
                      "The state of LrWpan Mac",
                      MakeTraceSourceAccessor (&LrWpanMac::m_macStateLogger),
diff -Naur ns-3.23/src/lr-wpan/model/lr-wpan-mac.h ns-3.24/src/lr-wpan/model/lr-wpan-mac.h
--- ns-3.23/src/lr-wpan/model/lr-wpan-mac.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/lr-wpan/model/lr-wpan-mac.h	2015-09-15 11:18:44.000000000 -0700
@@ -26,6 +26,7 @@
 
 #include <ns3/object.h>
 #include <ns3/traced-callback.h>
+#include <ns3/traced-value.h>
 #include <ns3/mac16-address.h>
 #include <ns3/mac64-address.h>
 #include <ns3/sequence-number.h>
@@ -74,6 +75,20 @@
   SET_PHY_TX_ON          //!< SET_PHY_TX_ON
 } LrWpanMacState;
 
+namespace TracedValueCallback {
+
+/**
+ * \ingroup lr-wpan
+ * TracedValue callback signature for LrWpanMacState.
+ *
+ * \param [in] oldValue original value of the traced variable
+ * \param [in] newValue new value of the traced variable
+ */
+  typedef void (* LrWpanMacState)(LrWpanMacState oldValue,
+                                  LrWpanMacState newValue);
+
+}  // namespace TracedValueCallback
+
 /**
  * \ingroup lr-wpan
  *
@@ -526,17 +541,19 @@
    * \param [in] backoffs The number of CSMA backoffs.
    */
   typedef void (* SentTracedCallback)
-    (const Ptr<const Packet> packet, const uint8_t retries,
-     const uint8_t backoffs);
+    (Ptr<const Packet> packet, uint8_t retries, uint8_t backoffs);
 
   /**
    * TracedCallback signature for LrWpanMacState change events.
    *
    * \param [in] oldValue The original state value.
    * \param [in] newValue The new state value.
+   * \deprecated The LrWpanMacState is now accessible as the
+   * TracedValue \c MacStateValue. The \c MacState TracedCallback will
+   * be removed in a future release.
    */
   typedef void (* StateTracedCallback)
-    (const LrWpanMacState oldState, const LrWpanMacState newState);
+    (LrWpanMacState oldState, LrWpanMacState newState);
   
 protected:
   // Inherited from Object.
@@ -717,7 +734,9 @@
    * A trace source that fires when the LrWpanMac changes states.
    * Parameters are the old mac state and the new mac state.
    *
-   * \todo This should be a TracedValue
+   * \deprecated This TracedCallback is deprecated and will be
+   * removed in a future release,  Instead, use the \c MacStateValue
+   * TracedValue.
    */
   TracedCallback<LrWpanMacState, LrWpanMacState> m_macStateLogger;
 
@@ -747,7 +766,7 @@
   /**
    * The current state of the MAC layer.
    */
-  LrWpanMacState m_lrWpanMacState;
+  TracedValue<LrWpanMacState> m_lrWpanMacState;
 
   /**
    * The current association status of the MAC layer.
diff -Naur ns-3.23/src/lr-wpan/model/lr-wpan-net-device.cc ns-3.24/src/lr-wpan/model/lr-wpan-net-device.cc
--- ns-3.23/src/lr-wpan/model/lr-wpan-net-device.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/lr-wpan/model/lr-wpan-net-device.cc	2015-09-15 11:18:44.000000000 -0700
@@ -128,7 +128,12 @@
   m_mac->SetMcpsDataIndicationCallback (MakeCallback (&LrWpanNetDevice::McpsDataIndication, this));
   m_csmaca->SetMac (m_mac);
 
-  m_phy->SetMobility (m_node->GetObject<MobilityModel> ());
+  Ptr<MobilityModel> mobility = m_node->GetObject<MobilityModel> ();
+  if (!mobility)
+    {
+      NS_LOG_WARN ("LrWpanNetDevice: no Mobility found on the node, probably it's not a good idea.");
+    }
+  m_phy->SetMobility (mobility);
   Ptr<LrWpanErrorModel> model = CreateObject<LrWpanErrorModel> ();
   m_phy->SetErrorModel (model);
   m_phy->SetDevice (this);
diff -Naur ns-3.23/src/lr-wpan/model/lr-wpan-phy.cc ns-3.24/src/lr-wpan/model/lr-wpan-phy.cc
--- ns-3.23/src/lr-wpan/model/lr-wpan-phy.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/lr-wpan/model/lr-wpan-phy.cc	2015-09-15 11:18:44.000000000 -0700
@@ -74,9 +74,13 @@
 LrWpanPhy::GetTypeId (void)
 {
   static TypeId tid = TypeId ("ns3::LrWpanPhy")
-    .SetParent<Object> ()
+    .SetParent<SpectrumPhy> ()
     .SetGroupName ("LrWpan")
     .AddConstructor<LrWpanPhy> ()
+    .AddTraceSource ("TrxStateValue",
+                     "The state of the transceiver",
+                     MakeTraceSourceAccessor (&LrWpanPhy::m_trxState),
+                     "ns3::TracedValueCallback::LrWpanPhyEnumeration")
     .AddTraceSource ("TrxState",
                      "The state of the transceiver",
                      MakeTraceSourceAccessor (&LrWpanPhy::m_trxStateLogger),
@@ -106,7 +110,7 @@
                      "completely received from the channel medium "
                      "by the device",
                      MakeTraceSourceAccessor (&LrWpanPhy::m_phyRxEndTrace),
-                     "ns3::LrWpanPhy::RxEndTracedCallback")
+                     "ns3::Packet::SinrTracedCallback")
     .AddTraceSource ("PhyRxDrop",
                      "Trace source indicating a packet has been "
                      "dropped by the device during reception",
@@ -194,7 +198,7 @@
 }
 
 Ptr<NetDevice>
-LrWpanPhy::GetDevice (void)
+LrWpanPhy::GetDevice (void) const
 {
   NS_LOG_FUNCTION (this);
   return m_device;
diff -Naur ns-3.23/src/lr-wpan/model/lr-wpan-phy.h ns-3.24/src/lr-wpan/model/lr-wpan-phy.h
--- ns-3.23/src/lr-wpan/model/lr-wpan-phy.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/lr-wpan/model/lr-wpan-phy.h	2015-09-15 11:18:44.000000000 -0700
@@ -26,6 +26,7 @@
 
 #include <ns3/spectrum-phy.h>
 #include <ns3/traced-callback.h>
+#include <ns3/traced-value.h>
 #include <ns3/event-id.h>
 
 namespace ns3 {
@@ -118,6 +119,19 @@
   IEEE_802_15_4_PHY_UNSPECIFIED = 0xc // all cases not covered by ieee802.15.4
 } LrWpanPhyEnumeration;
 
+namespace TracedValueCallback
+{
+/**
+ * \ingroup lr-wpan
+ * TracedValue callback signature for LrWpanPhyEnumeration.
+ *
+ * \param [in] oldValue original value of the traced variable
+ * \param [in] newValue new value of the traced variable
+ */
+  typedef void (* LrWpanPhyEnumeration)(LrWpanPhyEnumeration oldValue,
+                                        LrWpanPhyEnumeration newValue);
+}  // namespace TracedValueCallback
+
 /**
  * \ingroup lr-wpan
  *
@@ -272,7 +286,7 @@
    */
   Ptr<SpectrumChannel> GetChannel (void);
   void SetDevice (Ptr<NetDevice> d);
-  Ptr<NetDevice> GetDevice (void);
+  Ptr<NetDevice> GetDevice (void) const;
 
   /**
    * Set the attached antenna.
@@ -468,20 +482,13 @@
    * \param [in] time The time of the state change.
    * \param [in] oldState The old state.
    * \param [in] newState The new state.
+   * \deprecated The LrWpanPhyEnumeration state is now accessible as the
+   * TracedValue \c TrxStateValue.  The \c TrxState TracedCallback will
+   * be removed in a future release.
    */
   typedef void (* StateTracedCallback)
-    (const Time time,
-     const LrWpanPhyEnumeration oldState, const LrWpanPhyEnumeration newState);
+    (Time time, LrWpanPhyEnumeration oldState, LrWpanPhyEnumeration newState);
 
-  /**
-   * TracedCallback signature for end receive events.
-   *
-   * \param [in] packet The packet.
-   * \param [in] sinr The received SINR.
-   */
-  typedef void (* RxEndTracedCallback)
-    (const Ptr<const Packet> packet, const double sinr);
-    
 protected:
   /**
    * The data and symbol rates for the different PHY options.
@@ -659,6 +666,9 @@
    * The trace source fired when the phy layer changes the transceiver state.
    *
    * \see class CallBackTraceSource
+   * \deprecated The LrWpanPhyEnumeration state is now accessible as the
+   * TracedValue \c TrxStateValue.  This TracedCallback will
+   * be removed in a future release.
    */
   TracedCallback<Time, LrWpanPhyEnumeration, LrWpanPhyEnumeration> m_trxStateLogger;
 
@@ -706,7 +716,7 @@
   /**
    * The current transceiver state.
    */
-  LrWpanPhyEnumeration m_trxState;
+  TracedValue<LrWpanPhyEnumeration> m_trxState;
 
   /**
    * The next pending state to applied after the current action of the PHY is
diff -Naur ns-3.23/src/lte/bindings/modulegen__gcc_ILP32.py ns-3.24/src/lte/bindings/modulegen__gcc_ILP32.py
--- ns-3.23/src/lte/bindings/modulegen__gcc_ILP32.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/lte/bindings/modulegen__gcc_ILP32.py	2015-09-15 11:18:44.000000000 -0700
@@ -1515,6 +1515,12 @@
     register_types_ns3_Hash(nested_module)
     
     
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
+    
     ## Register a nested module for the namespace internal
     
     nested_module = module.add_cpp_namespace('internal')
@@ -1563,6 +1569,37 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *', u'ns3::TracedValueCallback::Double')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) **', u'ns3::TracedValueCallback::Double*')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *&', u'ns3::TracedValueCallback::Double&')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *', u'ns3::TracedValueCallback::Int8')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) **', u'ns3::TracedValueCallback::Int8*')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *&', u'ns3::TracedValueCallback::Int8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *', u'ns3::TracedValueCallback::Uint8')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) **', u'ns3::TracedValueCallback::Uint8*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *&', u'ns3::TracedValueCallback::Uint8&')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *', u'ns3::TracedValueCallback::Int32')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) **', u'ns3::TracedValueCallback::Int32*')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *&', u'ns3::TracedValueCallback::Int32&')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *', u'ns3::TracedValueCallback::Bool')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) **', u'ns3::TracedValueCallback::Bool*')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *&', u'ns3::TracedValueCallback::Bool&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *', u'ns3::TracedValueCallback::Uint16')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) **', u'ns3::TracedValueCallback::Uint16*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *&', u'ns3::TracedValueCallback::Uint16&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *', u'ns3::TracedValueCallback::Uint32')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) **', u'ns3::TracedValueCallback::Uint32*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *&', u'ns3::TracedValueCallback::Uint32&')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *', u'ns3::TracedValueCallback::Int16')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) **', u'ns3::TracedValueCallback::Int16*')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *&', u'ns3::TracedValueCallback::Int16&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_types_ns3_internal(module):
     root_module = module.get_root()
     
@@ -2280,17 +2317,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -2312,11 +2349,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -2326,16 +2358,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -2646,14 +2668,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -2714,11 +2740,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CqasFlowPerf_t_methods(root_module, cls):
@@ -7873,7 +7894,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -8220,10 +8241,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -8615,6 +8636,11 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetParent() [member function]
+    cls.add_method('SetParent', 
+                   'ns3::TypeId', 
+                   [], 
+                   template_parameters=['ns3::Object'])
     ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
     cls.add_method('SetSize', 
                    'ns3::TypeId', 
@@ -11140,6 +11166,11 @@
     cls.add_method('EndRx', 
                    'bool', 
                    [])
+    ## spectrum-interference.h (module 'spectrum'): static ns3::TypeId ns3::SpectrumInterference::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## spectrum-interference.h (module 'spectrum'): void ns3::SpectrumInterference::SetErrorModel(ns3::Ptr<ns3::SpectrumErrorModel> e) [member function]
     cls.add_method('SetErrorModel', 
                    'void', 
@@ -11202,11 +11233,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'd')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## spectrum-phy.h (module 'spectrum'): ns3::Ptr<ns3::NetDevice> ns3::SpectrumPhy::GetDevice() [member function]
+    ## spectrum-phy.h (module 'spectrum'): ns3::Ptr<ns3::NetDevice> ns3::SpectrumPhy::GetDevice() const [member function]
     cls.add_method('GetDevice', 
                    'ns3::Ptr< ns3::NetDevice >', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## spectrum-phy.h (module 'spectrum'): void ns3::SpectrumPhy::SetMobility(ns3::Ptr<ns3::MobilityModel> m) [member function]
     cls.add_method('SetMobility', 
                    'void', 
@@ -12516,11 +12547,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -12639,6 +12680,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## data-calculator.h (module 'stats'): static ns3::TypeId ns3::DataCalculator::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Output(ns3::DataOutputCallback & callback) const [member function]
     cls.add_method('Output', 
                    'void', 
@@ -12679,6 +12725,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## data-output-interface.h (module 'stats'): static ns3::TypeId ns3::DataOutputInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## data-output-interface.h (module 'stats'): void ns3::DataOutputInterface::Output(ns3::DataCollector & dc) [member function]
     cls.add_method('Output', 
                    'void', 
@@ -12814,10 +12865,10 @@
                    'double', 
                    [], 
                    is_virtual=True)
-    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
     cls.add_method('Interpolate', 
                    'double', 
-                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
                    visibility='private', is_virtual=True)
     ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
     cls.add_method('Validate', 
@@ -16539,10 +16590,11 @@
     cls.add_method('GetControlMessages', 
                    'std::list< ns3::Ptr< ns3::LteControlMessage > >', 
                    [])
-    ## lte-phy.h (module 'lte'): ns3::Ptr<ns3::LteNetDevice> ns3::LtePhy::GetDevice() [member function]
+    ## lte-phy.h (module 'lte'): ns3::Ptr<ns3::LteNetDevice> ns3::LtePhy::GetDevice() const [member function]
     cls.add_method('GetDevice', 
                    'ns3::Ptr< ns3::LteNetDevice >', 
-                   [])
+                   [], 
+                   is_const=True)
     ## lte-phy.h (module 'lte'): ns3::Ptr<ns3::LteSpectrumPhy> ns3::LtePhy::GetDownlinkSpectrumPhy() [member function]
     cls.add_method('GetDownlinkSpectrumPhy', 
                    'ns3::Ptr< ns3::LteSpectrumPhy >', 
@@ -16895,11 +16947,11 @@
                    'ns3::Ptr< ns3::MobilityModel >', 
                    [], 
                    is_virtual=True)
-    ## lte-spectrum-phy.h (module 'lte'): ns3::Ptr<ns3::NetDevice> ns3::LteSpectrumPhy::GetDevice() [member function]
+    ## lte-spectrum-phy.h (module 'lte'): ns3::Ptr<ns3::NetDevice> ns3::LteSpectrumPhy::GetDevice() const [member function]
     cls.add_method('GetDevice', 
                    'ns3::Ptr< ns3::NetDevice >', 
                    [], 
-                   is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## lte-spectrum-phy.h (module 'lte'): ns3::Ptr<ns3::SpectrumModel const> ns3::LteSpectrumPhy::GetRxSpectrumModel() const [member function]
     cls.add_method('GetRxSpectrumModel', 
                    'ns3::Ptr< ns3::SpectrumModel const >', 
@@ -19045,11 +19097,11 @@
                    'ns3::Ptr< ns3::MobilityModel >', 
                    [], 
                    is_virtual=True)
-    ## rem-spectrum-phy.h (module 'lte'): ns3::Ptr<ns3::NetDevice> ns3::RemSpectrumPhy::GetDevice() [member function]
+    ## rem-spectrum-phy.h (module 'lte'): ns3::Ptr<ns3::NetDevice> ns3::RemSpectrumPhy::GetDevice() const [member function]
     cls.add_method('GetDevice', 
                    'ns3::Ptr< ns3::NetDevice >', 
                    [], 
-                   is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## rem-spectrum-phy.h (module 'lte'): ns3::Ptr<ns3::SpectrumModel const> ns3::RemSpectrumPhy::GetRxSpectrumModel() const [member function]
     cls.add_method('GetRxSpectrumModel', 
                    'ns3::Ptr< ns3::SpectrumModel const >', 
@@ -21824,6 +21876,7 @@
     register_functions_ns3_Config(module.get_submodule('Config'), root_module)
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
@@ -21840,6 +21893,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def register_functions_ns3_internal(module, root_module):
     return
 
diff -Naur ns-3.23/src/lte/bindings/modulegen__gcc_LP64.py ns-3.24/src/lte/bindings/modulegen__gcc_LP64.py
--- ns-3.23/src/lte/bindings/modulegen__gcc_LP64.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/lte/bindings/modulegen__gcc_LP64.py	2015-09-15 11:18:44.000000000 -0700
@@ -1515,6 +1515,12 @@
     register_types_ns3_Hash(nested_module)
     
     
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
+    
     ## Register a nested module for the namespace internal
     
     nested_module = module.add_cpp_namespace('internal')
@@ -1563,6 +1569,37 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *', u'ns3::TracedValueCallback::Double')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) **', u'ns3::TracedValueCallback::Double*')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *&', u'ns3::TracedValueCallback::Double&')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *', u'ns3::TracedValueCallback::Int8')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) **', u'ns3::TracedValueCallback::Int8*')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *&', u'ns3::TracedValueCallback::Int8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *', u'ns3::TracedValueCallback::Uint8')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) **', u'ns3::TracedValueCallback::Uint8*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *&', u'ns3::TracedValueCallback::Uint8&')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *', u'ns3::TracedValueCallback::Int32')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) **', u'ns3::TracedValueCallback::Int32*')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *&', u'ns3::TracedValueCallback::Int32&')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *', u'ns3::TracedValueCallback::Bool')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) **', u'ns3::TracedValueCallback::Bool*')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *&', u'ns3::TracedValueCallback::Bool&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *', u'ns3::TracedValueCallback::Uint16')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) **', u'ns3::TracedValueCallback::Uint16*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *&', u'ns3::TracedValueCallback::Uint16&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *', u'ns3::TracedValueCallback::Uint32')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) **', u'ns3::TracedValueCallback::Uint32*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *&', u'ns3::TracedValueCallback::Uint32&')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *', u'ns3::TracedValueCallback::Int16')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) **', u'ns3::TracedValueCallback::Int16*')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *&', u'ns3::TracedValueCallback::Int16&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_types_ns3_internal(module):
     root_module = module.get_root()
     
@@ -2280,17 +2317,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -2312,11 +2349,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -2326,16 +2358,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -2646,14 +2668,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -2714,11 +2740,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CqasFlowPerf_t_methods(root_module, cls):
@@ -7873,7 +7894,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -8220,10 +8241,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -8615,6 +8636,11 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetParent() [member function]
+    cls.add_method('SetParent', 
+                   'ns3::TypeId', 
+                   [], 
+                   template_parameters=['ns3::Object'])
     ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
     cls.add_method('SetSize', 
                    'ns3::TypeId', 
@@ -11140,6 +11166,11 @@
     cls.add_method('EndRx', 
                    'bool', 
                    [])
+    ## spectrum-interference.h (module 'spectrum'): static ns3::TypeId ns3::SpectrumInterference::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## spectrum-interference.h (module 'spectrum'): void ns3::SpectrumInterference::SetErrorModel(ns3::Ptr<ns3::SpectrumErrorModel> e) [member function]
     cls.add_method('SetErrorModel', 
                    'void', 
@@ -11202,11 +11233,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'd')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## spectrum-phy.h (module 'spectrum'): ns3::Ptr<ns3::NetDevice> ns3::SpectrumPhy::GetDevice() [member function]
+    ## spectrum-phy.h (module 'spectrum'): ns3::Ptr<ns3::NetDevice> ns3::SpectrumPhy::GetDevice() const [member function]
     cls.add_method('GetDevice', 
                    'ns3::Ptr< ns3::NetDevice >', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## spectrum-phy.h (module 'spectrum'): void ns3::SpectrumPhy::SetMobility(ns3::Ptr<ns3::MobilityModel> m) [member function]
     cls.add_method('SetMobility', 
                    'void', 
@@ -12516,11 +12547,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -12639,6 +12680,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## data-calculator.h (module 'stats'): static ns3::TypeId ns3::DataCalculator::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Output(ns3::DataOutputCallback & callback) const [member function]
     cls.add_method('Output', 
                    'void', 
@@ -12679,6 +12725,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## data-output-interface.h (module 'stats'): static ns3::TypeId ns3::DataOutputInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## data-output-interface.h (module 'stats'): void ns3::DataOutputInterface::Output(ns3::DataCollector & dc) [member function]
     cls.add_method('Output', 
                    'void', 
@@ -12814,10 +12865,10 @@
                    'double', 
                    [], 
                    is_virtual=True)
-    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
     cls.add_method('Interpolate', 
                    'double', 
-                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
                    visibility='private', is_virtual=True)
     ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
     cls.add_method('Validate', 
@@ -16539,10 +16590,11 @@
     cls.add_method('GetControlMessages', 
                    'std::list< ns3::Ptr< ns3::LteControlMessage > >', 
                    [])
-    ## lte-phy.h (module 'lte'): ns3::Ptr<ns3::LteNetDevice> ns3::LtePhy::GetDevice() [member function]
+    ## lte-phy.h (module 'lte'): ns3::Ptr<ns3::LteNetDevice> ns3::LtePhy::GetDevice() const [member function]
     cls.add_method('GetDevice', 
                    'ns3::Ptr< ns3::LteNetDevice >', 
-                   [])
+                   [], 
+                   is_const=True)
     ## lte-phy.h (module 'lte'): ns3::Ptr<ns3::LteSpectrumPhy> ns3::LtePhy::GetDownlinkSpectrumPhy() [member function]
     cls.add_method('GetDownlinkSpectrumPhy', 
                    'ns3::Ptr< ns3::LteSpectrumPhy >', 
@@ -16895,11 +16947,11 @@
                    'ns3::Ptr< ns3::MobilityModel >', 
                    [], 
                    is_virtual=True)
-    ## lte-spectrum-phy.h (module 'lte'): ns3::Ptr<ns3::NetDevice> ns3::LteSpectrumPhy::GetDevice() [member function]
+    ## lte-spectrum-phy.h (module 'lte'): ns3::Ptr<ns3::NetDevice> ns3::LteSpectrumPhy::GetDevice() const [member function]
     cls.add_method('GetDevice', 
                    'ns3::Ptr< ns3::NetDevice >', 
                    [], 
-                   is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## lte-spectrum-phy.h (module 'lte'): ns3::Ptr<ns3::SpectrumModel const> ns3::LteSpectrumPhy::GetRxSpectrumModel() const [member function]
     cls.add_method('GetRxSpectrumModel', 
                    'ns3::Ptr< ns3::SpectrumModel const >', 
@@ -19045,11 +19097,11 @@
                    'ns3::Ptr< ns3::MobilityModel >', 
                    [], 
                    is_virtual=True)
-    ## rem-spectrum-phy.h (module 'lte'): ns3::Ptr<ns3::NetDevice> ns3::RemSpectrumPhy::GetDevice() [member function]
+    ## rem-spectrum-phy.h (module 'lte'): ns3::Ptr<ns3::NetDevice> ns3::RemSpectrumPhy::GetDevice() const [member function]
     cls.add_method('GetDevice', 
                    'ns3::Ptr< ns3::NetDevice >', 
                    [], 
-                   is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## rem-spectrum-phy.h (module 'lte'): ns3::Ptr<ns3::SpectrumModel const> ns3::RemSpectrumPhy::GetRxSpectrumModel() const [member function]
     cls.add_method('GetRxSpectrumModel', 
                    'ns3::Ptr< ns3::SpectrumModel const >', 
@@ -21824,6 +21876,7 @@
     register_functions_ns3_Config(module.get_submodule('Config'), root_module)
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
@@ -21840,6 +21893,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def register_functions_ns3_internal(module, root_module):
     return
 
diff -Naur ns-3.23/src/lte/examples/lena-deactivate-bearer.cc ns-3.24/src/lte/examples/lena-deactivate-bearer.cc
--- ns-3.23/src/lte/examples/lena-deactivate-bearer.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/lte/examples/lena-deactivate-bearer.cc	2015-09-15 11:18:44.000000000 -0700
@@ -1,238 +1,238 @@
-/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Gaurav Sathe <gaurav.sathe@tcs.com>
- */
-
-#include "ns3/lte-helper.h"
-#include "ns3/epc-helper.h"
-#include "ns3/core-module.h"
-#include "ns3/network-module.h"
-#include "ns3/ipv4-global-routing-helper.h"
-#include "ns3/internet-module.h"
-#include "ns3/mobility-module.h"
-#include "ns3/lte-module.h"
-#include "ns3/applications-module.h"
-#include "ns3/point-to-point-helper.h"
-#include "ns3/config-store.h"
-//#include "ns3/gtk-config-store.h"
-
-using namespace ns3;
-
-/**
- * Sample simulation script for LTE+EPC. It instantiates one eNodeB,
- * attaches three UE to eNodeB starts a flow for each UE to  and from a remote host.
- * It also instantiates one dedicated bearer per UE
- */
-NS_LOG_COMPONENT_DEFINE ("BearerDeactivateExample");
-int
-main (int argc, char *argv[])
-{
-
-  uint16_t numberOfNodes = 1;
-  uint16_t numberOfUeNodes = 3;
-  double simTime = 1.1;
-  double distance = 60.0;
-  double interPacketInterval = 100;
-
-  // Command line arguments
-  CommandLine cmd;
-  cmd.AddValue ("numberOfNodes", "Number of eNodeBs + UE pairs", numberOfNodes);
-  cmd.AddValue ("simTime", "Total duration of the simulation [s])", simTime);
-  cmd.AddValue ("distance", "Distance between eNBs [m]", distance);
-  cmd.AddValue ("interPacketInterval", "Inter packet interval [ms])", interPacketInterval);
-  cmd.Parse (argc, argv);
-
-  Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
-  Ptr<PointToPointEpcHelper>  epcHelper = CreateObject<PointToPointEpcHelper> ();
-  lteHelper->SetEpcHelper (epcHelper);
-
-  ConfigStore inputConfig;
-  inputConfig.ConfigureDefaults ();
-
-  // parse again so you can override default values from the command line
-  cmd.Parse (argc, argv);
-
-  Ptr<Node> pgw = epcHelper->GetPgwNode ();
-
-  // Enable Logging
-  LogLevel logLevel = (LogLevel)(LOG_PREFIX_FUNC | LOG_PREFIX_TIME | LOG_LEVEL_ALL);
-
-  LogComponentEnable ("BearerDeactivateExample", LOG_LEVEL_ALL);
-  LogComponentEnable ("LteHelper", logLevel);
-  LogComponentEnable ("EpcHelper", logLevel);
-  LogComponentEnable ("EpcEnbApplication", logLevel);
-  LogComponentEnable ("EpcSgwPgwApplication", logLevel);
-  LogComponentEnable ("EpcMme", logLevel);
-  LogComponentEnable ("LteEnbRrc", logLevel);
-
-
-  // Create a single RemoteHost
-  NodeContainer remoteHostContainer;
-  remoteHostContainer.Create (1);
-  Ptr<Node> remoteHost = remoteHostContainer.Get (0);
-  InternetStackHelper internet;
-  internet.Install (remoteHostContainer);
-
-  // Create the Internet
-  PointToPointHelper p2ph;
-  p2ph.SetDeviceAttribute ("DataRate", DataRateValue (DataRate ("100Gb/s")));
-  p2ph.SetDeviceAttribute ("Mtu", UintegerValue (1500));
-  p2ph.SetChannelAttribute ("Delay", TimeValue (Seconds (0.010)));
-  NetDeviceContainer internetDevices = p2ph.Install (pgw, remoteHost);
-  Ipv4AddressHelper ipv4h;
-  ipv4h.SetBase ("1.0.0.0", "255.0.0.0");
-  Ipv4InterfaceContainer internetIpIfaces = ipv4h.Assign (internetDevices);
-  // interface 0 is localhost, 1 is the p2p device
-  Ipv4Address remoteHostAddr = internetIpIfaces.GetAddress (1);
-
-  Ipv4StaticRoutingHelper ipv4RoutingHelper;
-  Ptr<Ipv4StaticRouting> remoteHostStaticRouting = ipv4RoutingHelper.GetStaticRouting (remoteHost->GetObject<Ipv4> ());
-  remoteHostStaticRouting->AddNetworkRouteTo (Ipv4Address ("7.0.0.0"), Ipv4Mask ("255.0.0.0"), 1);
-
-  NodeContainer ueNodes;
-  NodeContainer enbNodes;
-  enbNodes.Create (numberOfNodes);
-  ueNodes.Create (numberOfUeNodes);
-
-  // Install Mobility Model
-  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
-  for (uint16_t i = 0; i < numberOfNodes; i++)
-    {
-      positionAlloc->Add (Vector (distance * i, 0, 0));
-    }
-  MobilityHelper mobility;
-  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
-  mobility.SetPositionAllocator (positionAlloc);
-  mobility.Install (enbNodes);
-  mobility.Install (ueNodes);
-
-  // Install LTE Devices to the nodes
-  NetDeviceContainer enbLteDevs = lteHelper->InstallEnbDevice (enbNodes);
-  NetDeviceContainer ueLteDevs = lteHelper->InstallUeDevice (ueNodes);
-
-  // Install the IP stack on the UEs
-  internet.Install (ueNodes);
-  Ipv4InterfaceContainer ueIpIface;
-  ueIpIface = epcHelper->AssignUeIpv4Address (NetDeviceContainer (ueLteDevs));
-  // Assign IP address to UEs, and install applications
-  for (uint32_t u = 0; u < ueNodes.GetN (); ++u)
-    {
-      Ptr<Node> ueNode = ueNodes.Get (u);
-      // Set the default gateway for the UE
-      Ptr<Ipv4StaticRouting> ueStaticRouting = ipv4RoutingHelper.GetStaticRouting (ueNode->GetObject<Ipv4> ());
-      ueStaticRouting->SetDefaultRoute (epcHelper->GetUeDefaultGatewayAddress (), 1);
-    }
-
-  // Attach a UE to a eNB
-  lteHelper->Attach (ueLteDevs, enbLteDevs.Get (0));
-
-  // Activate an EPS bearer on all UEs
-
-  for (uint32_t u = 0; u < ueNodes.GetN (); ++u)
-    {
-      Ptr<NetDevice> ueDevice = ueLteDevs.Get (u);
-      GbrQosInformation qos;
-      qos.gbrDl = 132;  // bit/s, considering IP, UDP, RLC, PDCP header size
-      qos.gbrUl = 132;
-      qos.mbrDl = qos.gbrDl;
-      qos.mbrUl = qos.gbrUl;
-
-      enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
-      EpsBearer bearer (q, qos);
-      bearer.arp.priorityLevel = 15 - (u + 1);
-      bearer.arp.preemptionCapability = true;
-      bearer.arp.preemptionVulnerability = true;
-      lteHelper->ActivateDedicatedEpsBearer (ueDevice, bearer, EpcTft::Default ());
-    }
-
-
-  // Install and start applications on UEs and remote host
-  uint16_t dlPort = 1234;
-  uint16_t ulPort = 2000;
-  uint16_t otherPort = 3000;
-  ApplicationContainer clientApps;
-  ApplicationContainer serverApps;
-  for (uint32_t u = 0; u < ueNodes.GetN (); ++u)
-    {
-      ++ulPort;
-      ++otherPort;
-      PacketSinkHelper dlPacketSinkHelper ("ns3::UdpSocketFactory", InetSocketAddress (Ipv4Address::GetAny (), dlPort));
-      PacketSinkHelper ulPacketSinkHelper ("ns3::UdpSocketFactory", InetSocketAddress (Ipv4Address::GetAny (), ulPort));
-      PacketSinkHelper packetSinkHelper ("ns3::UdpSocketFactory", InetSocketAddress (Ipv4Address::GetAny (), otherPort));
-      serverApps.Add (dlPacketSinkHelper.Install (ueNodes.Get (u)));
-      serverApps.Add (ulPacketSinkHelper.Install (remoteHost));
-      serverApps.Add (packetSinkHelper.Install (ueNodes.Get (u)));
-
-      UdpClientHelper dlClient (ueIpIface.GetAddress (u), dlPort);
-      dlClient.SetAttribute ("Interval", TimeValue (MilliSeconds (interPacketInterval)));
-      dlClient.SetAttribute ("MaxPackets", UintegerValue (1000000));
-
-      UdpClientHelper ulClient (remoteHostAddr, ulPort);
-      ulClient.SetAttribute ("Interval", TimeValue (MilliSeconds (interPacketInterval)));
-      ulClient.SetAttribute ("MaxPackets", UintegerValue (1000000));
-
-      UdpClientHelper client (ueIpIface.GetAddress (u), otherPort);
-      client.SetAttribute ("Interval", TimeValue (MilliSeconds (interPacketInterval)));
-      client.SetAttribute ("MaxPackets", UintegerValue (1000000));
-
-      clientApps.Add (dlClient.Install (remoteHost));
-      clientApps.Add (ulClient.Install (ueNodes.Get (u)));
-      if (u + 1 < ueNodes.GetN ())
-        {
-          clientApps.Add (client.Install (ueNodes.Get (u + 1)));
-        }
-      else
-        {
-          clientApps.Add (client.Install (ueNodes.Get (0)));
-        }
-    }
-
-  serverApps.Start (Seconds (0.030));
-  clientApps.Start (Seconds (0.030));
-
-  double statsStartTime = 0.04; // need to allow for RRC connection establishment + SRS
-  double statsDuration = 1.0;
-
-  lteHelper->EnableRlcTraces ();
-  Ptr<RadioBearerStatsCalculator> rlcStats = lteHelper->GetRlcStats ();
-  rlcStats->SetAttribute ("StartTime", TimeValue (Seconds (statsStartTime)));
-  rlcStats->SetAttribute ("EpochDuration", TimeValue (Seconds (statsDuration)));
-
-  //get ue device pointer for UE-ID 0 IMSI 1 and enb device pointer
-  Ptr<NetDevice> ueDevice = ueLteDevs.Get (0);
-  Ptr<NetDevice> enbDevice = enbLteDevs.Get (0);
-
-  /*
-   *   Instantiate De-activation using Simulator::Schedule() method which will initiate bearer de-activation after deActivateTime
-   *   Instantiate De-activation in sequence (Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3)
-   */
-  Time deActivateTime (Seconds (1.5));
-  Simulator::Schedule (deActivateTime, &LteHelper::DeActivateDedicatedEpsBearer, lteHelper, ueDevice, enbDevice, 2);
-
-  //stop simulation after 3 seconds
-  Simulator::Stop (Seconds (3.0));
-
-  Simulator::Run ();
-  /*GtkConfigStore config;
-  config.ConfigureAttributes();*/
-
-  Simulator::Destroy ();
-  return 0;
-
-}
-
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Gaurav Sathe <gaurav.sathe@tcs.com>
+ */
+
+#include "ns3/lte-helper.h"
+#include "ns3/epc-helper.h"
+#include "ns3/core-module.h"
+#include "ns3/network-module.h"
+#include "ns3/ipv4-global-routing-helper.h"
+#include "ns3/internet-module.h"
+#include "ns3/mobility-module.h"
+#include "ns3/lte-module.h"
+#include "ns3/applications-module.h"
+#include "ns3/point-to-point-helper.h"
+#include "ns3/config-store.h"
+//#include "ns3/gtk-config-store.h"
+
+using namespace ns3;
+
+/**
+ * Sample simulation script for LTE+EPC. It instantiates one eNodeB,
+ * attaches three UE to eNodeB starts a flow for each UE to  and from a remote host.
+ * It also instantiates one dedicated bearer per UE
+ */
+NS_LOG_COMPONENT_DEFINE ("BearerDeactivateExample");
+int
+main (int argc, char *argv[])
+{
+
+  uint16_t numberOfNodes = 1;
+  uint16_t numberOfUeNodes = 3;
+  double simTime = 1.1;
+  double distance = 60.0;
+  double interPacketInterval = 100;
+
+  // Command line arguments
+  CommandLine cmd;
+  cmd.AddValue ("numberOfNodes", "Number of eNodeBs + UE pairs", numberOfNodes);
+  cmd.AddValue ("simTime", "Total duration of the simulation [s])", simTime);
+  cmd.AddValue ("distance", "Distance between eNBs [m]", distance);
+  cmd.AddValue ("interPacketInterval", "Inter packet interval [ms])", interPacketInterval);
+  cmd.Parse (argc, argv);
+
+  Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
+  Ptr<PointToPointEpcHelper>  epcHelper = CreateObject<PointToPointEpcHelper> ();
+  lteHelper->SetEpcHelper (epcHelper);
+
+  ConfigStore inputConfig;
+  inputConfig.ConfigureDefaults ();
+
+  // parse again so you can override default values from the command line
+  cmd.Parse (argc, argv);
+
+  Ptr<Node> pgw = epcHelper->GetPgwNode ();
+
+  // Enable Logging
+  LogLevel logLevel = (LogLevel)(LOG_PREFIX_FUNC | LOG_PREFIX_TIME | LOG_LEVEL_ALL);
+
+  LogComponentEnable ("BearerDeactivateExample", LOG_LEVEL_ALL);
+  LogComponentEnable ("LteHelper", logLevel);
+  LogComponentEnable ("EpcHelper", logLevel);
+  LogComponentEnable ("EpcEnbApplication", logLevel);
+  LogComponentEnable ("EpcSgwPgwApplication", logLevel);
+  LogComponentEnable ("EpcMme", logLevel);
+  LogComponentEnable ("LteEnbRrc", logLevel);
+
+
+  // Create a single RemoteHost
+  NodeContainer remoteHostContainer;
+  remoteHostContainer.Create (1);
+  Ptr<Node> remoteHost = remoteHostContainer.Get (0);
+  InternetStackHelper internet;
+  internet.Install (remoteHostContainer);
+
+  // Create the Internet
+  PointToPointHelper p2ph;
+  p2ph.SetDeviceAttribute ("DataRate", DataRateValue (DataRate ("100Gb/s")));
+  p2ph.SetDeviceAttribute ("Mtu", UintegerValue (1500));
+  p2ph.SetChannelAttribute ("Delay", TimeValue (Seconds (0.010)));
+  NetDeviceContainer internetDevices = p2ph.Install (pgw, remoteHost);
+  Ipv4AddressHelper ipv4h;
+  ipv4h.SetBase ("1.0.0.0", "255.0.0.0");
+  Ipv4InterfaceContainer internetIpIfaces = ipv4h.Assign (internetDevices);
+  // interface 0 is localhost, 1 is the p2p device
+  Ipv4Address remoteHostAddr = internetIpIfaces.GetAddress (1);
+
+  Ipv4StaticRoutingHelper ipv4RoutingHelper;
+  Ptr<Ipv4StaticRouting> remoteHostStaticRouting = ipv4RoutingHelper.GetStaticRouting (remoteHost->GetObject<Ipv4> ());
+  remoteHostStaticRouting->AddNetworkRouteTo (Ipv4Address ("7.0.0.0"), Ipv4Mask ("255.0.0.0"), 1);
+
+  NodeContainer ueNodes;
+  NodeContainer enbNodes;
+  enbNodes.Create (numberOfNodes);
+  ueNodes.Create (numberOfUeNodes);
+
+  // Install Mobility Model
+  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
+  for (uint16_t i = 0; i < numberOfNodes; i++)
+    {
+      positionAlloc->Add (Vector (distance * i, 0, 0));
+    }
+  MobilityHelper mobility;
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+  mobility.SetPositionAllocator (positionAlloc);
+  mobility.Install (enbNodes);
+  mobility.Install (ueNodes);
+
+  // Install LTE Devices to the nodes
+  NetDeviceContainer enbLteDevs = lteHelper->InstallEnbDevice (enbNodes);
+  NetDeviceContainer ueLteDevs = lteHelper->InstallUeDevice (ueNodes);
+
+  // Install the IP stack on the UEs
+  internet.Install (ueNodes);
+  Ipv4InterfaceContainer ueIpIface;
+  ueIpIface = epcHelper->AssignUeIpv4Address (NetDeviceContainer (ueLteDevs));
+  // Assign IP address to UEs, and install applications
+  for (uint32_t u = 0; u < ueNodes.GetN (); ++u)
+    {
+      Ptr<Node> ueNode = ueNodes.Get (u);
+      // Set the default gateway for the UE
+      Ptr<Ipv4StaticRouting> ueStaticRouting = ipv4RoutingHelper.GetStaticRouting (ueNode->GetObject<Ipv4> ());
+      ueStaticRouting->SetDefaultRoute (epcHelper->GetUeDefaultGatewayAddress (), 1);
+    }
+
+  // Attach a UE to a eNB
+  lteHelper->Attach (ueLteDevs, enbLteDevs.Get (0));
+
+  // Activate an EPS bearer on all UEs
+
+  for (uint32_t u = 0; u < ueNodes.GetN (); ++u)
+    {
+      Ptr<NetDevice> ueDevice = ueLteDevs.Get (u);
+      GbrQosInformation qos;
+      qos.gbrDl = 132;  // bit/s, considering IP, UDP, RLC, PDCP header size
+      qos.gbrUl = 132;
+      qos.mbrDl = qos.gbrDl;
+      qos.mbrUl = qos.gbrUl;
+
+      enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
+      EpsBearer bearer (q, qos);
+      bearer.arp.priorityLevel = 15 - (u + 1);
+      bearer.arp.preemptionCapability = true;
+      bearer.arp.preemptionVulnerability = true;
+      lteHelper->ActivateDedicatedEpsBearer (ueDevice, bearer, EpcTft::Default ());
+    }
+
+
+  // Install and start applications on UEs and remote host
+  uint16_t dlPort = 1234;
+  uint16_t ulPort = 2000;
+  uint16_t otherPort = 3000;
+  ApplicationContainer clientApps;
+  ApplicationContainer serverApps;
+  for (uint32_t u = 0; u < ueNodes.GetN (); ++u)
+    {
+      ++ulPort;
+      ++otherPort;
+      PacketSinkHelper dlPacketSinkHelper ("ns3::UdpSocketFactory", InetSocketAddress (Ipv4Address::GetAny (), dlPort));
+      PacketSinkHelper ulPacketSinkHelper ("ns3::UdpSocketFactory", InetSocketAddress (Ipv4Address::GetAny (), ulPort));
+      PacketSinkHelper packetSinkHelper ("ns3::UdpSocketFactory", InetSocketAddress (Ipv4Address::GetAny (), otherPort));
+      serverApps.Add (dlPacketSinkHelper.Install (ueNodes.Get (u)));
+      serverApps.Add (ulPacketSinkHelper.Install (remoteHost));
+      serverApps.Add (packetSinkHelper.Install (ueNodes.Get (u)));
+
+      UdpClientHelper dlClient (ueIpIface.GetAddress (u), dlPort);
+      dlClient.SetAttribute ("Interval", TimeValue (MilliSeconds (interPacketInterval)));
+      dlClient.SetAttribute ("MaxPackets", UintegerValue (1000000));
+
+      UdpClientHelper ulClient (remoteHostAddr, ulPort);
+      ulClient.SetAttribute ("Interval", TimeValue (MilliSeconds (interPacketInterval)));
+      ulClient.SetAttribute ("MaxPackets", UintegerValue (1000000));
+
+      UdpClientHelper client (ueIpIface.GetAddress (u), otherPort);
+      client.SetAttribute ("Interval", TimeValue (MilliSeconds (interPacketInterval)));
+      client.SetAttribute ("MaxPackets", UintegerValue (1000000));
+
+      clientApps.Add (dlClient.Install (remoteHost));
+      clientApps.Add (ulClient.Install (ueNodes.Get (u)));
+      if (u + 1 < ueNodes.GetN ())
+        {
+          clientApps.Add (client.Install (ueNodes.Get (u + 1)));
+        }
+      else
+        {
+          clientApps.Add (client.Install (ueNodes.Get (0)));
+        }
+    }
+
+  serverApps.Start (Seconds (0.030));
+  clientApps.Start (Seconds (0.030));
+
+  double statsStartTime = 0.04; // need to allow for RRC connection establishment + SRS
+  double statsDuration = 1.0;
+
+  lteHelper->EnableRlcTraces ();
+  Ptr<RadioBearerStatsCalculator> rlcStats = lteHelper->GetRlcStats ();
+  rlcStats->SetAttribute ("StartTime", TimeValue (Seconds (statsStartTime)));
+  rlcStats->SetAttribute ("EpochDuration", TimeValue (Seconds (statsDuration)));
+
+  //get ue device pointer for UE-ID 0 IMSI 1 and enb device pointer
+  Ptr<NetDevice> ueDevice = ueLteDevs.Get (0);
+  Ptr<NetDevice> enbDevice = enbLteDevs.Get (0);
+
+  /*
+   *   Instantiate De-activation using Simulator::Schedule() method which will initiate bearer de-activation after deActivateTime
+   *   Instantiate De-activation in sequence (Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3)
+   */
+  Time deActivateTime (Seconds (1.5));
+  Simulator::Schedule (deActivateTime, &LteHelper::DeActivateDedicatedEpsBearer, lteHelper, ueDevice, enbDevice, 2);
+
+  //stop simulation after 3 seconds
+  Simulator::Stop (Seconds (3.0));
+
+  Simulator::Run ();
+  /*GtkConfigStore config;
+  config.ConfigureAttributes();*/
+
+  Simulator::Destroy ();
+  return 0;
+
+}
+
diff -Naur ns-3.23/src/lte/helper/radio-bearer-stats-connector.cc ns-3.24/src/lte/helper/radio-bearer-stats-connector.cc
--- ns-3.23/src/lte/helper/radio-bearer-stats-connector.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/lte/helper/radio-bearer-stats-connector.cc	2015-09-15 11:18:44.000000000 -0700
@@ -68,7 +68,7 @@
 DlTxPduCallback (Ptr<BoundCallbackArgument> arg, std::string path,
                  uint16_t rnti, uint8_t lcid, uint32_t packetSize)
 {
-  NS_LOG_LOGIC (path << rnti << (uint16_t)lcid << packetSize);
+  NS_LOG_FUNCTION (path << rnti << (uint16_t)lcid << packetSize);
   arg->stats->DlTxPdu (arg->cellId, arg->imsi, rnti, lcid, packetSize);
 }
 
@@ -85,7 +85,7 @@
 DlRxPduCallback (Ptr<BoundCallbackArgument> arg, std::string path,
                  uint16_t rnti, uint8_t lcid, uint32_t packetSize, uint64_t delay)
 {
-  NS_LOG_LOGIC (path << rnti << (uint16_t)lcid << packetSize << delay);
+  NS_LOG_FUNCTION (path << rnti << (uint16_t)lcid << packetSize << delay);
   arg->stats->DlRxPdu (arg->cellId, arg->imsi, rnti, lcid, packetSize, delay);
 }
 
@@ -101,7 +101,7 @@
 UlTxPduCallback (Ptr<BoundCallbackArgument> arg, std::string path,
                  uint16_t rnti, uint8_t lcid, uint32_t packetSize)
 {
-  NS_LOG_LOGIC (path << rnti << (uint16_t)lcid << packetSize);
+  NS_LOG_FUNCTION (path << rnti << (uint16_t)lcid << packetSize);
  
   arg->stats->UlTxPdu (arg->cellId, arg->imsi, rnti, lcid, packetSize);
 }
@@ -119,7 +119,7 @@
 UlRxPduCallback (Ptr<BoundCallbackArgument> arg, std::string path,
                  uint16_t rnti, uint8_t lcid, uint32_t packetSize, uint64_t delay)
 {
-  NS_LOG_LOGIC (path << rnti << (uint16_t)lcid << packetSize << delay);
+  NS_LOG_FUNCTION (path << rnti << (uint16_t)lcid << packetSize << delay);
  
   arg->stats->UlRxPdu (arg->cellId, arg->imsi, rnti, lcid, packetSize, delay);
 }
diff -Naur ns-3.23/src/lte/model/epc-x2.cc ns-3.24/src/lte/model/epc-x2.cc
--- ns-3.23/src/lte/model/epc-x2.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/lte/model/epc-x2.cc	2015-09-15 11:18:44.000000000 -0700
@@ -348,6 +348,7 @@
           NS_LOG_INFO ("X2 ResourceStatusUpdate header: " << x2ResStatUpdHeader);
 
           EpcX2SapUser::ResourceStatusUpdateParams params;
+          params.targetCellId = 0;
           params.enb1MeasurementId = x2ResStatUpdHeader.GetEnb1MeasurementId ();
           params.enb2MeasurementId = x2ResStatUpdHeader.GetEnb2MeasurementId ();
           params.cellMeasurementResultList = x2ResStatUpdHeader.GetCellMeasurementResultList ();
diff -Naur ns-3.23/src/lte/model/lte-common.h ns-3.24/src/lte/model/lte-common.h
--- ns-3.23/src/lte/model/lte-common.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/lte/model/lte-common.h	2015-09-15 11:18:45.000000000 -0700
@@ -132,6 +132,7 @@
    *  TracedCallback signature.
    *
    * \param [in] params Value of the PhyTransmissionionStatParameters.
+   * \todo The argument should be passed by const reference, since it's large.
    */
   typedef void (* TracedCallback)(const PhyTransmissionStatParameters params);
   
@@ -156,6 +157,7 @@
    *  TracedCallback signature.
    *
    * \param [in] params Value of the PhyReceptionStatParameters.
+   * \todo The argument should be passed by const reference, since it's large.
    */
   typedef void (* TracedCallback)(const PhyReceptionStatParameters params);
   
diff -Naur ns-3.23/src/lte/model/lte-enb-mac.h ns-3.24/src/lte/model/lte-enb-mac.h
--- ns-3.23/src/lte/model/lte-enb-mac.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/lte/model/lte-enb-mac.h	2015-09-15 11:18:45.000000000 -0700
@@ -132,9 +132,9 @@
    * \param [in] tbs1Size
    */
   typedef void (* DlSchedulingTracedCallback)
-    (const uint32_t frame, const uint32_t subframe, const uint16_t rnti,
-     const uint8_t mcs0, const uint16_t tbs0Size,
-     const uint8_t mcs1, const uint16_t tbs1Size);
+    (uint32_t frame, uint32_t subframe,  uint16_t rnti,
+     uint8_t mcs0, uint16_t tbs0Size,
+     uint8_t mcs1, uint16_t tbs1Size);
 
   /**
    *  TracedCallback signature for UL scheduling events.
@@ -146,8 +146,8 @@
    * \param [in] tbsSize
    */
   typedef void (* UlSchedulingTracedCallback)
-    (const uint32_t frame, const uint32_t subframe, const uint16_t rnti,
-     const uint8_t mcs, const uint16_t tbsSize);
+    (uint32_t frame, uint32_t subframe, uint16_t rnti,
+     uint8_t mcs, uint16_t tbsSize);
   
 private:
 
@@ -252,12 +252,14 @@
    * Frame number, Subframe number, RNTI, MCS of TB1, size of TB1,
    * MCS of TB2 (0 if not present), size of TB2 (0 if not present)
    */
-  TracedCallback<uint32_t, uint32_t, uint16_t, uint8_t, uint16_t, uint8_t, uint16_t> m_dlScheduling;
+  TracedCallback<uint32_t, uint32_t, uint16_t,
+                 uint8_t, uint16_t, uint8_t, uint16_t> m_dlScheduling;
   /**
    * Trace information regarding UL scheduling
    * Frame number, Subframe number, RNTI, MCS of TB, size of TB
    */
-  TracedCallback<uint32_t, uint32_t, uint16_t, uint8_t, uint16_t> m_ulScheduling;
+  TracedCallback<uint32_t, uint32_t, uint16_t,
+                 uint8_t, uint16_t> m_ulScheduling;
   
   uint8_t m_macChTtiDelay; // delay of MAC, PHY and channel in terms of TTIs
 
diff -Naur ns-3.23/src/lte/model/lte-enb-phy.h ns-3.24/src/lte/model/lte-enb-phy.h
--- ns-3.23/src/lte/model/lte-enb-phy.h	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/lte/model/lte-enb-phy.h	2015-09-15 11:18:45.000000000 -0700
@@ -291,17 +291,18 @@
    * \param [in] sinrLinear
    */
   typedef void (* ReportUeSinrTracedCallback)
-    (const uint16_t cellId, const uint16_t rnti, const double sinrLinear);
+    (uint16_t cellId, uint16_t rnti, double sinrLinear);
 
   /**
    * TracedCallback signature for the linear average of SRS SINRs.
    *
    * \param [in] cellId
    * \param [in] spectrumValue
+   * \deprecated The non-const \c Ptr<SpectrumValue> argument is deprecated
+   * and will be changed to \c Ptr<const SpectrumValue> in a future release.
    */
   typedef void (* ReportInterferenceTracedCallback)
-    (const uint16_t cellId, const Ptr<const SpectrumValue> spectrumValue);
-
+    (uint16_t cellId, Ptr<SpectrumValue> spectrumValue);
 
 private:
 
@@ -416,6 +417,8 @@
    * The `ReportInterference` trace source. Reporting the interference per PHY
    * RB (TS 36.214 section 5.2.2, measured on DATA). Exporting cell ID and
    * interference linear power per RB basis.
+   * \deprecated The non-const \c Ptr<SpectrumValue> argument is deprecated
+   * and will be changed to \c Ptr<const SpectrumValue> in a future release.
    */
   TracedCallback<uint16_t, Ptr<SpectrumValue> > m_reportInterferenceTrace;
   /**
diff -Naur ns-3.23/src/lte/model/lte-enb-rrc.h ns-3.24/src/lte/model/lte-enb-rrc.h
--- ns-3.23/src/lte/model/lte-enb-rrc.h	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/lte/model/lte-enb-rrc.h	2015-09-15 11:18:45.000000000 -0700
@@ -314,8 +314,8 @@
    * \param [in] newState
    */
   typedef void (* StateTracedCallback)
-    (const uint64_t imsi, const uint16_t cellId, const uint16_t rnti,
-     const State oldState, const State newState);
+    (uint64_t imsi, uint16_t cellId, uint16_t rnti,
+     State oldState, State newState);
 
 private:
 
@@ -827,7 +827,7 @@
    * \param [in] rnti
    */
   typedef void (* NewUeContextTracedCallback)
-    (const uint16_t cellId, const uint16_t rnti);
+    (uint16_t cellId, uint16_t rnti);
 
   /**
    * TracedCallback signature for connection and handover end events.
@@ -837,7 +837,7 @@
    * \param [in] rnti
    */
   typedef void (* ConnectionHandoverTracedCallback)
-    (const uint64_t imsi, const uint16_t cellId, const uint16_t rnti);
+    (uint64_t imsi, uint16_t cellId, uint16_t rnti);
   
   /**
    * TracedCallback signature for handover start events.
@@ -848,8 +848,7 @@
    * \param [in] targetCid
    */
   typedef void (* HandoverStartTracedCallback)
-    (const uint64_t imsi, const uint16_t cellId, const uint16_t rnti,
-     const uint16_t targetCid);
+    (uint64_t imsi, uint16_t cellId, uint16_t rnti, uint16_t targetCid);
 
   /**
    * TracedCallback signature for receive measurement report events.
@@ -858,10 +857,12 @@
    * \param [in] cellId
    * \param [in] rnti
    * \param [in] report
+   * \todo The \c LteRrcSap::MeasurementReport argument should be
+   * changed to a const reference since the argument is large.
    */
   typedef void (* ReceiveReportTracedCallback)
-    (const uint64_t imsi, const uint16_t cellId, const uint16_t rnti,
-     const LteRrcSap::MeasurementReport report);
+    (uint64_t imsi, uint16_t cellId, uint16_t rnti,
+     LteRrcSap::MeasurementReport report);
   
 private:
 
diff -Naur ns-3.23/src/lte/model/lte-harq-phy.cc ns-3.24/src/lte/model/lte-harq-phy.cc
--- ns-3.23/src/lte/model/lte-harq-phy.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/lte/model/lte-harq-phy.cc	2015-09-15 11:18:44.000000000 -0700
@@ -56,7 +56,7 @@
   NS_LOG_FUNCTION (this);
 
   // left shift UL HARQ buffers
-  std::map <uint16_t, std::vector <HarqProcessInfoList_t> >:: iterator it;
+  std::map <uint16_t, std::vector <HarqProcessInfoList_t> >::iterator it;
   for (it = m_miUlHarqProcessesInfoMap.begin (); it != m_miUlHarqProcessesInfoMap.end (); it++)
     {
       (*it).second.erase ((*it).second.begin ());
diff -Naur ns-3.23/src/lte/model/lte-pdcp.h ns-3.24/src/lte/model/lte-pdcp.h
--- ns-3.23/src/lte/model/lte-pdcp.h	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/lte/model/lte-pdcp.h	2015-09-15 11:18:44.000000000 -0700
@@ -120,7 +120,7 @@
    * \param [in] size Packet size.
    */
   typedef void (* PduTxTracedCallback)
-    (const uint16_t rnti, const uint8_t lcid, const uint32_t size);
+    (uint16_t rnti, uint8_t lcid, uint32_t size);
 
   /**
    * TracedCallback signature for PDU receive event.
diff -Naur ns-3.23/src/lte/model/lte-phy.cc ns-3.24/src/lte/model/lte-phy.cc
--- ns-3.23/src/lte/model/lte-phy.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/lte/model/lte-phy.cc	2015-09-15 11:18:44.000000000 -0700
@@ -94,7 +94,7 @@
 
 
 Ptr<LteNetDevice>
-LtePhy::GetDevice ()
+LtePhy::GetDevice () const
 {
   NS_LOG_FUNCTION (this);
   return m_netDevice;
diff -Naur ns-3.23/src/lte/model/lte-phy.h ns-3.24/src/lte/model/lte-phy.h
--- ns-3.23/src/lte/model/lte-phy.h	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/lte/model/lte-phy.h	2015-09-15 11:18:44.000000000 -0700
@@ -78,7 +78,7 @@
    * \brief Get the device where the phy layer is attached
    * \return the pointer to the device
    */
-  Ptr<LteNetDevice> GetDevice ();
+  Ptr<LteNetDevice> GetDevice () const;
 
   /** 
    * 
diff -Naur ns-3.23/src/lte/model/lte-rlc.h ns-3.24/src/lte/model/lte-rlc.h
--- ns-3.23/src/lte/model/lte-rlc.h	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/lte/model/lte-rlc.h	2015-09-15 11:18:44.000000000 -0700
@@ -109,7 +109,7 @@
    * \param [in] bytes The number of bytes to transmit
    */
   typedef void (* NotifyTxTracedCallback)
-    (const uint16_t rnti, const uint8_t lcid, const uint32_t bytes);
+    (uint16_t rnti, uint8_t lcid, uint32_t bytes);
 
   /**
    * TracedCallback signature for
@@ -121,8 +121,7 @@
    * \param [in] delay Delay since sender timestamp, in ns.
    */
   typedef void (* ReceiveTracedCallback)
-    (const uint16_t rnti, const uint8_t lcid,
-     const uint32_t bytes, const uint64_t delay);
+    (uint16_t rnti, uint8_t lcid, uint32_t bytes, uint64_t delay);
 
   /// \todo MRE What is the sense to duplicate all the interfaces here???
   // NB to avoid the use of multiple inheritance
diff -Naur ns-3.23/src/lte/model/lte-spectrum-phy.cc ns-3.24/src/lte/model/lte-spectrum-phy.cc
--- ns-3.23/src/lte/model/lte-spectrum-phy.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/lte/model/lte-spectrum-phy.cc	2015-09-15 11:18:44.000000000 -0700
@@ -238,7 +238,7 @@
 
 
 Ptr<NetDevice>
-LteSpectrumPhy::GetDevice ()
+LteSpectrumPhy::GetDevice () const
 {
   NS_LOG_FUNCTION (this);
   return m_device;
@@ -1150,7 +1150,6 @@
   if (m_ctrlErrorModelEnabled)
     {
       double  errorRate = LteMiErrorModel::GetPcfichPdcchError (m_sinrPerceived);
-      errorRate = LteMiErrorModel::GetPcfichPdcchError (m_sinrPerceived);
       error = m_random->GetValue () > errorRate ? false : true;
       NS_LOG_DEBUG (this << " PCFICH-PDCCH Decodification, errorRate " << errorRate << " error " << error);
     }
diff -Naur ns-3.23/src/lte/model/lte-spectrum-phy.h ns-3.24/src/lte/model/lte-spectrum-phy.h
--- ns-3.23/src/lte/model/lte-spectrum-phy.h	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/lte/model/lte-spectrum-phy.h	2015-09-15 11:18:44.000000000 -0700
@@ -174,7 +174,7 @@
   void SetMobility (Ptr<MobilityModel> m);
   void SetDevice (Ptr<NetDevice> d);
   Ptr<MobilityModel> GetMobility ();
-  Ptr<NetDevice> GetDevice ();
+  Ptr<NetDevice> GetDevice () const;
   Ptr<const SpectrumModel> GetRxSpectrumModel () const;
   Ptr<AntennaModel> GetRxAntenna ();
   void StartRx (Ptr<SpectrumSignalParameters> params);
@@ -453,8 +453,8 @@
   TracedCallback<Ptr<const PacketBurst> > m_phyTxStartTrace;
   TracedCallback<Ptr<const PacketBurst> > m_phyTxEndTrace;
   TracedCallback<Ptr<const PacketBurst> > m_phyRxStartTrace;
-  TracedCallback<Ptr<const Packet> > m_phyRxEndOkTrace;
-  TracedCallback<Ptr<const Packet> > m_phyRxEndErrorTrace;
+  TracedCallback<Ptr<const Packet> >      m_phyRxEndOkTrace;
+  TracedCallback<Ptr<const Packet> >      m_phyRxEndErrorTrace;
 
   LtePhyRxDataEndErrorCallback   m_ltePhyRxDataEndErrorCallback;
   LtePhyRxDataEndOkCallback      m_ltePhyRxDataEndOkCallback;
diff -Naur ns-3.23/src/lte/model/lte-ue-phy.h ns-3.24/src/lte/model/lte-ue-phy.h
--- ns-3.23/src/lte/model/lte-ue-phy.h	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/lte/model/lte-ue-phy.h	2015-09-15 11:18:44.000000000 -0700
@@ -244,8 +244,7 @@
    * \param [in] newState
    */
   typedef void (* StateTracedCallback)
-    (const uint16_t cellId, const uint16_t rnti,
-     const State oldState, const State newState);
+    (uint16_t cellId, uint16_t rnti, State oldState, State newState);
 
   /**
    * TracedCallback signature for cell RSRP and SINR report.
@@ -256,8 +255,7 @@
    * \param [in] sinr
    */
   typedef void (* RsrpSinrTracedCallback)
-    (const uint16_t cellId, const uint16_t rnti,
-     const double rsrp, const double sinr);
+    (uint16_t cellId, uint16_t rnti, double rsrp, double sinr);
 
   /**
    * TracedCallback signature for cell RSRP and RSRQ.
@@ -269,8 +267,8 @@
    * \param [in] isServingCell
    */
   typedef void (* RsrpRsrqTracedCallback)
-    (const uint16_t rnti, const uint16_t cellId,
-     const double rsrp, const double rsrq, const bool isServingCell);
+    (uint16_t rnti, uint16_t cellId, double rsrp, double rsrq,
+     bool isServingCell);
 
 private:
 
diff -Naur ns-3.23/src/lte/model/lte-ue-power-control.h ns-3.24/src/lte/model/lte-ue-power-control.h
--- ns-3.23/src/lte/model/lte-ue-power-control.h	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/lte/model/lte-ue-power-control.h	2015-09-15 11:18:44.000000000 -0700
@@ -95,7 +95,7 @@
    * \param [in] power The current TX power.
    */
   typedef void (* TxPowerTracedCallback)
-    (const uint16_t cellId, const uint16_t rnti, const double power);
+    (uint16_t cellId, uint16_t rnti, double power);
 
 private:
   void SetSubChannelMask (std::vector <int> mask);
diff -Naur ns-3.23/src/lte/model/lte-ue-rrc.h ns-3.24/src/lte/model/lte-ue-rrc.h
--- ns-3.23/src/lte/model/lte-ue-rrc.h	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/lte/model/lte-ue-rrc.h	2015-09-15 11:18:44.000000000 -0700
@@ -254,7 +254,7 @@
    * \param [in] cellId
    */
   typedef void (* CellSelectionTracedCallback)
-    (const uint64_t imsi, const uint16_t cellId);
+    (uint64_t imsi, uint16_t cellId);
 
   /**
    * TracedCallback signature for imsi, cellId and rnti events.
@@ -264,7 +264,7 @@
    * \param [in] rnti
    */
   typedef void (* ImsiCidRntiTracedCallback)
-    (const uint64_t imsi, const uint16_t cellId, const uint16_t rnti);
+    (uint64_t imsi, uint16_t cellId, uint16_t rnti);
 
   /**
    * TracedCallback signature for MIBRecieved, Sib1Received and
@@ -276,8 +276,7 @@
    * \param [in] otherCid
    */
   typedef void (* MibSibHandoverTracedCallback)
-    (const uint64_t imsi, const uint16_t cellId, const uint16_t rnti,
-     const uint16_t otherCid);
+    (uint64_t imsi, uint16_t cellId, uint16_t rnti, uint16_t otherCid);
 
   /**
    * TracedCallback signature for state transition events.
@@ -289,8 +288,8 @@
    * \param [in] newState
    */
   typedef void (* StateTracedCallback)
-    (const uint64_t imsi, const uint16_t cellId, const uint16_t rnti,
-     const State oldState, const State newState);
+    (uint64_t imsi, uint16_t cellId, uint16_t rnti,
+     State oldState, State newState);
 
 
 private:
diff -Naur ns-3.23/src/lte/model/rem-spectrum-phy.cc ns-3.24/src/lte/model/rem-spectrum-phy.cc
--- ns-3.23/src/lte/model/rem-spectrum-phy.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/lte/model/rem-spectrum-phy.cc	2015-09-15 11:18:44.000000000 -0700
@@ -103,7 +103,7 @@
 }
 
 Ptr<NetDevice>
-RemSpectrumPhy::GetDevice ()
+RemSpectrumPhy::GetDevice () const
 {
   return 0;
 }
diff -Naur ns-3.23/src/lte/model/rem-spectrum-phy.h ns-3.24/src/lte/model/rem-spectrum-phy.h
--- ns-3.23/src/lte/model/rem-spectrum-phy.h	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/lte/model/rem-spectrum-phy.h	2015-09-15 11:18:44.000000000 -0700
@@ -64,7 +64,7 @@
   void SetMobility (Ptr<MobilityModel> m);
   void SetDevice (Ptr<NetDevice> d);
   Ptr<MobilityModel> GetMobility ();
-  Ptr<NetDevice> GetDevice ();
+  Ptr<NetDevice> GetDevice () const;
   Ptr<const SpectrumModel> GetRxSpectrumModel () const;
   Ptr<AntennaModel> GetRxAntenna ();
   void StartRx (Ptr<SpectrumSignalParameters> params);
diff -Naur ns-3.23/src/lte/test/lte-ffr-simple.h ns-3.24/src/lte/test/lte-ffr-simple.h
--- ns-3.23/src/lte/test/lte-ffr-simple.h	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/lte/test/lte-ffr-simple.h	2015-09-15 11:18:44.000000000 -0700
@@ -68,6 +68,14 @@
   friend class MemberLteFfrSapProvider<LteFfrSimple>;
   friend class MemberLteFfrRrcSapProvider<LteFfrSimple>;
 
+  /**
+   * TracedCallback signature for change of PdschConfigDedicated.
+   *
+   * \param [in] rnti
+   * \param [in] pdschPa PdschConfiDedicated.pa
+   */
+  typedef void (* PdschTracedCallback)(uint16_t rnti, uint8_t pdschPa);
+
 protected:
   // inherited from Object
   virtual void DoInitialize ();
@@ -120,8 +128,6 @@
 
   LteRrcSap::PdschConfigDedicated m_pdschConfigDedicated;
 
-  typedef void (* PdschTracedCallback)(uint16_t, uint8_t);
-
   TracedCallback<uint16_t, uint8_t> m_changePdschConfigDedicatedTrace;
 
 
diff -Naur ns-3.23/src/lte/test/lte-simple-spectrum-phy.cc ns-3.24/src/lte/test/lte-simple-spectrum-phy.cc
--- ns-3.23/src/lte/test/lte-simple-spectrum-phy.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/lte/test/lte-simple-spectrum-phy.cc	2015-09-15 11:18:44.000000000 -0700
@@ -73,7 +73,7 @@
 
 
 Ptr<NetDevice>
-LteSimpleSpectrumPhy::GetDevice ()
+LteSimpleSpectrumPhy::GetDevice () const
 {
   NS_LOG_FUNCTION (this);
   return m_device;
diff -Naur ns-3.23/src/lte/test/lte-simple-spectrum-phy.h ns-3.24/src/lte/test/lte-simple-spectrum-phy.h
--- ns-3.23/src/lte/test/lte-simple-spectrum-phy.h	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/lte/test/lte-simple-spectrum-phy.h	2015-09-15 11:18:44.000000000 -0700
@@ -60,7 +60,7 @@
   void SetMobility (Ptr<MobilityModel> m);
   void SetDevice (Ptr<NetDevice> d);
   Ptr<MobilityModel> GetMobility ();
-  Ptr<NetDevice> GetDevice ();
+  Ptr<NetDevice> GetDevice () const;
   Ptr<const SpectrumModel> GetRxSpectrumModel () const;
   Ptr<AntennaModel> GetRxAntenna ();
   void StartRx (Ptr<SpectrumSignalParameters> params);
diff -Naur ns-3.23/src/lte/test/lte-test-deactivate-bearer.cc ns-3.24/src/lte/test/lte-test-deactivate-bearer.cc
--- ns-3.23/src/lte/test/lte-test-deactivate-bearer.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/lte/test/lte-test-deactivate-bearer.cc	2015-09-15 11:18:44.000000000 -0700
@@ -1,347 +1,347 @@
-/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2011, 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author:Gaurav Sathe <gaurav.sathe@tcs.com>
- */
-
-#include <iostream>
-#include <sstream>
-#include <string>
-
-#include <ns3/object.h>
-#include <ns3/spectrum-interference.h>
-#include <ns3/spectrum-error-model.h>
-#include <ns3/log.h>
-#include <ns3/test.h>
-#include <ns3/simulator.h>
-#include <ns3/packet.h>
-#include <ns3/ptr.h>
-#include "ns3/radio-bearer-stats-calculator.h"
-#include <ns3/constant-position-mobility-model.h>
-#include <ns3/eps-bearer.h>
-#include <ns3/node-container.h>
-#include <ns3/mobility-helper.h>
-#include <ns3/net-device-container.h>
-#include <ns3/lte-ue-net-device.h>
-#include <ns3/lte-enb-net-device.h>
-#include <ns3/lte-ue-rrc.h>
-#include <ns3/lte-helper.h>
-#include "ns3/string.h"
-#include "ns3/double.h"
-#include <ns3/lte-enb-phy.h>
-#include <ns3/lte-ue-phy.h>
-#include <ns3/boolean.h>
-#include <ns3/enum.h>
-
-#include "ns3/point-to-point-epc-helper.h"
-#include "ns3/network-module.h"
-#include "ns3/ipv4-global-routing-helper.h"
-#include "ns3/internet-module.h"
-#include "ns3/applications-module.h"
-#include "ns3/point-to-point-helper.h"
-
-#include "lte-test-deactivate-bearer.h"
-
-NS_LOG_COMPONENT_DEFINE ("LenaTestDeactivateBearer");
-
-namespace ns3 {
-
-LenaTestBearerDeactivateSuite::LenaTestBearerDeactivateSuite ()
-  : TestSuite ("lte-test-deactivate-bearer", SYSTEM)
-{
-  NS_LOG_INFO ("creating LenaTestPssFfMacSchedulerSuite");
-
-  bool errorModel = false;
-
-  // Test Case: homogeneous flow test in PSS (different distance)
-  // Traffic1 info
-  //   UDP traffic: payload size = 100 bytes, interval = 1 ms
-  //   UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000 byte/sec -> 132000 byte/rate
-  // Maximum throughput = 3 / ( 1/2196000 + 1/1191000 + 1/1383000) = 1486569 byte/s
-  // 132000 * 3 = 396000 < 1209046 -> estimated throughput in downlink = 132000 byte/sec
-  std::vector<uint16_t> dist_1;
-
-  dist_1.push_back (0);       // User 0 distance --> MCS 28
-  dist_1.push_back (0);    // User 1 distance --> MCS 22
-  dist_1.push_back (0);    // User 2 distance --> MCS 20
-
-  std::vector<uint16_t> packetSize_1;
-
-  packetSize_1.push_back (100); //1
-  packetSize_1.push_back (100); //2
-  packetSize_1.push_back (100); //3
-
-  std::vector<uint32_t> estThrPssDl_1;
-
-  estThrPssDl_1.push_back (132000); // User 0 estimated TTI throughput from PSS
-  estThrPssDl_1.push_back (132000); // User 1 estimated TTI throughput from PSS
-  estThrPssDl_1.push_back (132000); // User 2 estimated TTI throughput from PSS
-
-  AddTestCase (new LenaDeactivateBearerTestCase (dist_1,estThrPssDl_1,packetSize_1,1,errorModel,true), TestCase::QUICK);
-}
-
-static LenaTestBearerDeactivateSuite lenaTestBearerDeactivateSuite;
-
-
-std::string
-LenaDeactivateBearerTestCase::BuildNameString (uint16_t nUser, std::vector<uint16_t> dist)
-{
-  std::ostringstream oss;
-  oss << "distances (m) = [ ";
-  for (std::vector<uint16_t>::iterator it = dist.begin (); it != dist.end (); ++it)
-    {
-      oss << *it << " ";
-    }
-  oss << "]";
-  return oss.str ();
-}
-
-LenaDeactivateBearerTestCase::LenaDeactivateBearerTestCase (std::vector<uint16_t> dist, std::vector<uint32_t> estThrPssDl, std::vector<uint16_t> packetSize, uint16_t interval,bool errorModelEnabled, bool useIdealRrc)
-  : TestCase (BuildNameString (dist.size (), dist)),
-    m_nUser (dist.size ()),
-    m_dist (dist),
-    m_packetSize (packetSize),
-    m_interval (interval),
-    m_estThrPssDl (estThrPssDl),
-    m_errorModelEnabled (errorModelEnabled)
-{
-}
-
-LenaDeactivateBearerTestCase::~LenaDeactivateBearerTestCase ()
-{
-}
-
-void
-LenaDeactivateBearerTestCase::DoRun (void)
-{
-  if (!m_errorModelEnabled)
-    {
-      Config::SetDefault ("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue (false));
-      Config::SetDefault ("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue (false));
-    }
-
-  Config::SetDefault ("ns3::LteHelper::UseIdealRrc", BooleanValue (true));
-
-
-  Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
-  Ptr<PointToPointEpcHelper>  epcHelper = CreateObject<PointToPointEpcHelper> ();
-  lteHelper->SetEpcHelper (epcHelper);
-
-  Ptr<Node> pgw = epcHelper->GetPgwNode ();
-
-  // Create a single RemoteHost
-  NodeContainer remoteHostContainer;
-  remoteHostContainer.Create (1);
-  Ptr<Node> remoteHost = remoteHostContainer.Get (0);
-  InternetStackHelper internet;
-  internet.Install (remoteHostContainer);
-
-  // Create the Internet
-  PointToPointHelper p2ph;
-  p2ph.SetDeviceAttribute ("DataRate", DataRateValue (DataRate ("100Gb/s")));
-  p2ph.SetDeviceAttribute ("Mtu", UintegerValue (1500));
-  p2ph.SetChannelAttribute ("Delay", TimeValue (Seconds (0.001)));
-  NetDeviceContainer internetDevices = p2ph.Install (pgw, remoteHost);
-  Ipv4AddressHelper ipv4h;
-  ipv4h.SetBase ("1.0.0.0", "255.0.0.0");
-  Ipv4InterfaceContainer internetIpIfaces = ipv4h.Assign (internetDevices);
-  // interface 0 is localhost, 1 is the p2p device
-  Ipv4Address remoteHostAddr = internetIpIfaces.GetAddress (1);
-
-  Ipv4StaticRoutingHelper ipv4RoutingHelper;
-  Ptr<Ipv4StaticRouting> remoteHostStaticRouting = ipv4RoutingHelper.GetStaticRouting (remoteHost->GetObject<Ipv4> ());
-  remoteHostStaticRouting->AddNetworkRouteTo (Ipv4Address ("7.0.0.0"), Ipv4Mask ("255.0.0.0"), 1);
-
-  // LogLevel logLevel = (LogLevel)(LOG_PREFIX_FUNC | LOG_PREFIX_TIME | LOG_LEVEL_ALL);
-
-  // LogComponentEnable ("LenaTestDeactivateBearer", LOG_LEVEL_ALL);
-  // LogComponentEnable ("LteHelper", logLevel);
-  // LogComponentEnable ("EpcHelper", logLevel);
-  // LogComponentEnable ("EpcEnbApplication", logLevel);
-  // LogComponentEnable ("EpcSgwPgwApplication", logLevel);
-  // LogComponentEnable ("EpcMme", logLevel);
-  // LogComponentEnable ("LteEnbRrc", logLevel);
-
-  lteHelper->SetAttribute ("PathlossModel", StringValue ("ns3::FriisSpectrumPropagationLossModel"));
-
-  // Create Nodes: eNodeB and UE
-  NodeContainer enbNodes;
-  NodeContainer ueNodes;
-  enbNodes.Create (1);
-  ueNodes.Create (m_nUser);
-
-  // Install Mobility Model
-  MobilityHelper mobility;
-  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
-  mobility.Install (enbNodes);
-  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
-  mobility.Install (ueNodes);
-
-  // Create Devices and install them in the Nodes (eNB and UE)
-  NetDeviceContainer enbDevs;
-  NetDeviceContainer ueDevs;
-  lteHelper->SetSchedulerType ("ns3::PssFfMacScheduler");
-  enbDevs = lteHelper->InstallEnbDevice (enbNodes);
-  ueDevs = lteHelper->InstallUeDevice (ueNodes);
-
-  Ptr<LteEnbNetDevice> lteEnbDev = enbDevs.Get (0)->GetObject<LteEnbNetDevice> ();
-  Ptr<LteEnbPhy> enbPhy = lteEnbDev->GetPhy ();
-  enbPhy->SetAttribute ("TxPower", DoubleValue (30.0));
-  enbPhy->SetAttribute ("NoiseFigure", DoubleValue (5.0));
-
-  // Set UEs' position and power
-  for (int i = 0; i < m_nUser; i++)
-    {
-      Ptr<ConstantPositionMobilityModel> mm = ueNodes.Get (i)->GetObject<ConstantPositionMobilityModel> ();
-      mm->SetPosition (Vector (m_dist.at (i), 0.0, 0.0));
-      Ptr<LteUeNetDevice> lteUeDev = ueDevs.Get (i)->GetObject<LteUeNetDevice> ();
-      Ptr<LteUePhy> uePhy = lteUeDev->GetPhy ();
-      uePhy->SetAttribute ("TxPower", DoubleValue (23.0));
-      uePhy->SetAttribute ("NoiseFigure", DoubleValue (9.0));
-    }
-
-  // Install the IP stack on the UEs
-  internet.Install (ueNodes);
-  Ipv4InterfaceContainer ueIpIface;
-  ueIpIface = epcHelper->AssignUeIpv4Address (NetDeviceContainer (ueDevs));
-
-  // Assign IP address to UEs
-  for (uint32_t u = 0; u < ueNodes.GetN (); ++u)
-    {
-      Ptr<Node> ueNode = ueNodes.Get (u);
-      // Set the default gateway for the UE
-      Ptr<Ipv4StaticRouting> ueStaticRouting = ipv4RoutingHelper.GetStaticRouting (ueNode->GetObject<Ipv4> ());
-      ueStaticRouting->SetDefaultRoute (epcHelper->GetUeDefaultGatewayAddress (), 1);
-    }
-
-  // Attach a UE to a eNB
-  lteHelper->Attach (ueDevs, enbDevs.Get (0));
-
-  // Activate an EPS bearer on all UEs
-
-  for (uint32_t u = 0; u < ueNodes.GetN (); ++u)
-    {
-      Ptr<NetDevice> ueDevice = ueDevs.Get (u);
-      GbrQosInformation qos;
-      qos.gbrDl = (m_packetSize.at (u) + 32) * (1000 / m_interval) * 8;  // bit/s, considering IP, UDP, RLC, PDCP header size
-      qos.gbrUl = (m_packetSize.at (u) + 32) * (1000 / m_interval) * 8;
-      qos.mbrDl = qos.gbrDl;
-      qos.mbrUl = qos.gbrUl;
-
-      enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
-      EpsBearer bearer (q, qos);
-      bearer.arp.priorityLevel = 15 - (u + 1);
-      bearer.arp.preemptionCapability = true;
-      bearer.arp.preemptionVulnerability = true;
-      lteHelper->ActivateDedicatedEpsBearer (ueDevice, bearer, EpcTft::Default ());
-    }
-
-
-  // Install downlink and uplink applications
-  uint16_t dlPort = 1234;
-  uint16_t ulPort = 2000;
-  PacketSinkHelper dlPacketSinkHelper ("ns3::UdpSocketFactory", InetSocketAddress (Ipv4Address::GetAny (), dlPort));
-  PacketSinkHelper ulPacketSinkHelper ("ns3::UdpSocketFactory", InetSocketAddress (Ipv4Address::GetAny (), ulPort));
-  ApplicationContainer clientApps;
-  ApplicationContainer serverApps;
-  for (uint32_t u = 0; u < ueNodes.GetN (); ++u)
-    {
-      ++ulPort;
-      serverApps.Add (dlPacketSinkHelper.Install (ueNodes.Get (u))); // receive packets from remotehost
-      serverApps.Add (ulPacketSinkHelper.Install (remoteHost));  // receive packets from UEs
-
-      UdpClientHelper dlClient (ueIpIface.GetAddress (u), dlPort); // uplink packets generator
-      dlClient.SetAttribute ("Interval", TimeValue (MilliSeconds (m_interval)));
-      dlClient.SetAttribute ("MaxPackets", UintegerValue (1000000));
-      dlClient.SetAttribute ("PacketSize", UintegerValue (m_packetSize.at (u)));
-
-      UdpClientHelper ulClient (remoteHostAddr, ulPort);           // downlink packets generator
-      ulClient.SetAttribute ("Interval", TimeValue (MilliSeconds (m_interval)));
-      ulClient.SetAttribute ("MaxPackets", UintegerValue (1000000));
-      ulClient.SetAttribute ("PacketSize", UintegerValue (m_packetSize.at (u)));
-
-      clientApps.Add (dlClient.Install (remoteHost));
-      clientApps.Add (ulClient.Install (ueNodes.Get (u)));
-    }
-
-
-  serverApps.Start (Seconds (0.030));
-  clientApps.Start (Seconds (0.030));
-
-  double statsStartTime = 0.04; // need to allow for RRC connection establishment + SRS
-  double statsDuration = 1.0;
-  double tolerance = 0.1;
-
-  lteHelper->EnableRlcTraces ();
-  Ptr<RadioBearerStatsCalculator> rlcStats = lteHelper->GetRlcStats ();
-  rlcStats->SetAttribute ("StartTime", TimeValue (Seconds (statsStartTime)));
-  rlcStats->SetAttribute ("EpochDuration", TimeValue (Seconds (statsDuration)));
-
-
-  //get ue device pointer for UE-ID 0 IMSI 1 and enb device pointer
-  Ptr<NetDevice> ueDevice = ueDevs.Get (0);
-  Ptr<NetDevice> enbDevice = enbDevs.Get (0);
-
-  /*
-   *   Instantiate De-activation using Simulator::Schedule() method which will initiate bearer de-activation after deActivateTime
-   *   Instantiate De-activation in sequence (Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3)
-   */
-  Time deActivateTime (Seconds (1.5));
-  Simulator::Schedule (deActivateTime, &LteHelper::DeActivateDedicatedEpsBearer, lteHelper, ueDevice, enbDevice, 2);
-
-  //stop simulation after 3 seconds
-  Simulator::Stop (Seconds (3.0));
-
-  Simulator::Run ();
-
-  NS_LOG_INFO ("DL - Test with " << m_nUser << " user(s)");
-  std::vector <uint64_t> dlDataRxed;
-  std::vector <uint64_t> dlDataTxed;
-  for (int i = 0; i < m_nUser; i++)
-    {
-      // get the imsi
-      uint64_t imsi = ueDevs.Get (i)->GetObject<LteUeNetDevice> ()->GetImsi ();
-      // get the lcId
-      // lcId is hard-coded, since only one dedicated bearer is added
-      uint8_t lcId = 4;
-      dlDataRxed.push_back (rlcStats->GetDlRxData (imsi, lcId));
-      dlDataTxed.push_back (rlcStats->GetDlTxData (imsi, lcId));
-      NS_LOG_INFO ("\tUser " << i << " dist " << m_dist.at (i) << " imsi " << imsi << " bytes rxed " << (double)dlDataRxed.at (i) << "  thr " << (double)dlDataRxed.at (i) / statsDuration << " ref " << m_estThrPssDl.at (i));
-      NS_LOG_INFO ("\tUser " << i << " imsi " << imsi << " bytes txed " << (double)dlDataTxed.at (i) << "  thr " << (double)dlDataTxed.at (i) / statsDuration);
-    }
-
-  for (int i = 0; i < m_nUser; i++)
-    {
-      uint64_t imsi = ueDevs.Get (i)->GetObject<LteUeNetDevice> ()->GetImsi ();
-
-      /*
-       * For UE ID-0 IMSI 1, LCID=4 is deactivated hence If traffic seen on it, test case should fail
-       * Else For other UE's, test case should validate throughput
-       */
-      if (imsi == 1)
-        {
-          NS_TEST_ASSERT_MSG_EQ ((double)dlDataTxed.at (i), 0, "Invalid LCID in Statistics ");
-        }
-      else
-        {
-          NS_TEST_ASSERT_MSG_EQ_TOL ((double)dlDataTxed.at (i) / statsDuration, m_estThrPssDl.at (i), m_estThrPssDl.at (i) * tolerance, " Unfair Throughput!");
-        }
-    }
-
-  Simulator::Destroy ();
-}
-}
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011, 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author:Gaurav Sathe <gaurav.sathe@tcs.com>
+ */
+
+#include <iostream>
+#include <sstream>
+#include <string>
+
+#include <ns3/object.h>
+#include <ns3/spectrum-interference.h>
+#include <ns3/spectrum-error-model.h>
+#include <ns3/log.h>
+#include <ns3/test.h>
+#include <ns3/simulator.h>
+#include <ns3/packet.h>
+#include <ns3/ptr.h>
+#include "ns3/radio-bearer-stats-calculator.h"
+#include <ns3/constant-position-mobility-model.h>
+#include <ns3/eps-bearer.h>
+#include <ns3/node-container.h>
+#include <ns3/mobility-helper.h>
+#include <ns3/net-device-container.h>
+#include <ns3/lte-ue-net-device.h>
+#include <ns3/lte-enb-net-device.h>
+#include <ns3/lte-ue-rrc.h>
+#include <ns3/lte-helper.h>
+#include "ns3/string.h"
+#include "ns3/double.h"
+#include <ns3/lte-enb-phy.h>
+#include <ns3/lte-ue-phy.h>
+#include <ns3/boolean.h>
+#include <ns3/enum.h>
+
+#include "ns3/point-to-point-epc-helper.h"
+#include "ns3/network-module.h"
+#include "ns3/ipv4-global-routing-helper.h"
+#include "ns3/internet-module.h"
+#include "ns3/applications-module.h"
+#include "ns3/point-to-point-helper.h"
+
+#include "lte-test-deactivate-bearer.h"
+
+NS_LOG_COMPONENT_DEFINE ("LenaTestDeactivateBearer");
+
+namespace ns3 {
+
+LenaTestBearerDeactivateSuite::LenaTestBearerDeactivateSuite ()
+  : TestSuite ("lte-test-deactivate-bearer", SYSTEM)
+{
+  NS_LOG_INFO ("creating LenaTestPssFfMacSchedulerSuite");
+
+  bool errorModel = false;
+
+  // Test Case: homogeneous flow test in PSS (different distance)
+  // Traffic1 info
+  //   UDP traffic: payload size = 100 bytes, interval = 1 ms
+  //   UDP rate in scheduler: (payload + RLC header + PDCP header + IP header + UDP header) * 1000 byte/sec -> 132000 byte/rate
+  // Maximum throughput = 3 / ( 1/2196000 + 1/1191000 + 1/1383000) = 1486569 byte/s
+  // 132000 * 3 = 396000 < 1209046 -> estimated throughput in downlink = 132000 byte/sec
+  std::vector<uint16_t> dist_1;
+
+  dist_1.push_back (0);       // User 0 distance --> MCS 28
+  dist_1.push_back (0);    // User 1 distance --> MCS 22
+  dist_1.push_back (0);    // User 2 distance --> MCS 20
+
+  std::vector<uint16_t> packetSize_1;
+
+  packetSize_1.push_back (100); //1
+  packetSize_1.push_back (100); //2
+  packetSize_1.push_back (100); //3
+
+  std::vector<uint32_t> estThrPssDl_1;
+
+  estThrPssDl_1.push_back (132000); // User 0 estimated TTI throughput from PSS
+  estThrPssDl_1.push_back (132000); // User 1 estimated TTI throughput from PSS
+  estThrPssDl_1.push_back (132000); // User 2 estimated TTI throughput from PSS
+
+  AddTestCase (new LenaDeactivateBearerTestCase (dist_1,estThrPssDl_1,packetSize_1,1,errorModel,true), TestCase::QUICK);
+}
+
+static LenaTestBearerDeactivateSuite lenaTestBearerDeactivateSuite;
+
+
+std::string
+LenaDeactivateBearerTestCase::BuildNameString (uint16_t nUser, std::vector<uint16_t> dist)
+{
+  std::ostringstream oss;
+  oss << "distances (m) = [ ";
+  for (std::vector<uint16_t>::iterator it = dist.begin (); it != dist.end (); ++it)
+    {
+      oss << *it << " ";
+    }
+  oss << "]";
+  return oss.str ();
+}
+
+LenaDeactivateBearerTestCase::LenaDeactivateBearerTestCase (std::vector<uint16_t> dist, std::vector<uint32_t> estThrPssDl, std::vector<uint16_t> packetSize, uint16_t interval,bool errorModelEnabled, bool useIdealRrc)
+  : TestCase (BuildNameString (dist.size (), dist)),
+    m_nUser (dist.size ()),
+    m_dist (dist),
+    m_packetSize (packetSize),
+    m_interval (interval),
+    m_estThrPssDl (estThrPssDl),
+    m_errorModelEnabled (errorModelEnabled)
+{
+}
+
+LenaDeactivateBearerTestCase::~LenaDeactivateBearerTestCase ()
+{
+}
+
+void
+LenaDeactivateBearerTestCase::DoRun (void)
+{
+  if (!m_errorModelEnabled)
+    {
+      Config::SetDefault ("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue (false));
+      Config::SetDefault ("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue (false));
+    }
+
+  Config::SetDefault ("ns3::LteHelper::UseIdealRrc", BooleanValue (true));
+
+
+  Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
+  Ptr<PointToPointEpcHelper>  epcHelper = CreateObject<PointToPointEpcHelper> ();
+  lteHelper->SetEpcHelper (epcHelper);
+
+  Ptr<Node> pgw = epcHelper->GetPgwNode ();
+
+  // Create a single RemoteHost
+  NodeContainer remoteHostContainer;
+  remoteHostContainer.Create (1);
+  Ptr<Node> remoteHost = remoteHostContainer.Get (0);
+  InternetStackHelper internet;
+  internet.Install (remoteHostContainer);
+
+  // Create the Internet
+  PointToPointHelper p2ph;
+  p2ph.SetDeviceAttribute ("DataRate", DataRateValue (DataRate ("100Gb/s")));
+  p2ph.SetDeviceAttribute ("Mtu", UintegerValue (1500));
+  p2ph.SetChannelAttribute ("Delay", TimeValue (Seconds (0.001)));
+  NetDeviceContainer internetDevices = p2ph.Install (pgw, remoteHost);
+  Ipv4AddressHelper ipv4h;
+  ipv4h.SetBase ("1.0.0.0", "255.0.0.0");
+  Ipv4InterfaceContainer internetIpIfaces = ipv4h.Assign (internetDevices);
+  // interface 0 is localhost, 1 is the p2p device
+  Ipv4Address remoteHostAddr = internetIpIfaces.GetAddress (1);
+
+  Ipv4StaticRoutingHelper ipv4RoutingHelper;
+  Ptr<Ipv4StaticRouting> remoteHostStaticRouting = ipv4RoutingHelper.GetStaticRouting (remoteHost->GetObject<Ipv4> ());
+  remoteHostStaticRouting->AddNetworkRouteTo (Ipv4Address ("7.0.0.0"), Ipv4Mask ("255.0.0.0"), 1);
+
+  // LogLevel logLevel = (LogLevel)(LOG_PREFIX_FUNC | LOG_PREFIX_TIME | LOG_LEVEL_ALL);
+
+  // LogComponentEnable ("LenaTestDeactivateBearer", LOG_LEVEL_ALL);
+  // LogComponentEnable ("LteHelper", logLevel);
+  // LogComponentEnable ("EpcHelper", logLevel);
+  // LogComponentEnable ("EpcEnbApplication", logLevel);
+  // LogComponentEnable ("EpcSgwPgwApplication", logLevel);
+  // LogComponentEnable ("EpcMme", logLevel);
+  // LogComponentEnable ("LteEnbRrc", logLevel);
+
+  lteHelper->SetAttribute ("PathlossModel", StringValue ("ns3::FriisSpectrumPropagationLossModel"));
+
+  // Create Nodes: eNodeB and UE
+  NodeContainer enbNodes;
+  NodeContainer ueNodes;
+  enbNodes.Create (1);
+  ueNodes.Create (m_nUser);
+
+  // Install Mobility Model
+  MobilityHelper mobility;
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+  mobility.Install (enbNodes);
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+  mobility.Install (ueNodes);
+
+  // Create Devices and install them in the Nodes (eNB and UE)
+  NetDeviceContainer enbDevs;
+  NetDeviceContainer ueDevs;
+  lteHelper->SetSchedulerType ("ns3::PssFfMacScheduler");
+  enbDevs = lteHelper->InstallEnbDevice (enbNodes);
+  ueDevs = lteHelper->InstallUeDevice (ueNodes);
+
+  Ptr<LteEnbNetDevice> lteEnbDev = enbDevs.Get (0)->GetObject<LteEnbNetDevice> ();
+  Ptr<LteEnbPhy> enbPhy = lteEnbDev->GetPhy ();
+  enbPhy->SetAttribute ("TxPower", DoubleValue (30.0));
+  enbPhy->SetAttribute ("NoiseFigure", DoubleValue (5.0));
+
+  // Set UEs' position and power
+  for (int i = 0; i < m_nUser; i++)
+    {
+      Ptr<ConstantPositionMobilityModel> mm = ueNodes.Get (i)->GetObject<ConstantPositionMobilityModel> ();
+      mm->SetPosition (Vector (m_dist.at (i), 0.0, 0.0));
+      Ptr<LteUeNetDevice> lteUeDev = ueDevs.Get (i)->GetObject<LteUeNetDevice> ();
+      Ptr<LteUePhy> uePhy = lteUeDev->GetPhy ();
+      uePhy->SetAttribute ("TxPower", DoubleValue (23.0));
+      uePhy->SetAttribute ("NoiseFigure", DoubleValue (9.0));
+    }
+
+  // Install the IP stack on the UEs
+  internet.Install (ueNodes);
+  Ipv4InterfaceContainer ueIpIface;
+  ueIpIface = epcHelper->AssignUeIpv4Address (NetDeviceContainer (ueDevs));
+
+  // Assign IP address to UEs
+  for (uint32_t u = 0; u < ueNodes.GetN (); ++u)
+    {
+      Ptr<Node> ueNode = ueNodes.Get (u);
+      // Set the default gateway for the UE
+      Ptr<Ipv4StaticRouting> ueStaticRouting = ipv4RoutingHelper.GetStaticRouting (ueNode->GetObject<Ipv4> ());
+      ueStaticRouting->SetDefaultRoute (epcHelper->GetUeDefaultGatewayAddress (), 1);
+    }
+
+  // Attach a UE to a eNB
+  lteHelper->Attach (ueDevs, enbDevs.Get (0));
+
+  // Activate an EPS bearer on all UEs
+
+  for (uint32_t u = 0; u < ueNodes.GetN (); ++u)
+    {
+      Ptr<NetDevice> ueDevice = ueDevs.Get (u);
+      GbrQosInformation qos;
+      qos.gbrDl = (m_packetSize.at (u) + 32) * (1000 / m_interval) * 8;  // bit/s, considering IP, UDP, RLC, PDCP header size
+      qos.gbrUl = (m_packetSize.at (u) + 32) * (1000 / m_interval) * 8;
+      qos.mbrDl = qos.gbrDl;
+      qos.mbrUl = qos.gbrUl;
+
+      enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
+      EpsBearer bearer (q, qos);
+      bearer.arp.priorityLevel = 15 - (u + 1);
+      bearer.arp.preemptionCapability = true;
+      bearer.arp.preemptionVulnerability = true;
+      lteHelper->ActivateDedicatedEpsBearer (ueDevice, bearer, EpcTft::Default ());
+    }
+
+
+  // Install downlink and uplink applications
+  uint16_t dlPort = 1234;
+  uint16_t ulPort = 2000;
+  PacketSinkHelper dlPacketSinkHelper ("ns3::UdpSocketFactory", InetSocketAddress (Ipv4Address::GetAny (), dlPort));
+  PacketSinkHelper ulPacketSinkHelper ("ns3::UdpSocketFactory", InetSocketAddress (Ipv4Address::GetAny (), ulPort));
+  ApplicationContainer clientApps;
+  ApplicationContainer serverApps;
+  for (uint32_t u = 0; u < ueNodes.GetN (); ++u)
+    {
+      ++ulPort;
+      serverApps.Add (dlPacketSinkHelper.Install (ueNodes.Get (u))); // receive packets from remotehost
+      serverApps.Add (ulPacketSinkHelper.Install (remoteHost));  // receive packets from UEs
+
+      UdpClientHelper dlClient (ueIpIface.GetAddress (u), dlPort); // uplink packets generator
+      dlClient.SetAttribute ("Interval", TimeValue (MilliSeconds (m_interval)));
+      dlClient.SetAttribute ("MaxPackets", UintegerValue (1000000));
+      dlClient.SetAttribute ("PacketSize", UintegerValue (m_packetSize.at (u)));
+
+      UdpClientHelper ulClient (remoteHostAddr, ulPort);           // downlink packets generator
+      ulClient.SetAttribute ("Interval", TimeValue (MilliSeconds (m_interval)));
+      ulClient.SetAttribute ("MaxPackets", UintegerValue (1000000));
+      ulClient.SetAttribute ("PacketSize", UintegerValue (m_packetSize.at (u)));
+
+      clientApps.Add (dlClient.Install (remoteHost));
+      clientApps.Add (ulClient.Install (ueNodes.Get (u)));
+    }
+
+
+  serverApps.Start (Seconds (0.030));
+  clientApps.Start (Seconds (0.030));
+
+  double statsStartTime = 0.04; // need to allow for RRC connection establishment + SRS
+  double statsDuration = 1.0;
+  double tolerance = 0.1;
+
+  lteHelper->EnableRlcTraces ();
+  Ptr<RadioBearerStatsCalculator> rlcStats = lteHelper->GetRlcStats ();
+  rlcStats->SetAttribute ("StartTime", TimeValue (Seconds (statsStartTime)));
+  rlcStats->SetAttribute ("EpochDuration", TimeValue (Seconds (statsDuration)));
+
+
+  //get ue device pointer for UE-ID 0 IMSI 1 and enb device pointer
+  Ptr<NetDevice> ueDevice = ueDevs.Get (0);
+  Ptr<NetDevice> enbDevice = enbDevs.Get (0);
+
+  /*
+   *   Instantiate De-activation using Simulator::Schedule() method which will initiate bearer de-activation after deActivateTime
+   *   Instantiate De-activation in sequence (Time const &time, MEM mem_ptr, OBJ obj, T1 a1, T2 a2, T3 a3)
+   */
+  Time deActivateTime (Seconds (1.5));
+  Simulator::Schedule (deActivateTime, &LteHelper::DeActivateDedicatedEpsBearer, lteHelper, ueDevice, enbDevice, 2);
+
+  //stop simulation after 3 seconds
+  Simulator::Stop (Seconds (3.0));
+
+  Simulator::Run ();
+
+  NS_LOG_INFO ("DL - Test with " << m_nUser << " user(s)");
+  std::vector <uint64_t> dlDataRxed;
+  std::vector <uint64_t> dlDataTxed;
+  for (int i = 0; i < m_nUser; i++)
+    {
+      // get the imsi
+      uint64_t imsi = ueDevs.Get (i)->GetObject<LteUeNetDevice> ()->GetImsi ();
+      // get the lcId
+      // lcId is hard-coded, since only one dedicated bearer is added
+      uint8_t lcId = 4;
+      dlDataRxed.push_back (rlcStats->GetDlRxData (imsi, lcId));
+      dlDataTxed.push_back (rlcStats->GetDlTxData (imsi, lcId));
+      NS_LOG_INFO ("\tUser " << i << " dist " << m_dist.at (i) << " imsi " << imsi << " bytes rxed " << (double)dlDataRxed.at (i) << "  thr " << (double)dlDataRxed.at (i) / statsDuration << " ref " << m_estThrPssDl.at (i));
+      NS_LOG_INFO ("\tUser " << i << " imsi " << imsi << " bytes txed " << (double)dlDataTxed.at (i) << "  thr " << (double)dlDataTxed.at (i) / statsDuration);
+    }
+
+  for (int i = 0; i < m_nUser; i++)
+    {
+      uint64_t imsi = ueDevs.Get (i)->GetObject<LteUeNetDevice> ()->GetImsi ();
+
+      /*
+       * For UE ID-0 IMSI 1, LCID=4 is deactivated hence If traffic seen on it, test case should fail
+       * Else For other UE's, test case should validate throughput
+       */
+      if (imsi == 1)
+        {
+          NS_TEST_ASSERT_MSG_EQ ((double)dlDataTxed.at (i), 0, "Invalid LCID in Statistics ");
+        }
+      else
+        {
+          NS_TEST_ASSERT_MSG_EQ_TOL ((double)dlDataTxed.at (i) / statsDuration, m_estThrPssDl.at (i), m_estThrPssDl.at (i) * tolerance, " Unfair Throughput!");
+        }
+    }
+
+  Simulator::Destroy ();
+}
+}
diff -Naur ns-3.23/src/lte/test/lte-test-deactivate-bearer.h ns-3.24/src/lte/test/lte-test-deactivate-bearer.h
--- ns-3.23/src/lte/test/lte-test-deactivate-bearer.h	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/lte/test/lte-test-deactivate-bearer.h	2015-09-15 11:18:44.000000000 -0700
@@ -1,37 +1,39 @@
-#ifndef LENA_TEST_DEACTIVATE_BEARER_H
-#define LENA_TEST_DEACTIVATE_BEARER_H
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 
-#include "ns3/simulator.h"
-#include "ns3/test.h"
-
-
-namespace ns3 {
-
-class LenaDeactivateBearerTestCase : public TestCase
-{
-public:
-  LenaDeactivateBearerTestCase (std::vector<uint16_t> dist, std::vector<uint32_t> estThrPssDl, std::vector<uint16_t> packetSize, uint16_t interval, bool  errorModelEnabled, bool useIdealRrc);
-  virtual ~LenaDeactivateBearerTestCase ();
-
-private:
-  static std::string BuildNameString (uint16_t nUser, std::vector<uint16_t> dist);
-  virtual void DoRun (void);
-  uint16_t m_nUser;
-  std::vector<uint16_t> m_dist;
-  std::vector<uint16_t> m_packetSize;  // byte
-  uint16_t m_interval;    // ms
-  std::vector<uint32_t> m_estThrPssDl;
-  bool m_errorModelEnabled;
-};
-
-
-
-class LenaTestBearerDeactivateSuite : public TestSuite
-{
-public:
-  LenaTestBearerDeactivateSuite ();
-};
-
-} // namespace ns3
-
-#endif
+#ifndef LENA_TEST_DEACTIVATE_BEARER_H
+#define LENA_TEST_DEACTIVATE_BEARER_H
+
+#include "ns3/simulator.h"
+#include "ns3/test.h"
+
+
+namespace ns3 {
+
+class LenaDeactivateBearerTestCase : public TestCase
+{
+public:
+  LenaDeactivateBearerTestCase (std::vector<uint16_t> dist, std::vector<uint32_t> estThrPssDl, std::vector<uint16_t> packetSize, uint16_t interval, bool  errorModelEnabled, bool useIdealRrc);
+  virtual ~LenaDeactivateBearerTestCase ();
+
+private:
+  static std::string BuildNameString (uint16_t nUser, std::vector<uint16_t> dist);
+  virtual void DoRun (void);
+  uint16_t m_nUser;
+  std::vector<uint16_t> m_dist;
+  std::vector<uint16_t> m_packetSize;  // byte
+  uint16_t m_interval;    // ms
+  std::vector<uint32_t> m_estThrPssDl;
+  bool m_errorModelEnabled;
+};
+
+
+
+class LenaTestBearerDeactivateSuite : public TestSuite
+{
+public:
+  LenaTestBearerDeactivateSuite ();
+};
+
+} // namespace ns3
+
+#endif
diff -Naur ns-3.23/src/lte/test/test-asn1-encoding.cc ns-3.24/src/lte/test/test-asn1-encoding.cc
--- ns-3.23/src/lte/test/test-asn1-encoding.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/lte/test/test-asn1-encoding.cc	2015-09-15 11:18:44.000000000 -0700
@@ -100,12 +100,12 @@
   Ptr<Packet> packet;
 };
 
-RrcHeaderTestCase :: RrcHeaderTestCase (std::string s) : TestCase (s)
+RrcHeaderTestCase::RrcHeaderTestCase (std::string s) : TestCase (s)
 {
 }
 
 LteRrcSap::RadioResourceConfigDedicated
-RrcHeaderTestCase :: CreateRadioResourceConfigDedicated ()
+RrcHeaderTestCase::CreateRadioResourceConfigDedicated ()
 {
   LteRrcSap::RadioResourceConfigDedicated rrd;
 
@@ -159,7 +159,7 @@
 }
 
 void
-RrcHeaderTestCase :: AssertEqualRadioResourceConfigDedicated (LteRrcSap::RadioResourceConfigDedicated rrcd1, LteRrcSap::RadioResourceConfigDedicated rrcd2)
+RrcHeaderTestCase::AssertEqualRadioResourceConfigDedicated (LteRrcSap::RadioResourceConfigDedicated rrcd1, LteRrcSap::RadioResourceConfigDedicated rrcd2)
 {
   NS_TEST_ASSERT_MSG_EQ (rrcd1.srbToAddModList.size (), rrcd2.srbToAddModList.size (),"SrbToAddModList different sizes");
 
diff -Naur ns-3.23/src/mesh/bindings/modulegen__gcc_ILP32.py ns-3.24/src/mesh/bindings/modulegen__gcc_ILP32.py
--- ns-3.23/src/mesh/bindings/modulegen__gcc_ILP32.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/bindings/modulegen__gcc_ILP32.py	2015-09-15 11:18:44.000000000 -0700
@@ -23,11 +23,11 @@
     ## wifi-mac-header.h (module 'wifi'): ns3::WifiMacType [enumeration]
     module.add_enum('WifiMacType', ['WIFI_MAC_CTL_RTS', 'WIFI_MAC_CTL_CTS', 'WIFI_MAC_CTL_ACK', 'WIFI_MAC_CTL_BACKREQ', 'WIFI_MAC_CTL_BACKRESP', 'WIFI_MAC_CTL_CTLWRAPPER', 'WIFI_MAC_MGT_BEACON', 'WIFI_MAC_MGT_ASSOCIATION_REQUEST', 'WIFI_MAC_MGT_ASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_DISASSOCIATION', 'WIFI_MAC_MGT_REASSOCIATION_REQUEST', 'WIFI_MAC_MGT_REASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_PROBE_REQUEST', 'WIFI_MAC_MGT_PROBE_RESPONSE', 'WIFI_MAC_MGT_AUTHENTICATION', 'WIFI_MAC_MGT_DEAUTHENTICATION', 'WIFI_MAC_MGT_ACTION', 'WIFI_MAC_MGT_ACTION_NO_ACK', 'WIFI_MAC_MGT_MULTIHOP_ACTION', 'WIFI_MAC_DATA', 'WIFI_MAC_DATA_CFACK', 'WIFI_MAC_DATA_CFPOLL', 'WIFI_MAC_DATA_CFACK_CFPOLL', 'WIFI_MAC_DATA_NULL', 'WIFI_MAC_DATA_NULL_CFACK', 'WIFI_MAC_DATA_NULL_CFPOLL', 'WIFI_MAC_DATA_NULL_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA', 'WIFI_MAC_QOSDATA_CFACK', 'WIFI_MAC_QOSDATA_CFPOLL', 'WIFI_MAC_QOSDATA_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA_NULL', 'WIFI_MAC_QOSDATA_NULL_CFPOLL', 'WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL'], import_from_module='ns.wifi')
     ## wifi-preamble.h (module 'wifi'): ns3::WifiPreamble [enumeration]
-    module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF', 'WIFI_PREAMBLE_NONE'], import_from_module='ns.wifi')
+    module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF', 'WIFI_PREAMBLE_VHT', 'WIFI_PREAMBLE_NONE'], import_from_module='ns.wifi')
     ## wifi-mode.h (module 'wifi'): ns3::WifiModulationClass [enumeration]
-    module.add_enum('WifiModulationClass', ['WIFI_MOD_CLASS_UNKNOWN', 'WIFI_MOD_CLASS_IR', 'WIFI_MOD_CLASS_FHSS', 'WIFI_MOD_CLASS_DSSS', 'WIFI_MOD_CLASS_ERP_PBCC', 'WIFI_MOD_CLASS_DSSS_OFDM', 'WIFI_MOD_CLASS_ERP_OFDM', 'WIFI_MOD_CLASS_OFDM', 'WIFI_MOD_CLASS_HT'], import_from_module='ns.wifi')
+    module.add_enum('WifiModulationClass', ['WIFI_MOD_CLASS_UNKNOWN', 'WIFI_MOD_CLASS_IR', 'WIFI_MOD_CLASS_FHSS', 'WIFI_MOD_CLASS_DSSS', 'WIFI_MOD_CLASS_HR_DSSS', 'WIFI_MOD_CLASS_ERP_PBCC', 'WIFI_MOD_CLASS_DSSS_OFDM', 'WIFI_MOD_CLASS_ERP_OFDM', 'WIFI_MOD_CLASS_OFDM', 'WIFI_MOD_CLASS_HT', 'WIFI_MOD_CLASS_VHT'], import_from_module='ns.wifi')
     ## wifi-phy-standard.h (module 'wifi'): ns3::WifiPhyStandard [enumeration]
-    module.add_enum('WifiPhyStandard', ['WIFI_PHY_STANDARD_80211a', 'WIFI_PHY_STANDARD_80211b', 'WIFI_PHY_STANDARD_80211g', 'WIFI_PHY_STANDARD_80211_10MHZ', 'WIFI_PHY_STANDARD_80211_5MHZ', 'WIFI_PHY_STANDARD_holland', 'WIFI_PHY_STANDARD_80211n_2_4GHZ', 'WIFI_PHY_STANDARD_80211n_5GHZ'], import_from_module='ns.wifi')
+    module.add_enum('WifiPhyStandard', ['WIFI_PHY_STANDARD_80211a', 'WIFI_PHY_STANDARD_80211b', 'WIFI_PHY_STANDARD_80211g', 'WIFI_PHY_STANDARD_80211_10MHZ', 'WIFI_PHY_STANDARD_80211_5MHZ', 'WIFI_PHY_STANDARD_holland', 'WIFI_PHY_STANDARD_80211n_2_4GHZ', 'WIFI_PHY_STANDARD_80211n_5GHZ', 'WIFI_PHY_STANDARD_80211ac'], import_from_module='ns.wifi')
     ## wifi-mode.h (module 'wifi'): ns3::WifiCodeRate [enumeration]
     module.add_enum('WifiCodeRate', ['WIFI_CODE_RATE_UNDEFINED', 'WIFI_CODE_RATE_3_4', 'WIFI_CODE_RATE_2_3', 'WIFI_CODE_RATE_1_2', 'WIFI_CODE_RATE_5_6'], import_from_module='ns.wifi')
     ## qos-utils.h (module 'wifi'): ns3::AcIndex [enumeration]
@@ -135,7 +135,7 @@
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
+    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SSL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
@@ -186,6 +186,10 @@
     module.add_class('int64x64_t', import_from_module='ns.core')
     ## int64x64-double.h (module 'core'): ns3::int64x64_t::impl_type [enumeration]
     module.add_enum('impl_type', ['int128_impl', 'cairo_impl', 'ld_impl'], outer_class=root_module['ns3::int64x64_t'], import_from_module='ns.core')
+    ## wifi-phy.h (module 'wifi'): ns3::mpduInfo [struct]
+    module.add_class('mpduInfo', import_from_module='ns.wifi')
+    ## wifi-phy.h (module 'wifi'): ns3::signalNoiseDbm [struct]
+    module.add_class('signalNoiseDbm', import_from_module='ns.wifi')
     ## chunk.h (module 'network'): ns3::Chunk [class]
     module.add_class('Chunk', import_from_module='ns.network', parent=root_module['ns3::ObjectBase'])
     ## header.h (module 'network'): ns3::Header [class]
@@ -390,6 +394,12 @@
     module.add_class('TypeIdValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## uinteger.h (module 'core'): ns3::UintegerValue [class]
     module.add_class('UintegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilities [class]
+    module.add_class('VhtCapabilities', import_from_module='ns.wifi', parent=root_module['ns3::WifiInformationElement'])
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilitiesChecker [class]
+    module.add_class('VhtCapabilitiesChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilitiesValue [class]
+    module.add_class('VhtCapabilitiesValue', import_from_module='ns.wifi', parent=root_module['ns3::AttributeValue'])
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeChecker [class]
     module.add_class('WifiModeChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeValue [class]
@@ -411,23 +421,16 @@
     ## mesh-wifi-interface-mac.h (module 'mesh'): ns3::MeshWifiInterfaceMac [class]
     module.add_class('MeshWifiInterfaceMac', parent=root_module['ns3::RegularWifiMac'])
     module.add_container('ns3::WifiModeList', 'ns3::WifiMode', container_type=u'vector')
-    module.add_container('ns3::WifiMcsList', 'unsigned char', container_type=u'vector')
     module.add_container('std::vector< ns3::Ptr< ns3::NetDevice > >', 'ns3::Ptr< ns3::NetDevice >', container_type=u'vector')
-    typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >', u'ns3::WifiMcsList')
-    typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >*', u'ns3::WifiMcsList*')
-    typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >&', u'ns3::WifiMcsList&')
     typehandlers.add_type_alias(u'uint8_t', u'ns3::WifiInformationElementId')
     typehandlers.add_type_alias(u'uint8_t*', u'ns3::WifiInformationElementId*')
     typehandlers.add_type_alias(u'uint8_t&', u'ns3::WifiInformationElementId&')
-    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >', u'ns3::WifiModeListIterator')
-    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >*', u'ns3::WifiModeListIterator*')
-    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >&', u'ns3::WifiModeListIterator&')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >', u'ns3::WifiModeList')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >*', u'ns3::WifiModeList*')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >&', u'ns3::WifiModeList&')
-    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >', u'ns3::WifiMcsListIterator')
-    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >*', u'ns3::WifiMcsListIterator*')
-    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >&', u'ns3::WifiMcsListIterator&')
+    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >', u'ns3::WifiModeListIterator')
+    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >*', u'ns3::WifiModeListIterator*')
+    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >&', u'ns3::WifiModeListIterator&')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -441,6 +444,12 @@
     register_types_ns3_Hash(nested_module)
     
     
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
+    
     ## Register a nested module for the namespace dot11s
     
     nested_module = module.add_cpp_namespace('dot11s')
@@ -493,6 +502,37 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *', u'ns3::TracedValueCallback::Double')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) **', u'ns3::TracedValueCallback::Double*')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *&', u'ns3::TracedValueCallback::Double&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *', u'ns3::TracedValueCallback::Uint8')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) **', u'ns3::TracedValueCallback::Uint8*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *&', u'ns3::TracedValueCallback::Uint8&')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *', u'ns3::TracedValueCallback::Int32')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) **', u'ns3::TracedValueCallback::Int32*')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *&', u'ns3::TracedValueCallback::Int32&')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *', u'ns3::TracedValueCallback::Bool')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) **', u'ns3::TracedValueCallback::Bool*')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *&', u'ns3::TracedValueCallback::Bool&')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *', u'ns3::TracedValueCallback::Int8')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) **', u'ns3::TracedValueCallback::Int8*')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *&', u'ns3::TracedValueCallback::Int8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *', u'ns3::TracedValueCallback::Uint16')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) **', u'ns3::TracedValueCallback::Uint16*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *&', u'ns3::TracedValueCallback::Uint16&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *', u'ns3::TracedValueCallback::Uint32')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) **', u'ns3::TracedValueCallback::Uint32*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *&', u'ns3::TracedValueCallback::Uint32&')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *', u'ns3::TracedValueCallback::Int16')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) **', u'ns3::TracedValueCallback::Int16*')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *&', u'ns3::TracedValueCallback::Int16&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_types_ns3_dot11s(module):
     root_module = module.get_root()
     
@@ -554,10 +594,18 @@
     module.add_class('PeerLink', parent=root_module['ns3::Object'])
     ## peer-link.h (module 'mesh'): ns3::dot11s::PeerLink::PeerState [enumeration]
     module.add_enum('PeerState', ['IDLE', 'OPN_SNT', 'CNF_RCVD', 'OPN_RCVD', 'ESTAB', 'HOLDING'], outer_class=root_module['ns3::dot11s::PeerLink'])
-    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkFrameStart [class]
-    module.add_class('PeerLinkFrameStart', parent=root_module['ns3::Header'])
-    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkFrameStart::PlinkFrameStartFields [struct]
-    module.add_class('PlinkFrameStartFields', outer_class=root_module['ns3::dot11s::PeerLinkFrameStart'])
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkCloseStart [class]
+    module.add_class('PeerLinkCloseStart', parent=root_module['ns3::Header'])
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkCloseStart::PlinkCloseStartFields [struct]
+    module.add_class('PlinkCloseStartFields', outer_class=root_module['ns3::dot11s::PeerLinkCloseStart'])
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkConfirmStart [class]
+    module.add_class('PeerLinkConfirmStart', parent=root_module['ns3::Header'])
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields [struct]
+    module.add_class('PlinkConfirmStartFields', outer_class=root_module['ns3::dot11s::PeerLinkConfirmStart'])
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkOpenStart [class]
+    module.add_class('PeerLinkOpenStart', parent=root_module['ns3::Header'])
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields [struct]
+    module.add_class('PlinkOpenStartFields', outer_class=root_module['ns3::dot11s::PeerLinkOpenStart'])
     ## peer-management-protocol.h (module 'mesh'): ns3::dot11s::PeerManagementProtocol [class]
     module.add_class('PeerManagementProtocol', parent=root_module['ns3::Object'])
     module.add_container('std::vector< std::pair< unsigned int, ns3::Mac48Address > >', 'std::pair< unsigned int, ns3::Mac48Address >', container_type=u'vector')
@@ -651,6 +699,8 @@
     register_Ns3WifiTxVector_methods(root_module, root_module['ns3::WifiTxVector'])
     register_Ns3Empty_methods(root_module, root_module['ns3::empty'])
     register_Ns3Int64x64_t_methods(root_module, root_module['ns3::int64x64_t'])
+    register_Ns3MpduInfo_methods(root_module, root_module['ns3::mpduInfo'])
+    register_Ns3SignalNoiseDbm_methods(root_module, root_module['ns3::signalNoiseDbm'])
     register_Ns3Chunk_methods(root_module, root_module['ns3::Chunk'])
     register_Ns3Header_methods(root_module, root_module['ns3::Header'])
     register_Ns3MgtAddBaRequestHeader_methods(root_module, root_module['ns3::MgtAddBaRequestHeader'])
@@ -742,6 +792,9 @@
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
     register_Ns3UintegerValue_methods(root_module, root_module['ns3::UintegerValue'])
+    register_Ns3VhtCapabilities_methods(root_module, root_module['ns3::VhtCapabilities'])
+    register_Ns3VhtCapabilitiesChecker_methods(root_module, root_module['ns3::VhtCapabilitiesChecker'])
+    register_Ns3VhtCapabilitiesValue_methods(root_module, root_module['ns3::VhtCapabilitiesValue'])
     register_Ns3WifiModeChecker_methods(root_module, root_module['ns3::WifiModeChecker'])
     register_Ns3WifiModeValue_methods(root_module, root_module['ns3::WifiModeValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
@@ -778,8 +831,12 @@
     register_Ns3Dot11sIeRann_methods(root_module, root_module['ns3::dot11s::IeRann'])
     register_Ns3Dot11sMeshHeader_methods(root_module, root_module['ns3::dot11s::MeshHeader'])
     register_Ns3Dot11sPeerLink_methods(root_module, root_module['ns3::dot11s::PeerLink'])
-    register_Ns3Dot11sPeerLinkFrameStart_methods(root_module, root_module['ns3::dot11s::PeerLinkFrameStart'])
-    register_Ns3Dot11sPeerLinkFrameStartPlinkFrameStartFields_methods(root_module, root_module['ns3::dot11s::PeerLinkFrameStart::PlinkFrameStartFields'])
+    register_Ns3Dot11sPeerLinkCloseStart_methods(root_module, root_module['ns3::dot11s::PeerLinkCloseStart'])
+    register_Ns3Dot11sPeerLinkCloseStartPlinkCloseStartFields_methods(root_module, root_module['ns3::dot11s::PeerLinkCloseStart::PlinkCloseStartFields'])
+    register_Ns3Dot11sPeerLinkConfirmStart_methods(root_module, root_module['ns3::dot11s::PeerLinkConfirmStart'])
+    register_Ns3Dot11sPeerLinkConfirmStartPlinkConfirmStartFields_methods(root_module, root_module['ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields'])
+    register_Ns3Dot11sPeerLinkOpenStart_methods(root_module, root_module['ns3::dot11s::PeerLinkOpenStart'])
+    register_Ns3Dot11sPeerLinkOpenStartPlinkOpenStartFields_methods(root_module, root_module['ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields'])
     register_Ns3Dot11sPeerManagementProtocol_methods(root_module, root_module['ns3::dot11s::PeerManagementProtocol'])
     register_Ns3FlameFlameHeader_methods(root_module, root_module['ns3::flame::FlameHeader'])
     register_Ns3FlameFlameProtocol_methods(root_module, root_module['ns3::flame::FlameProtocol'])
@@ -1115,6 +1172,10 @@
     cls.add_method('SetStartingSequence', 
                    'void', 
                    [param('uint16_t', 'seq')])
+    ## block-ack-agreement.h (module 'wifi'): void ns3::BlockAckAgreement::SetStartingSequenceControl(uint16_t seq) [member function]
+    cls.add_method('SetStartingSequenceControl', 
+                   'void', 
+                   [param('uint16_t', 'seq')])
     ## block-ack-agreement.h (module 'wifi'): void ns3::BlockAckAgreement::SetTimeout(uint16_t timeout) [member function]
     cls.add_method('SetTimeout', 
                    'void', 
@@ -1291,17 +1352,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -1323,11 +1384,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -1337,16 +1393,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -1584,14 +1630,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -1652,11 +1702,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CapabilityInformation_methods(root_module, cls):
@@ -2802,7 +2847,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -2820,10 +2865,10 @@
     cls.add_method('Close', 
                    'void', 
                    [])
-    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
+    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t & packets, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
     cls.add_method('Diff', 
                    'bool', 
-                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
+                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t &', 'packets'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
                    is_static=True)
     ## pcap-file.h (module 'network'): bool ns3::PcapFile::Eof() const [member function]
     cls.add_method('Eof', 
@@ -2887,10 +2932,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header & header, ns3::Ptr<ns3::Packet const> p) [member function]
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header const & header, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file.h (module 'network'): ns3::PcapFile::SNAPLEN_DEFAULT [variable]
     cls.add_static_attribute('SNAPLEN_DEFAULT', 'uint32_t const', is_const=True)
     ## pcap-file.h (module 'network'): ns3::PcapFile::ZONE_DEFAULT [variable]
@@ -3037,10 +3082,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -3453,24 +3498,24 @@
     cls.add_constructor([])
     ## wifi-mode.h (module 'wifi'): ns3::WifiMode::WifiMode(std::string name) [constructor]
     cls.add_constructor([param('std::string', 'name')])
-    ## wifi-mode.h (module 'wifi'): uint32_t ns3::WifiMode::GetBandwidth() const [member function]
-    cls.add_method('GetBandwidth', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## wifi-mode.h (module 'wifi'): ns3::WifiCodeRate ns3::WifiMode::GetCodeRate() const [member function]
+    ## wifi-mode.h (module 'wifi'): ns3::WifiCodeRate ns3::WifiMode::GetCodeRate(uint8_t nss) const [member function]
     cls.add_method('GetCodeRate', 
                    'ns3::WifiCodeRate', 
-                   [], 
+                   [param('uint8_t', 'nss')], 
                    is_const=True)
-    ## wifi-mode.h (module 'wifi'): uint8_t ns3::WifiMode::GetConstellationSize() const [member function]
+    ## wifi-mode.h (module 'wifi'): uint16_t ns3::WifiMode::GetConstellationSize(uint8_t nss) const [member function]
     cls.add_method('GetConstellationSize', 
-                   'uint8_t', 
-                   [], 
+                   'uint16_t', 
+                   [param('uint8_t', 'nss')], 
                    is_const=True)
-    ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetDataRate() const [member function]
+    ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetDataRate(uint32_t channelWidth, bool isShortGuardInterval, uint8_t nss) const [member function]
     cls.add_method('GetDataRate', 
                    'uint64_t', 
+                   [param('uint32_t', 'channelWidth'), param('bool', 'isShortGuardInterval'), param('uint8_t', 'nss')], 
+                   is_const=True)
+    ## wifi-mode.h (module 'wifi'): uint8_t ns3::WifiMode::GetMcsValue() const [member function]
+    cls.add_method('GetMcsValue', 
+                   'uint8_t', 
                    [], 
                    is_const=True)
     ## wifi-mode.h (module 'wifi'): ns3::WifiModulationClass ns3::WifiMode::GetModulationClass() const [member function]
@@ -3478,10 +3523,10 @@
                    'ns3::WifiModulationClass', 
                    [], 
                    is_const=True)
-    ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetPhyRate() const [member function]
+    ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetPhyRate(uint32_t channelWidth, bool isShortGuardInterval, uint8_t nss) const [member function]
     cls.add_method('GetPhyRate', 
                    'uint64_t', 
-                   [], 
+                   [param('uint32_t', 'channelWidth'), param('bool', 'isShortGuardInterval'), param('uint8_t', 'nss')], 
                    is_const=True)
     ## wifi-mode.h (module 'wifi'): uint32_t ns3::WifiMode::GetUid() const [member function]
     cls.add_method('GetUid', 
@@ -3503,10 +3548,15 @@
 def register_Ns3WifiModeFactory_methods(root_module, cls):
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeFactory::WifiModeFactory(ns3::WifiModeFactory const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::WifiModeFactory const &', 'arg0')])
-    ## wifi-mode.h (module 'wifi'): static ns3::WifiMode ns3::WifiModeFactory::CreateWifiMode(std::string uniqueName, ns3::WifiModulationClass modClass, bool isMandatory, uint32_t bandwidth, uint32_t dataRate, ns3::WifiCodeRate codingRate, uint8_t constellationSize) [member function]
+    ## wifi-mode.h (module 'wifi'): static ns3::WifiMode ns3::WifiModeFactory::CreateWifiMcs(std::string uniqueName, uint8_t mcsValue, ns3::WifiModulationClass modClass) [member function]
+    cls.add_method('CreateWifiMcs', 
+                   'ns3::WifiMode', 
+                   [param('std::string', 'uniqueName'), param('uint8_t', 'mcsValue'), param('ns3::WifiModulationClass', 'modClass')], 
+                   is_static=True)
+    ## wifi-mode.h (module 'wifi'): static ns3::WifiMode ns3::WifiModeFactory::CreateWifiMode(std::string uniqueName, ns3::WifiModulationClass modClass, bool isMandatory, ns3::WifiCodeRate codingRate, uint16_t constellationSize) [member function]
     cls.add_method('CreateWifiMode', 
                    'ns3::WifiMode', 
-                   [param('std::string', 'uniqueName'), param('ns3::WifiModulationClass', 'modClass'), param('bool', 'isMandatory'), param('uint32_t', 'bandwidth'), param('uint32_t', 'dataRate'), param('ns3::WifiCodeRate', 'codingRate'), param('uint8_t', 'constellationSize')], 
+                   [param('std::string', 'uniqueName'), param('ns3::WifiModulationClass', 'modClass'), param('bool', 'isMandatory'), param('ns3::WifiCodeRate', 'codingRate'), param('uint16_t', 'constellationSize')], 
                    is_static=True)
     return
 
@@ -3611,6 +3661,10 @@
     cls.add_constructor([param('ns3::WifiRemoteStationState const &', 'arg0')])
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_address [variable]
     cls.add_instance_attribute('m_address', 'ns3::Mac48Address', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_aggregation [variable]
+    cls.add_instance_attribute('m_aggregation', 'bool', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_channelWidth [variable]
+    cls.add_instance_attribute('m_channelWidth', 'uint32_t', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_greenfield [variable]
     cls.add_instance_attribute('m_greenfield', 'bool', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_info [variable]
@@ -3618,7 +3672,7 @@
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_ness [variable]
     cls.add_instance_attribute('m_ness', 'uint32_t', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_operationalMcsSet [variable]
-    cls.add_instance_attribute('m_operationalMcsSet', 'ns3::WifiMcsList', is_const=False)
+    cls.add_instance_attribute('m_operationalMcsSet', 'ns3::WifiModeList', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_operationalRateSet [variable]
     cls.add_instance_attribute('m_operationalRateSet', 'ns3::WifiModeList', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_rx [variable]
@@ -3637,8 +3691,13 @@
     cls.add_constructor([param('ns3::WifiTxVector const &', 'arg0')])
     ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector() [constructor]
     cls.add_constructor([])
-    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiMode mode, uint8_t powerLevel, uint8_t retries, bool shortGuardInterval, uint8_t nss, uint8_t ness, bool stbc) [constructor]
-    cls.add_constructor([param('ns3::WifiMode', 'mode'), param('uint8_t', 'powerLevel'), param('uint8_t', 'retries'), param('bool', 'shortGuardInterval'), param('uint8_t', 'nss'), param('uint8_t', 'ness'), param('bool', 'stbc')])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiMode mode, uint8_t powerLevel, uint8_t retries, bool shortGuardInterval, uint8_t nss, uint8_t ness, uint32_t channelWidth, bool aggregation, bool stbc) [constructor]
+    cls.add_constructor([param('ns3::WifiMode', 'mode'), param('uint8_t', 'powerLevel'), param('uint8_t', 'retries'), param('bool', 'shortGuardInterval'), param('uint8_t', 'nss'), param('uint8_t', 'ness'), param('uint32_t', 'channelWidth'), param('bool', 'aggregation'), param('bool', 'stbc')])
+    ## wifi-tx-vector.h (module 'wifi'): uint32_t ns3::WifiTxVector::GetChannelWidth() const [member function]
+    cls.add_method('GetChannelWidth', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## wifi-tx-vector.h (module 'wifi'): ns3::WifiMode ns3::WifiTxVector::GetMode() const [member function]
     cls.add_method('GetMode', 
                    'ns3::WifiMode', 
@@ -3664,6 +3723,11 @@
                    'uint8_t', 
                    [], 
                    is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): bool ns3::WifiTxVector::IsAggregation() const [member function]
+    cls.add_method('IsAggregation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## wifi-tx-vector.h (module 'wifi'): bool ns3::WifiTxVector::IsShortGuardInterval() const [member function]
     cls.add_method('IsShortGuardInterval', 
                    'bool', 
@@ -3674,6 +3738,14 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetAggregation(bool aggregation) [member function]
+    cls.add_method('SetAggregation', 
+                   'void', 
+                   [param('bool', 'aggregation')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetChannelWidth(uint32_t channelWidth) [member function]
+    cls.add_method('SetChannelWidth', 
+                   'void', 
+                   [param('uint32_t', 'channelWidth')])
     ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetMode(ns3::WifiMode mode) [member function]
     cls.add_method('SetMode', 
                    'void', 
@@ -3778,6 +3850,28 @@
     cls.add_static_attribute('implementation', 'ns3::int64x64_t::impl_type const', is_const=True)
     return
 
+def register_Ns3MpduInfo_methods(root_module, cls):
+    ## wifi-phy.h (module 'wifi'): ns3::mpduInfo::mpduInfo() [constructor]
+    cls.add_constructor([])
+    ## wifi-phy.h (module 'wifi'): ns3::mpduInfo::mpduInfo(ns3::mpduInfo const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::mpduInfo const &', 'arg0')])
+    ## wifi-phy.h (module 'wifi'): ns3::mpduInfo::packetType [variable]
+    cls.add_instance_attribute('packetType', 'uint8_t', is_const=False)
+    ## wifi-phy.h (module 'wifi'): ns3::mpduInfo::referenceNumber [variable]
+    cls.add_instance_attribute('referenceNumber', 'uint32_t', is_const=False)
+    return
+
+def register_Ns3SignalNoiseDbm_methods(root_module, cls):
+    ## wifi-phy.h (module 'wifi'): ns3::signalNoiseDbm::signalNoiseDbm() [constructor]
+    cls.add_constructor([])
+    ## wifi-phy.h (module 'wifi'): ns3::signalNoiseDbm::signalNoiseDbm(ns3::signalNoiseDbm const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::signalNoiseDbm const &', 'arg0')])
+    ## wifi-phy.h (module 'wifi'): ns3::signalNoiseDbm::noise [variable]
+    cls.add_instance_attribute('noise', 'double', is_const=False)
+    ## wifi-phy.h (module 'wifi'): ns3::signalNoiseDbm::signal [variable]
+    cls.add_instance_attribute('signal', 'double', is_const=False)
+    return
+
 def register_Ns3Chunk_methods(root_module, cls):
     ## chunk.h (module 'network'): ns3::Chunk::Chunk() [constructor]
     cls.add_constructor([])
@@ -4068,6 +4162,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## mgt-headers.h (module 'wifi'): ns3::VhtCapabilities ns3::MgtAssocRequestHeader::GetVhtCapabilities() const [member function]
+    cls.add_method('GetVhtCapabilities', 
+                   'ns3::VhtCapabilities', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocRequestHeader::Print(std::ostream & os) const [member function]
     cls.add_method('Print', 
                    'void', 
@@ -4094,6 +4193,10 @@
     cls.add_method('SetSupportedRates', 
                    'void', 
                    [param('ns3::SupportedRates', 'rates')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocRequestHeader::SetVhtCapabilities(ns3::VhtCapabilities vhtcapabilities) [member function]
+    cls.add_method('SetVhtCapabilities', 
+                   'void', 
+                   [param('ns3::VhtCapabilities', 'vhtcapabilities')])
     return
 
 def register_Ns3MgtAssocResponseHeader_methods(root_module, cls):
@@ -4134,6 +4237,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## mgt-headers.h (module 'wifi'): ns3::VhtCapabilities ns3::MgtAssocResponseHeader::GetVhtCapabilities() const [member function]
+    cls.add_method('GetVhtCapabilities', 
+                   'ns3::VhtCapabilities', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocResponseHeader::Print(std::ostream & os) const [member function]
     cls.add_method('Print', 
                    'void', 
@@ -4156,6 +4264,10 @@
     cls.add_method('SetSupportedRates', 
                    'void', 
                    [param('ns3::SupportedRates', 'rates')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocResponseHeader::SetVhtCapabilities(ns3::VhtCapabilities vhtcapabilities) [member function]
+    cls.add_method('SetVhtCapabilities', 
+                   'void', 
+                   [param('ns3::VhtCapabilities', 'vhtcapabilities')])
     return
 
 def register_Ns3MgtDelBaHeader_methods(root_module, cls):
@@ -4257,6 +4369,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## mgt-headers.h (module 'wifi'): ns3::VhtCapabilities ns3::MgtProbeRequestHeader::GetVhtCapabilities() const [member function]
+    cls.add_method('GetVhtCapabilities', 
+                   'ns3::VhtCapabilities', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeRequestHeader::Print(std::ostream & os) const [member function]
     cls.add_method('Print', 
                    'void', 
@@ -4279,6 +4396,10 @@
     cls.add_method('SetSupportedRates', 
                    'void', 
                    [param('ns3::SupportedRates', 'rates')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeRequestHeader::SetVhtCapabilities(ns3::VhtCapabilities vhtcapabilities) [member function]
+    cls.add_method('SetVhtCapabilities', 
+                   'void', 
+                   [param('ns3::VhtCapabilities', 'vhtcapabilities')])
     return
 
 def register_Ns3MgtProbeResponseHeader_methods(root_module, cls):
@@ -4330,6 +4451,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## mgt-headers.h (module 'wifi'): ns3::VhtCapabilities ns3::MgtProbeResponseHeader::GetVhtCapabilities() const [member function]
+    cls.add_method('GetVhtCapabilities', 
+                   'ns3::VhtCapabilities', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::Print(std::ostream & os) const [member function]
     cls.add_method('Print', 
                    'void', 
@@ -4356,6 +4482,10 @@
     cls.add_method('SetSupportedRates', 
                    'void', 
                    [param('ns3::SupportedRates', 'rates')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetVhtCapabilities(ns3::VhtCapabilities vhtcapabilities) [member function]
+    cls.add_method('SetVhtCapabilities', 
+                   'void', 
+                   [param('ns3::VhtCapabilities', 'vhtcapabilities')])
     return
 
 def register_Ns3Object_methods(root_module, cls):
@@ -4462,10 +4592,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header & header, ns3::Ptr<ns3::Packet const> p) [member function]
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header const & header, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('ns3::Time', 't'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('ns3::Time', 't'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, uint8_t const * buffer, uint32_t length) [member function]
     cls.add_method('Write', 
                    'void', 
@@ -5727,6 +5857,10 @@
     cls.add_method('SetQosEosp', 
                    'void', 
                    [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosMeshControlPresent() [member function]
+    cls.add_method('SetQosMeshControlPresent', 
+                   'void', 
+                   [])
     ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosNoAck() [member function]
     cls.add_method('SetQosNoAck', 
                    'void', 
@@ -5739,6 +5873,10 @@
     cls.add_method('SetQosNoEosp', 
                    'void', 
                    [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosNoMeshControlPresent() [member function]
+    cls.add_method('SetQosNoMeshControlPresent', 
+                   'void', 
+                   [])
     ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosNormalAck() [member function]
     cls.add_method('SetQosNormalAck', 
                    'void', 
@@ -5783,19 +5921,19 @@
                    'int64_t', 
                    [param('int64_t', 'stream')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculatePlcpDuration(ns3::WifiTxVector txvector, ns3::WifiPreamble preamble) [member function]
-    cls.add_method('CalculatePlcpDuration', 
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculatePlcpPreambleAndHeaderDuration(ns3::WifiTxVector txVector, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('CalculatePlcpPreambleAndHeaderDuration', 
                    'ns3::Time', 
-                   [param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble')])
+                   [param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble')])
     ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::CalculateSnr(ns3::WifiMode txMode, double ber) const [member function]
     cls.add_method('CalculateSnr', 
                    'double', 
                    [param('ns3::WifiMode', 'txMode'), param('double', 'ber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
     cls.add_method('CalculateTxDuration', 
                    'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('ConfigureStandard', 
                    'void', 
@@ -5811,11 +5949,6 @@
                    'ns3::Ptr< ns3::WifiChannel >', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetChannelBonding() const [member function]
-    cls.add_method('GetChannelBonding', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint16_t ns3::WifiPhy::GetChannelNumber() const [member function]
     cls.add_method('GetChannelNumber', 
                    'uint16_t', 
@@ -5826,6 +5959,11 @@
                    'ns3::Time', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetChannelWidth() const [member function]
+    cls.add_method('GetChannelWidth', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetDelayUntilIdle() [member function]
     cls.add_method('GetDelayUntilIdle', 
                    'ns3::Time', 
@@ -5906,6 +6044,171 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs0() [member function]
+    cls.add_method('GetHtMcs0', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs1() [member function]
+    cls.add_method('GetHtMcs1', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs10() [member function]
+    cls.add_method('GetHtMcs10', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs11() [member function]
+    cls.add_method('GetHtMcs11', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs12() [member function]
+    cls.add_method('GetHtMcs12', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs13() [member function]
+    cls.add_method('GetHtMcs13', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs14() [member function]
+    cls.add_method('GetHtMcs14', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs15() [member function]
+    cls.add_method('GetHtMcs15', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs16() [member function]
+    cls.add_method('GetHtMcs16', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs17() [member function]
+    cls.add_method('GetHtMcs17', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs18() [member function]
+    cls.add_method('GetHtMcs18', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs19() [member function]
+    cls.add_method('GetHtMcs19', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs2() [member function]
+    cls.add_method('GetHtMcs2', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs20() [member function]
+    cls.add_method('GetHtMcs20', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs21() [member function]
+    cls.add_method('GetHtMcs21', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs22() [member function]
+    cls.add_method('GetHtMcs22', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs23() [member function]
+    cls.add_method('GetHtMcs23', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs24() [member function]
+    cls.add_method('GetHtMcs24', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs25() [member function]
+    cls.add_method('GetHtMcs25', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs26() [member function]
+    cls.add_method('GetHtMcs26', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs27() [member function]
+    cls.add_method('GetHtMcs27', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs28() [member function]
+    cls.add_method('GetHtMcs28', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs29() [member function]
+    cls.add_method('GetHtMcs29', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs3() [member function]
+    cls.add_method('GetHtMcs3', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs30() [member function]
+    cls.add_method('GetHtMcs30', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs31() [member function]
+    cls.add_method('GetHtMcs31', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs4() [member function]
+    cls.add_method('GetHtMcs4', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs5() [member function]
+    cls.add_method('GetHtMcs5', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs6() [member function]
+    cls.add_method('GetHtMcs6', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs7() [member function]
+    cls.add_method('GetHtMcs7', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs8() [member function]
+    cls.add_method('GetHtMcs8', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs9() [member function]
+    cls.add_method('GetHtMcs9', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtPlcpHeaderMode(ns3::WifiMode payloadMode) [member function]
+    cls.add_method('GetHtPlcpHeaderMode', 
+                   'ns3::WifiMode', 
+                   [param('ns3::WifiMode', 'payloadMode')], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetLastRxStartTime() const [member function]
     cls.add_method('GetLastRxStartTime', 
                    'ns3::Time', 
@@ -5916,14 +6219,9 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetMFPlcpHeaderMode(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
-    cls.add_method('GetMFPlcpHeaderMode', 
-                   'ns3::WifiMode', 
-                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetMcs(uint8_t mcs) const [member function]
+    ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::GetMcs(uint8_t mcs) const [member function]
     cls.add_method('GetMcs', 
-                   'uint8_t', 
+                   'ns3::WifiMode', 
                    [param('uint8_t', 'mcs')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::WifiModeList ns3::WifiPhy::GetMembershipSelectorModes(uint32_t selector) [member function]
@@ -5966,21 +6264,6 @@
                    'uint32_t', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate108MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate108MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate120MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate120MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate121_5MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate121_5MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12Mbps() [member function]
     cls.add_method('GetOfdmRate12Mbps', 
                    'ns3::WifiMode', 
@@ -5996,46 +6279,11 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate135MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate135MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate135MbpsBW40MHzShGi() [member function]
-    cls.add_method('GetOfdmRate135MbpsBW40MHzShGi', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate13MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13_5MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate13_5MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13_5MbpsBW5MHz() [member function]
     cls.add_method('GetOfdmRate13_5MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate14_4MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate14_4MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate150MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate150MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate15MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate15MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate18Mbps() [member function]
     cls.add_method('GetOfdmRate18Mbps', 
                    'ns3::WifiMode', 
@@ -6046,21 +6294,11 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate19_5MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate19_5MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate1_5MbpsBW5MHz() [member function]
     cls.add_method('GetOfdmRate1_5MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate21_7MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate21_7MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate24Mbps() [member function]
     cls.add_method('GetOfdmRate24Mbps', 
                    'ns3::WifiMode', 
@@ -6071,46 +6309,21 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate26MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate26MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate27MbpsBW10MHz() [member function]
     cls.add_method('GetOfdmRate27MbpsBW10MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate27MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate27MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate28_9MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate28_9MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate2_25MbpsBW5MHz() [member function]
     cls.add_method('GetOfdmRate2_25MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate30MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate30MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate36Mbps() [member function]
     cls.add_method('GetOfdmRate36Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate39MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate39MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate3MbpsBW10MHz() [member function]
     cls.add_method('GetOfdmRate3MbpsBW10MHz', 
                    'ns3::WifiMode', 
@@ -6121,21 +6334,6 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate40_5MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate40_5MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate43_3MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate43_3MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate45MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate45MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate48Mbps() [member function]
     cls.add_method('GetOfdmRate48Mbps', 
                    'ns3::WifiMode', 
@@ -6151,129 +6349,84 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate52MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate52MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate54Mbps() [member function]
     cls.add_method('GetOfdmRate54Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate54MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate54MbpsBW40MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6Mbps() [member function]
+    cls.add_method('GetOfdmRate6Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate57_8MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate57_8MbpsBW20MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6MbpsBW10MHz() [member function]
+    cls.add_method('GetOfdmRate6MbpsBW10MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate58_5MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate58_5MbpsBW20MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6MbpsBW5MHz() [member function]
+    cls.add_method('GetOfdmRate6MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate60MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate60MbpsBW40MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9Mbps() [member function]
+    cls.add_method('GetOfdmRate9Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate65MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate65MbpsBW20MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9MbpsBW10MHz() [member function]
+    cls.add_method('GetOfdmRate9MbpsBW10MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate65MbpsBW20MHzShGi() [member function]
-    cls.add_method('GetOfdmRate65MbpsBW20MHzShGi', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9MbpsBW5MHz() [member function]
+    cls.add_method('GetOfdmRate9MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6Mbps() [member function]
-    cls.add_method('GetOfdmRate6Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate6MbpsBW10MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate6MbpsBW5MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6_5MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate6_5MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate72_2MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate72_2MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate7_2MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate7_2MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate81MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate81MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate90MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate90MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9Mbps() [member function]
-    cls.add_method('GetOfdmRate9Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate9MbpsBW10MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate9MbpsBW5MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetPayloadDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetPayloadDuration(uint32_t size, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
     cls.add_method('GetPayloadDuration', 
                    'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
-    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHeaderDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHeaderDuration(ns3::WifiTxVector txVector, ns3::WifiPreamble preamble) [member function]
     cls.add_method('GetPlcpHeaderDuration', 
                    'ns3::Time', 
-                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   [param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetPlcpHeaderMode(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetPlcpHeaderMode(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble, ns3::WifiTxVector txVector) [member function]
     cls.add_method('GetPlcpHeaderMode', 
                    'ns3::WifiMode', 
-                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txVector')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHtSigHeaderDuration(ns3::WifiPreamble preamble) [member function]
     cls.add_method('GetPlcpHtSigHeaderDuration', 
                    'ns3::Time', 
                    [param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHtTrainingSymbolDuration(ns3::WifiPreamble preamble, ns3::WifiTxVector txvector) [member function]
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHtTrainingSymbolDuration(ns3::WifiPreamble preamble, ns3::WifiTxVector txVector) [member function]
     cls.add_method('GetPlcpHtTrainingSymbolDuration', 
                    'ns3::Time', 
-                   [param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txvector')], 
+                   [param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txVector')], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpPreambleDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpPreambleDuration(ns3::WifiTxVector txVector, ns3::WifiPreamble preamble) [member function]
     cls.add_method('GetPlcpPreambleDuration', 
                    'ns3::Time', 
-                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   [param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpVhtSigA1Duration(ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpVhtSigA1Duration', 
+                   'ns3::Time', 
+                   [param('ns3::WifiPreamble', 'preamble')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpVhtSigA2Duration(ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpVhtSigA2Duration', 
+                   'ns3::Time', 
+                   [param('ns3::WifiPreamble', 'preamble')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpVhtSigBDuration(ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpVhtSigBDuration', 
+                   'ns3::Time', 
+                   [param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetStateDuration() [member function]
     cls.add_method('GetStateDuration', 
@@ -6300,6 +6453,61 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs0() [member function]
+    cls.add_method('GetVhtMcs0', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs1() [member function]
+    cls.add_method('GetVhtMcs1', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs2() [member function]
+    cls.add_method('GetVhtMcs2', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs3() [member function]
+    cls.add_method('GetVhtMcs3', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs4() [member function]
+    cls.add_method('GetVhtMcs4', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs5() [member function]
+    cls.add_method('GetVhtMcs5', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs6() [member function]
+    cls.add_method('GetVhtMcs6', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs7() [member function]
+    cls.add_method('GetVhtMcs7', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs8() [member function]
+    cls.add_method('GetVhtMcs8', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs9() [member function]
+    cls.add_method('GetVhtMcs9', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtPlcpHeaderMode(ns3::WifiMode payloadMode) [member function]
+    cls.add_method('GetVhtPlcpHeaderMode', 
+                   'ns3::WifiMode', 
+                   [param('ns3::WifiMode', 'payloadMode')], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsModeSupported(ns3::WifiMode mode) const [member function]
     cls.add_method('IsModeSupported', 
                    'bool', 
@@ -6340,19 +6548,14 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::McsToWifiMode(uint8_t mcs) [member function]
-    cls.add_method('McsToWifiMode', 
-                   'ns3::WifiMode', 
-                   [param('uint8_t', 'mcs')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffRx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble, double signalDbm, double noiseDbm) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffRx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, ns3::WifiPreamble preamble, ns3::WifiTxVector txVector, ns3::mpduInfo aMpdu, ns3::signalNoiseDbm signalNoise) [member function]
     cls.add_method('NotifyMonitorSniffRx', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('bool', 'isShortPreamble'), param('double', 'signalDbm'), param('double', 'noiseDbm')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffTx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble, uint8_t txPower) [member function]
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txVector'), param('ns3::mpduInfo', 'aMpdu'), param('ns3::signalNoiseDbm', 'signalNoise')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffTx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, ns3::WifiPreamble preamble, ns3::WifiTxVector txVector, ns3::mpduInfo aMpdu) [member function]
     cls.add_method('NotifyMonitorSniffTx', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('bool', 'isShortPreamble'), param('uint8_t', 'txPower')])
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txVector'), param('ns3::mpduInfo', 'aMpdu')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyRxBegin(ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('NotifyRxBegin', 
                    'void', 
@@ -6387,21 +6590,21 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, uint8_t packetType) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, uint8_t packetType, uint32_t mpduReferenceNumber) [member function]
     cls.add_method('SendPacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'packetType')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelBonding(bool channelbonding) [member function]
-    cls.add_method('SetChannelBonding', 
-                   'void', 
-                   [param('bool', 'channelbonding')], 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'packetType'), param('uint32_t', 'mpduReferenceNumber')], 
                    is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelNumber(uint16_t id) [member function]
     cls.add_method('SetChannelNumber', 
                    'void', 
                    [param('uint16_t', 'id')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelWidth(uint32_t channelwidth) [member function]
+    cls.add_method('SetChannelWidth', 
+                   'void', 
+                   [param('uint32_t', 'channelwidth')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetFrequency(uint32_t freq) [member function]
     cls.add_method('SetFrequency', 
                    'void', 
@@ -6457,11 +6660,6 @@
                    'void', 
                    [param('ns3::WifiPhyListener *', 'listener')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::WifiModeToMcs(ns3::WifiMode mode) [member function]
-    cls.add_method('WifiModeToMcs', 
-                   'uint32_t', 
-                   [param('ns3::WifiMode', 'mode')], 
-                   is_pure_virtual=True, is_virtual=True)
     return
 
 def register_Ns3WifiRemoteStationManager_methods(root_module, cls):
@@ -6473,10 +6671,10 @@
     cls.add_method('AddAllSupportedModes', 
                    'void', 
                    [param('ns3::Mac48Address', 'address')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddBasicMcs(uint8_t mcs) [member function]
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddBasicMcs(ns3::WifiMode mcs) [member function]
     cls.add_method('AddBasicMcs', 
                    'void', 
-                   [param('uint8_t', 'mcs')])
+                   [param('ns3::WifiMode', 'mcs')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddBasicMode(ns3::WifiMode mode) [member function]
     cls.add_method('AddBasicMode', 
                    'void', 
@@ -6485,10 +6683,14 @@
     cls.add_method('AddStationHtCapabilities', 
                    'void', 
                    [param('ns3::Mac48Address', 'from'), param('ns3::HtCapabilities', 'htcapabilities')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddSupportedMcs(ns3::Mac48Address address, uint8_t mcs) [member function]
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddStationVhtCapabilities(ns3::Mac48Address from, ns3::VhtCapabilities vhtcapabilities) [member function]
+    cls.add_method('AddStationVhtCapabilities', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'from'), param('ns3::VhtCapabilities', 'vhtcapabilities')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddSupportedMcs(ns3::Mac48Address address, ns3::WifiMode mcs) [member function]
     cls.add_method('AddSupportedMcs', 
                    'void', 
-                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'mcs')])
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'mcs')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddSupportedMode(ns3::Mac48Address address, ns3::WifiMode mode) [member function]
     cls.add_method('AddSupportedMode', 
                    'void', 
@@ -6501,9 +6703,9 @@
     cls.add_method('GetAckTxVector', 
                    'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'dataMode')])
-    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetBasicMcs(uint32_t i) const [member function]
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetBasicMcs(uint32_t i) const [member function]
     cls.add_method('GetBasicMcs', 
-                   'uint8_t', 
+                   'ns3::WifiMode', 
                    [param('uint32_t', 'i')], 
                    is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetBasicMode(uint32_t i) const [member function]
@@ -6527,9 +6729,9 @@
     cls.add_method('GetDataTxVector', 
                    'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint32_t', 'fullPacketSize')])
-    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetDefaultMcs() const [member function]
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetDefaultMcs() const [member function]
     cls.add_method('GetDefaultMcs', 
-                   'uint8_t', 
+                   'ns3::WifiMode', 
                    [], 
                    is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetDefaultMode() const [member function]
@@ -6612,6 +6814,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::HasVhtSupported() const [member function]
+    cls.add_method('HasVhtSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::IsAssociated(ns3::Mac48Address address) const [member function]
     cls.add_method('IsAssociated', 
                    'bool', 
@@ -6731,6 +6938,10 @@
     cls.add_method('SetRtsCtsThreshold', 
                    'void', 
                    [param('uint32_t', 'threshold')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetVhtSupported(bool enable) [member function]
+    cls.add_method('SetVhtSupported', 
+                   'void', 
+                   [param('bool', 'enable')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetupMac(ns3::Ptr<ns3::WifiMac> mac) [member function]
     cls.add_method('SetupMac', 
                    'void', 
@@ -6741,11 +6952,25 @@
                    'void', 
                    [param('ns3::Ptr< ns3::WifiPhy >', 'phy')], 
                    is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::UpdateFragmentationThreshold() [member function]
+    cls.add_method('UpdateFragmentationThreshold', 
+                   'void', 
+                   [])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetAggregation(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetAggregation', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetChannelWidth(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetChannelWidth', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetGreenfield(ns3::WifiRemoteStation const * station) const [member function]
     cls.add_method('GetGreenfield', 
                    'bool', 
@@ -6761,9 +6986,9 @@
                    'ns3::Ptr< ns3::WifiMac >', 
                    [], 
                    is_const=True, visibility='protected')
-    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetMcsSupported(ns3::WifiRemoteStation const * station, uint32_t i) const [member function]
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetMcsSupported(ns3::WifiRemoteStation const * station, uint32_t i) const [member function]
     cls.add_method('GetMcsSupported', 
-                   'uint8_t', 
+                   'ns3::WifiMode', 
                    [param('ns3::WifiRemoteStation const *', 'station'), param('uint32_t', 'i')], 
                    is_const=True, visibility='protected')
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNMcsSupported(ns3::WifiRemoteStation const * station) const [member function]
@@ -6821,6 +7046,11 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::DoGetAckTxChannelWidth(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetAckTxChannelWidth', 
+                   'uint32_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetAckTxGuardInterval(ns3::Mac48Address address, ns3::WifiMode ackMode) [member function]
     cls.add_method('DoGetAckTxGuardInterval', 
                    'bool', 
@@ -6846,6 +7076,11 @@
                    'bool', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ackMode')], 
                    visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::DoGetBlockAckTxChannelWidth(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetBlockAckTxChannelWidth', 
+                   'uint32_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetBlockAckTxGuardInterval(ns3::Mac48Address address, ns3::WifiMode blockAckMode) [member function]
     cls.add_method('DoGetBlockAckTxGuardInterval', 
                    'bool', 
@@ -6871,6 +7106,11 @@
                    'bool', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'blockAckMode')], 
                    visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::DoGetCtsTxChannelWidth(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetCtsTxChannelWidth', 
+                   'uint32_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetCtsTxGuardInterval(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
     cls.add_method('DoGetCtsTxGuardInterval', 
                    'bool', 
@@ -7112,11 +7352,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -7967,6 +8217,16 @@
                    'uint8_t', 
                    [], 
                    is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetAntennaSelectionCapabilities() const [member function]
+    cls.add_method('GetAntennaSelectionCapabilities', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint16_t ns3::HtCapabilities::GetExtendedHtCapabilities() const [member function]
+    cls.add_method('GetExtendedHtCapabilities', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
     ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetGreenfield() const [member function]
     cls.add_method('GetGreenfield', 
                    'uint8_t', 
@@ -7982,11 +8242,31 @@
                    'uint8_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetLSigProtectionSupport() const [member function]
+    cls.add_method('GetLSigProtectionSupport', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetLdpc() const [member function]
     cls.add_method('GetLdpc', 
                    'uint8_t', 
                    [], 
                    is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetMaxAmpduLength() const [member function]
+    cls.add_method('GetMaxAmpduLength', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetMaxAmsduLength() const [member function]
+    cls.add_method('GetMaxAmsduLength', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint16_t ns3::HtCapabilities::GetRxHighestSupportedDataRate() const [member function]
+    cls.add_method('GetRxHighestSupportedDataRate', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
     ## ht-capabilities.h (module 'wifi'): uint8_t * ns3::HtCapabilities::GetRxMcsBitmask() [member function]
     cls.add_method('GetRxMcsBitmask', 
                    'uint8_t *', 
@@ -8001,6 +8281,11 @@
                    'uint8_t', 
                    [], 
                    is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetShortGuardInterval40() const [member function]
+    cls.add_method('GetShortGuardInterval40', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetSupportedChannelWidth() const [member function]
     cls.add_method('GetSupportedChannelWidth', 
                    'uint8_t', 
@@ -8016,6 +8301,21 @@
                    'uint64_t', 
                    [], 
                    is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint32_t ns3::HtCapabilities::GetTxBfCapabilities() const [member function]
+    cls.add_method('GetTxBfCapabilities', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetTxMaxNSpatialStreams() const [member function]
+    cls.add_method('GetTxMaxNSpatialStreams', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetTxMcsSetDefined() const [member function]
+    cls.add_method('GetTxMcsSetDefined', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## ht-capabilities.h (module 'wifi'): bool ns3::HtCapabilities::IsSupportedMcs(uint8_t mcs) [member function]
     cls.add_method('IsSupportedMcs', 
                    'bool', 
@@ -8034,6 +8334,14 @@
     cls.add_method('SetAmpduParameters', 
                    'void', 
                    [param('uint8_t', 'ctrl')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetAntennaSelectionCapabilities(uint8_t ctrl) [member function]
+    cls.add_method('SetAntennaSelectionCapabilities', 
+                   'void', 
+                   [param('uint8_t', 'ctrl')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetExtendedHtCapabilities(uint16_t ctrl) [member function]
+    cls.add_method('SetExtendedHtCapabilities', 
+                   'void', 
+                   [param('uint16_t', 'ctrl')])
     ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetGreenfield(uint8_t greenfield) [member function]
     cls.add_method('SetGreenfield', 
                    'void', 
@@ -8046,10 +8354,26 @@
     cls.add_method('SetHtSupported', 
                    'void', 
                    [param('uint8_t', 'htsupported')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetLSigProtectionSupport(uint8_t lsigprotection) [member function]
+    cls.add_method('SetLSigProtectionSupport', 
+                   'void', 
+                   [param('uint8_t', 'lsigprotection')])
     ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetLdpc(uint8_t ldpc) [member function]
     cls.add_method('SetLdpc', 
                    'void', 
                    [param('uint8_t', 'ldpc')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetMaxAmpduLength(uint8_t maxampdulength) [member function]
+    cls.add_method('SetMaxAmpduLength', 
+                   'void', 
+                   [param('uint8_t', 'maxampdulength')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetMaxAmsduLength(uint8_t maxamsdulength) [member function]
+    cls.add_method('SetMaxAmsduLength', 
+                   'void', 
+                   [param('uint8_t', 'maxamsdulength')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetRxHighestSupportedDataRate(uint16_t maxsupportedrate) [member function]
+    cls.add_method('SetRxHighestSupportedDataRate', 
+                   'void', 
+                   [param('uint16_t', 'maxsupportedrate')])
     ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetRxMcsBitmask(uint8_t index) [member function]
     cls.add_method('SetRxMcsBitmask', 
                    'void', 
@@ -8058,6 +8382,10 @@
     cls.add_method('SetShortGuardInterval20', 
                    'void', 
                    [param('uint8_t', 'shortguardinterval')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetShortGuardInterval40(uint8_t shortguardinterval) [member function]
+    cls.add_method('SetShortGuardInterval40', 
+                   'void', 
+                   [param('uint8_t', 'shortguardinterval')])
     ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetSupportedChannelWidth(uint8_t supportedchannelwidth) [member function]
     cls.add_method('SetSupportedChannelWidth', 
                    'void', 
@@ -8066,6 +8394,18 @@
     cls.add_method('SetSupportedMcsSet', 
                    'void', 
                    [param('uint64_t', 'ctrl1'), param('uint64_t', 'ctrl2')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetTxBfCapabilities(uint32_t ctrl) [member function]
+    cls.add_method('SetTxBfCapabilities', 
+                   'void', 
+                   [param('uint32_t', 'ctrl')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetTxMaxNSpatialStreams(uint8_t maxtxspatialstreams) [member function]
+    cls.add_method('SetTxMaxNSpatialStreams', 
+                   'void', 
+                   [param('uint8_t', 'maxtxspatialstreams')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetTxMcsSetDefined(uint8_t txmcssetdefined) [member function]
+    cls.add_method('SetTxMcsSetDefined', 
+                   'void', 
+                   [param('uint8_t', 'txmcssetdefined')])
     return
 
 def register_Ns3HtCapabilitiesChecker_methods(root_module, cls):
@@ -8342,15 +8682,25 @@
     return
 
 def register_Ns3MeshInformationElementVector_methods(root_module, cls):
-    ## mesh-information-element-vector.h (module 'mesh'): ns3::MeshInformationElementVector::MeshInformationElementVector() [constructor]
-    cls.add_constructor([])
     ## mesh-information-element-vector.h (module 'mesh'): ns3::MeshInformationElementVector::MeshInformationElementVector(ns3::MeshInformationElementVector const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::MeshInformationElementVector const &', 'arg0')])
+    ## mesh-information-element-vector.h (module 'mesh'): ns3::MeshInformationElementVector::MeshInformationElementVector() [constructor]
+    cls.add_constructor([])
     ## mesh-information-element-vector.h (module 'mesh'): uint32_t ns3::MeshInformationElementVector::DeserializeSingleIe(ns3::Buffer::Iterator start) [member function]
     cls.add_method('DeserializeSingleIe', 
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_virtual=True)
+    ## mesh-information-element-vector.h (module 'mesh'): ns3::TypeId ns3::MeshInformationElementVector::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mesh-information-element-vector.h (module 'mesh'): static ns3::TypeId ns3::MeshInformationElementVector::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     return
 
 def register_Ns3MeshL2RoutingProtocol_methods(root_module, cls):
@@ -8389,6 +8739,11 @@
     cls.add_constructor([])
     ## mesh-stack-installer.h (module 'mesh'): ns3::MeshStack::MeshStack(ns3::MeshStack const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::MeshStack const &', 'arg0')])
+    ## mesh-stack-installer.h (module 'mesh'): static ns3::TypeId ns3::MeshStack::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## mesh-stack-installer.h (module 'mesh'): bool ns3::MeshStack::InstallStack(ns3::Ptr<ns3::MeshPointDevice> mp) [member function]
     cls.add_method('InstallStack', 
                    'bool', 
@@ -8443,6 +8798,11 @@
     cls.add_constructor([])
     ## mgt-headers.h (module 'wifi'): ns3::MgtBeaconHeader::MgtBeaconHeader(ns3::MgtBeaconHeader const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::MgtBeaconHeader const &', 'arg0')])
+    ## mgt-headers.h (module 'wifi'): static ns3::TypeId ns3::MgtBeaconHeader::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     return
 
 def register_Ns3NetDevice_methods(root_module, cls):
@@ -9234,6 +9594,16 @@
                    'bool', 
                    [], 
                    is_const=True, visibility='protected')
+    ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetVhtSupported(bool enable) [member function]
+    cls.add_method('SetVhtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   visibility='protected')
+    ## regular-wifi-mac.h (module 'wifi'): bool ns3::RegularWifiMac::GetVhtSupported() const [member function]
+    cls.add_method('GetVhtSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='protected')
     return
 
 def register_Ns3Ssid_methods(root_module, cls):
@@ -9489,6 +9859,237 @@
                    [param('uint64_t const &', 'value')])
     return
 
+def register_Ns3VhtCapabilities_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilities::VhtCapabilities(ns3::VhtCapabilities const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::VhtCapabilities const &', 'arg0')])
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilities::VhtCapabilities() [constructor]
+    cls.add_constructor([])
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::DeserializeInformationField(ns3::Buffer::Iterator start, uint8_t length) [member function]
+    cls.add_method('DeserializeInformationField', 
+                   'uint8_t', 
+                   [param('ns3::Buffer::Iterator', 'start'), param('uint8_t', 'length')], 
+                   is_virtual=True)
+    ## vht-capabilities.h (module 'wifi'): ns3::WifiInformationElementId ns3::VhtCapabilities::ElementId() const [member function]
+    cls.add_method('ElementId', 
+                   'ns3::WifiInformationElementId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::GetInformationFieldSize() const [member function]
+    cls.add_method('GetInformationFieldSize', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::GetMaxAmpduLengthExponent() const [member function]
+    cls.add_method('GetMaxAmpduLengthExponent', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::GetMaxMpduLength() const [member function]
+    cls.add_method('GetMaxMpduLength', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint16_t ns3::VhtCapabilities::GetRxHighestSupportedLgiDataRate() const [member function]
+    cls.add_method('GetRxHighestSupportedLgiDataRate', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::GetRxLdpc() const [member function]
+    cls.add_method('GetRxLdpc', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint16_t ns3::VhtCapabilities::GetRxMcsMap() const [member function]
+    cls.add_method('GetRxMcsMap', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::GetRxStbc() const [member function]
+    cls.add_method('GetRxStbc', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint16_t ns3::VhtCapabilities::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::GetShortGuardIntervalFor160Mhz() const [member function]
+    cls.add_method('GetShortGuardIntervalFor160Mhz', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::GetShortGuardIntervalFor80Mhz() const [member function]
+    cls.add_method('GetShortGuardIntervalFor80Mhz', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::GetSupportedChannelWidthSet() const [member function]
+    cls.add_method('GetSupportedChannelWidthSet', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint64_t ns3::VhtCapabilities::GetSupportedMcsAndNssSet() const [member function]
+    cls.add_method('GetSupportedMcsAndNssSet', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint16_t ns3::VhtCapabilities::GetTxHighestSupportedLgiDataRate() const [member function]
+    cls.add_method('GetTxHighestSupportedLgiDataRate', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint16_t ns3::VhtCapabilities::GetTxMcsMap() const [member function]
+    cls.add_method('GetTxMcsMap', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::GetTxStbc() const [member function]
+    cls.add_method('GetTxStbc', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint32_t ns3::VhtCapabilities::GetVhtCapabilitiesInfo() const [member function]
+    cls.add_method('GetVhtCapabilitiesInfo', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): bool ns3::VhtCapabilities::IsSupportedMcs(uint8_t mcs, uint8_t Nss) const [member function]
+    cls.add_method('IsSupportedMcs', 
+                   'bool', 
+                   [param('uint8_t', 'mcs'), param('uint8_t', 'Nss')], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): bool ns3::VhtCapabilities::IsSupportedRxMcs(uint8_t mcs) const [member function]
+    cls.add_method('IsSupportedRxMcs', 
+                   'bool', 
+                   [param('uint8_t', 'mcs')], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): bool ns3::VhtCapabilities::IsSupportedTxMcs(uint8_t mcs) const [member function]
+    cls.add_method('IsSupportedTxMcs', 
+                   'bool', 
+                   [param('uint8_t', 'mcs')], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): ns3::Buffer::Iterator ns3::VhtCapabilities::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'ns3::Buffer::Iterator', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SerializeInformationField(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('SerializeInformationField', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetMaxAmpduLengthExponent(uint8_t exponent) [member function]
+    cls.add_method('SetMaxAmpduLengthExponent', 
+                   'void', 
+                   [param('uint8_t', 'exponent')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetMaxMpduLength(uint8_t length) [member function]
+    cls.add_method('SetMaxMpduLength', 
+                   'void', 
+                   [param('uint8_t', 'length')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetRxHighestSupportedLgiDataRate(uint16_t supporteddatarate) [member function]
+    cls.add_method('SetRxHighestSupportedLgiDataRate', 
+                   'void', 
+                   [param('uint16_t', 'supporteddatarate')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetRxLdpc(uint8_t rxldpc) [member function]
+    cls.add_method('SetRxLdpc', 
+                   'void', 
+                   [param('uint8_t', 'rxldpc')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetRxMcsMap(uint16_t map) [member function]
+    cls.add_method('SetRxMcsMap', 
+                   'void', 
+                   [param('uint16_t', 'map')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetRxMcsMap(uint8_t mcs, uint8_t nss) [member function]
+    cls.add_method('SetRxMcsMap', 
+                   'void', 
+                   [param('uint8_t', 'mcs'), param('uint8_t', 'nss')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetRxStbc(uint8_t rxstbc) [member function]
+    cls.add_method('SetRxStbc', 
+                   'void', 
+                   [param('uint8_t', 'rxstbc')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetShortGuardIntervalFor160Mhz(uint8_t shortguardinterval) [member function]
+    cls.add_method('SetShortGuardIntervalFor160Mhz', 
+                   'void', 
+                   [param('uint8_t', 'shortguardinterval')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetShortGuardIntervalFor80Mhz(uint8_t shortguardinterval) [member function]
+    cls.add_method('SetShortGuardIntervalFor80Mhz', 
+                   'void', 
+                   [param('uint8_t', 'shortguardinterval')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetSupportedChannelWidthSet(uint8_t channelwidthset) [member function]
+    cls.add_method('SetSupportedChannelWidthSet', 
+                   'void', 
+                   [param('uint8_t', 'channelwidthset')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetSupportedMcsAndNssSet(uint64_t ctrl) [member function]
+    cls.add_method('SetSupportedMcsAndNssSet', 
+                   'void', 
+                   [param('uint64_t', 'ctrl')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetTxHighestSupportedLgiDataRate(uint16_t supporteddatarate) [member function]
+    cls.add_method('SetTxHighestSupportedLgiDataRate', 
+                   'void', 
+                   [param('uint16_t', 'supporteddatarate')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetTxMcsMap(uint16_t map) [member function]
+    cls.add_method('SetTxMcsMap', 
+                   'void', 
+                   [param('uint16_t', 'map')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetTxMcsMap(uint8_t mcs, uint8_t nss) [member function]
+    cls.add_method('SetTxMcsMap', 
+                   'void', 
+                   [param('uint8_t', 'mcs'), param('uint8_t', 'nss')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetTxStbc(uint8_t txstbc) [member function]
+    cls.add_method('SetTxStbc', 
+                   'void', 
+                   [param('uint8_t', 'txstbc')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetVhtCapabilitiesInfo(uint32_t ctrl) [member function]
+    cls.add_method('SetVhtCapabilitiesInfo', 
+                   'void', 
+                   [param('uint32_t', 'ctrl')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetVhtSupported(uint8_t vhtsupported) [member function]
+    cls.add_method('SetVhtSupported', 
+                   'void', 
+                   [param('uint8_t', 'vhtsupported')])
+    return
+
+def register_Ns3VhtCapabilitiesChecker_methods(root_module, cls):
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilitiesChecker::VhtCapabilitiesChecker() [constructor]
+    cls.add_constructor([])
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilitiesChecker::VhtCapabilitiesChecker(ns3::VhtCapabilitiesChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::VhtCapabilitiesChecker const &', 'arg0')])
+    return
+
+def register_Ns3VhtCapabilitiesValue_methods(root_module, cls):
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilitiesValue::VhtCapabilitiesValue() [constructor]
+    cls.add_constructor([])
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilitiesValue::VhtCapabilitiesValue(ns3::VhtCapabilitiesValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::VhtCapabilitiesValue const &', 'arg0')])
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilitiesValue::VhtCapabilitiesValue(ns3::VhtCapabilities const & value) [constructor]
+    cls.add_constructor([param('ns3::VhtCapabilities const &', 'value')])
+    ## vht-capabilities.h (module 'wifi'): ns3::Ptr<ns3::AttributeValue> ns3::VhtCapabilitiesValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## vht-capabilities.h (module 'wifi'): bool ns3::VhtCapabilitiesValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilities ns3::VhtCapabilitiesValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::VhtCapabilities', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): std::string ns3::VhtCapabilitiesValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilitiesValue::Set(ns3::VhtCapabilities const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::VhtCapabilities const &', 'value')])
+    return
+
 def register_Ns3WifiModeChecker_methods(root_module, cls):
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeChecker::WifiModeChecker() [constructor]
     cls.add_constructor([])
@@ -11440,76 +12041,184 @@
                    is_const=True)
     return
 
-def register_Ns3Dot11sPeerLinkFrameStart_methods(root_module, cls):
+def register_Ns3Dot11sPeerLinkCloseStart_methods(root_module, cls):
     cls.add_binary_comparison_operator('==')
-    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkFrameStart::PeerLinkFrameStart() [constructor]
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkCloseStart::PeerLinkCloseStart() [constructor]
     cls.add_constructor([])
-    ## peer-link-frame.h (module 'mesh'): uint32_t ns3::dot11s::PeerLinkFrameStart::Deserialize(ns3::Buffer::Iterator start) [member function]
+    ## peer-link-frame.h (module 'mesh'): uint32_t ns3::dot11s::PeerLinkCloseStart::Deserialize(ns3::Buffer::Iterator start) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_virtual=True)
-    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkFrameStart::PlinkFrameStartFields ns3::dot11s::PeerLinkFrameStart::GetFields() const [member function]
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkCloseStart::PlinkCloseStartFields ns3::dot11s::PeerLinkCloseStart::GetFields() const [member function]
     cls.add_method('GetFields', 
-                   'ns3::dot11s::PeerLinkFrameStart::PlinkFrameStartFields', 
+                   'ns3::dot11s::PeerLinkCloseStart::PlinkCloseStartFields', 
                    [], 
                    is_const=True)
-    ## peer-link-frame.h (module 'mesh'): ns3::TypeId ns3::dot11s::PeerLinkFrameStart::GetInstanceTypeId() const [member function]
+    ## peer-link-frame.h (module 'mesh'): ns3::TypeId ns3::dot11s::PeerLinkCloseStart::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## peer-link-frame.h (module 'mesh'): uint32_t ns3::dot11s::PeerLinkFrameStart::GetSerializedSize() const [member function]
+    ## peer-link-frame.h (module 'mesh'): uint32_t ns3::dot11s::PeerLinkCloseStart::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## peer-link-frame.h (module 'mesh'): static ns3::TypeId ns3::dot11s::PeerLinkFrameStart::GetTypeId() [member function]
+    ## peer-link-frame.h (module 'mesh'): static ns3::TypeId ns3::dot11s::PeerLinkCloseStart::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## peer-link-frame.h (module 'mesh'): void ns3::dot11s::PeerLinkFrameStart::Print(std::ostream & os) const [member function]
+    ## peer-link-frame.h (module 'mesh'): void ns3::dot11s::PeerLinkCloseStart::Print(std::ostream & os) const [member function]
     cls.add_method('Print', 
                    'void', 
                    [param('std::ostream &', 'os')], 
                    is_const=True, is_virtual=True)
-    ## peer-link-frame.h (module 'mesh'): void ns3::dot11s::PeerLinkFrameStart::Serialize(ns3::Buffer::Iterator start) const [member function]
+    ## peer-link-frame.h (module 'mesh'): void ns3::dot11s::PeerLinkCloseStart::Serialize(ns3::Buffer::Iterator start) const [member function]
     cls.add_method('Serialize', 
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
-    ## peer-link-frame.h (module 'mesh'): void ns3::dot11s::PeerLinkFrameStart::SetPlinkFrameStart(ns3::dot11s::PeerLinkFrameStart::PlinkFrameStartFields arg0) [member function]
-    cls.add_method('SetPlinkFrameStart', 
+    ## peer-link-frame.h (module 'mesh'): void ns3::dot11s::PeerLinkCloseStart::SetPlinkCloseStart(ns3::dot11s::PeerLinkCloseStart::PlinkCloseStartFields arg0) [member function]
+    cls.add_method('SetPlinkCloseStart', 
                    'void', 
-                   [param('ns3::dot11s::PeerLinkFrameStart::PlinkFrameStartFields', 'arg0')])
-    ## peer-link-frame.h (module 'mesh'): void ns3::dot11s::PeerLinkFrameStart::SetPlinkFrameSubtype(uint8_t subtype) [member function]
-    cls.add_method('SetPlinkFrameSubtype', 
+                   [param('ns3::dot11s::PeerLinkCloseStart::PlinkCloseStartFields', 'arg0')])
+    return
+
+def register_Ns3Dot11sPeerLinkCloseStartPlinkCloseStartFields_methods(root_module, cls):
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkCloseStart::PlinkCloseStartFields::PlinkCloseStartFields() [constructor]
+    cls.add_constructor([])
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkCloseStart::PlinkCloseStartFields::PlinkCloseStartFields(ns3::dot11s::PeerLinkCloseStart::PlinkCloseStartFields const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dot11s::PeerLinkCloseStart::PlinkCloseStartFields const &', 'arg0')])
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkCloseStart::PlinkCloseStartFields::meshId [variable]
+    cls.add_instance_attribute('meshId', 'ns3::dot11s::IeMeshId', is_const=False)
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkCloseStart::PlinkCloseStartFields::protocol [variable]
+    cls.add_instance_attribute('protocol', 'ns3::dot11s::IePeeringProtocol', is_const=False)
+    return
+
+def register_Ns3Dot11sPeerLinkConfirmStart_methods(root_module, cls):
+    cls.add_binary_comparison_operator('==')
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkConfirmStart::PeerLinkConfirmStart() [constructor]
+    cls.add_constructor([])
+    ## peer-link-frame.h (module 'mesh'): uint32_t ns3::dot11s::PeerLinkConfirmStart::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields ns3::dot11s::PeerLinkConfirmStart::GetFields() const [member function]
+    cls.add_method('GetFields', 
+                   'ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields', 
+                   [], 
+                   is_const=True)
+    ## peer-link-frame.h (module 'mesh'): ns3::TypeId ns3::dot11s::PeerLinkConfirmStart::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## peer-link-frame.h (module 'mesh'): uint32_t ns3::dot11s::PeerLinkConfirmStart::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## peer-link-frame.h (module 'mesh'): static ns3::TypeId ns3::dot11s::PeerLinkConfirmStart::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## peer-link-frame.h (module 'mesh'): void ns3::dot11s::PeerLinkConfirmStart::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
                    'void', 
-                   [param('uint8_t', 'subtype')])
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## peer-link-frame.h (module 'mesh'): void ns3::dot11s::PeerLinkConfirmStart::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## peer-link-frame.h (module 'mesh'): void ns3::dot11s::PeerLinkConfirmStart::SetPlinkConfirmStart(ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields arg0) [member function]
+    cls.add_method('SetPlinkConfirmStart', 
+                   'void', 
+                   [param('ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields', 'arg0')])
     return
 
-def register_Ns3Dot11sPeerLinkFrameStartPlinkFrameStartFields_methods(root_module, cls):
-    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkFrameStart::PlinkFrameStartFields::PlinkFrameStartFields() [constructor]
+def register_Ns3Dot11sPeerLinkConfirmStartPlinkConfirmStartFields_methods(root_module, cls):
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields::PlinkConfirmStartFields() [constructor]
     cls.add_constructor([])
-    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkFrameStart::PlinkFrameStartFields::PlinkFrameStartFields(ns3::dot11s::PeerLinkFrameStart::PlinkFrameStartFields const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dot11s::PeerLinkFrameStart::PlinkFrameStartFields const &', 'arg0')])
-    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkFrameStart::PlinkFrameStartFields::aid [variable]
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields::PlinkConfirmStartFields(ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields const &', 'arg0')])
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields::aid [variable]
     cls.add_instance_attribute('aid', 'uint16_t', is_const=False)
-    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkFrameStart::PlinkFrameStartFields::capability [variable]
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields::capability [variable]
+    cls.add_instance_attribute('capability', 'uint16_t', is_const=False)
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields::config [variable]
+    cls.add_instance_attribute('config', 'ns3::dot11s::IeConfiguration', is_const=False)
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields::protocol [variable]
+    cls.add_instance_attribute('protocol', 'ns3::dot11s::IePeeringProtocol', is_const=False)
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields::rates [variable]
+    cls.add_instance_attribute('rates', 'ns3::SupportedRates', is_const=False)
+    return
+
+def register_Ns3Dot11sPeerLinkOpenStart_methods(root_module, cls):
+    cls.add_binary_comparison_operator('==')
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkOpenStart::PeerLinkOpenStart() [constructor]
+    cls.add_constructor([])
+    ## peer-link-frame.h (module 'mesh'): uint32_t ns3::dot11s::PeerLinkOpenStart::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields ns3::dot11s::PeerLinkOpenStart::GetFields() const [member function]
+    cls.add_method('GetFields', 
+                   'ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields', 
+                   [], 
+                   is_const=True)
+    ## peer-link-frame.h (module 'mesh'): ns3::TypeId ns3::dot11s::PeerLinkOpenStart::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## peer-link-frame.h (module 'mesh'): uint32_t ns3::dot11s::PeerLinkOpenStart::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## peer-link-frame.h (module 'mesh'): static ns3::TypeId ns3::dot11s::PeerLinkOpenStart::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## peer-link-frame.h (module 'mesh'): void ns3::dot11s::PeerLinkOpenStart::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## peer-link-frame.h (module 'mesh'): void ns3::dot11s::PeerLinkOpenStart::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## peer-link-frame.h (module 'mesh'): void ns3::dot11s::PeerLinkOpenStart::SetPlinkOpenStart(ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields arg0) [member function]
+    cls.add_method('SetPlinkOpenStart', 
+                   'void', 
+                   [param('ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields', 'arg0')])
+    return
+
+def register_Ns3Dot11sPeerLinkOpenStartPlinkOpenStartFields_methods(root_module, cls):
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields::PlinkOpenStartFields() [constructor]
+    cls.add_constructor([])
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields::PlinkOpenStartFields(ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields const &', 'arg0')])
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields::capability [variable]
     cls.add_instance_attribute('capability', 'uint16_t', is_const=False)
-    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkFrameStart::PlinkFrameStartFields::config [variable]
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields::config [variable]
     cls.add_instance_attribute('config', 'ns3::dot11s::IeConfiguration', is_const=False)
-    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkFrameStart::PlinkFrameStartFields::meshId [variable]
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields::meshId [variable]
     cls.add_instance_attribute('meshId', 'ns3::dot11s::IeMeshId', is_const=False)
-    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkFrameStart::PlinkFrameStartFields::protocol [variable]
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields::protocol [variable]
     cls.add_instance_attribute('protocol', 'ns3::dot11s::IePeeringProtocol', is_const=False)
-    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkFrameStart::PlinkFrameStartFields::rates [variable]
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields::rates [variable]
     cls.add_instance_attribute('rates', 'ns3::SupportedRates', is_const=False)
-    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkFrameStart::PlinkFrameStartFields::reasonCode [variable]
-    cls.add_instance_attribute('reasonCode', 'uint16_t', is_const=False)
-    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkFrameStart::PlinkFrameStartFields::subtype [variable]
-    cls.add_instance_attribute('subtype', 'uint8_t', is_const=False)
     return
 
 def register_Ns3Dot11sPeerManagementProtocol_methods(root_module, cls):
@@ -11889,6 +12598,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     register_functions_ns3_dot11s(module.get_submodule('dot11s'), root_module)
     register_functions_ns3_flame(module.get_submodule('flame'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
@@ -11904,6 +12614,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def register_functions_ns3_dot11s(module, root_module):
     ## ie-dot11s-id.h (module 'mesh'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::dot11s::MakeIeMeshIdChecker() [free function]
     module.add_function('MakeIeMeshIdChecker', 
diff -Naur ns-3.23/src/mesh/bindings/modulegen__gcc_LP64.py ns-3.24/src/mesh/bindings/modulegen__gcc_LP64.py
--- ns-3.23/src/mesh/bindings/modulegen__gcc_LP64.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/bindings/modulegen__gcc_LP64.py	2015-09-15 11:18:44.000000000 -0700
@@ -23,11 +23,11 @@
     ## wifi-mac-header.h (module 'wifi'): ns3::WifiMacType [enumeration]
     module.add_enum('WifiMacType', ['WIFI_MAC_CTL_RTS', 'WIFI_MAC_CTL_CTS', 'WIFI_MAC_CTL_ACK', 'WIFI_MAC_CTL_BACKREQ', 'WIFI_MAC_CTL_BACKRESP', 'WIFI_MAC_CTL_CTLWRAPPER', 'WIFI_MAC_MGT_BEACON', 'WIFI_MAC_MGT_ASSOCIATION_REQUEST', 'WIFI_MAC_MGT_ASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_DISASSOCIATION', 'WIFI_MAC_MGT_REASSOCIATION_REQUEST', 'WIFI_MAC_MGT_REASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_PROBE_REQUEST', 'WIFI_MAC_MGT_PROBE_RESPONSE', 'WIFI_MAC_MGT_AUTHENTICATION', 'WIFI_MAC_MGT_DEAUTHENTICATION', 'WIFI_MAC_MGT_ACTION', 'WIFI_MAC_MGT_ACTION_NO_ACK', 'WIFI_MAC_MGT_MULTIHOP_ACTION', 'WIFI_MAC_DATA', 'WIFI_MAC_DATA_CFACK', 'WIFI_MAC_DATA_CFPOLL', 'WIFI_MAC_DATA_CFACK_CFPOLL', 'WIFI_MAC_DATA_NULL', 'WIFI_MAC_DATA_NULL_CFACK', 'WIFI_MAC_DATA_NULL_CFPOLL', 'WIFI_MAC_DATA_NULL_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA', 'WIFI_MAC_QOSDATA_CFACK', 'WIFI_MAC_QOSDATA_CFPOLL', 'WIFI_MAC_QOSDATA_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA_NULL', 'WIFI_MAC_QOSDATA_NULL_CFPOLL', 'WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL'], import_from_module='ns.wifi')
     ## wifi-preamble.h (module 'wifi'): ns3::WifiPreamble [enumeration]
-    module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF', 'WIFI_PREAMBLE_NONE'], import_from_module='ns.wifi')
+    module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF', 'WIFI_PREAMBLE_VHT', 'WIFI_PREAMBLE_NONE'], import_from_module='ns.wifi')
     ## wifi-mode.h (module 'wifi'): ns3::WifiModulationClass [enumeration]
-    module.add_enum('WifiModulationClass', ['WIFI_MOD_CLASS_UNKNOWN', 'WIFI_MOD_CLASS_IR', 'WIFI_MOD_CLASS_FHSS', 'WIFI_MOD_CLASS_DSSS', 'WIFI_MOD_CLASS_ERP_PBCC', 'WIFI_MOD_CLASS_DSSS_OFDM', 'WIFI_MOD_CLASS_ERP_OFDM', 'WIFI_MOD_CLASS_OFDM', 'WIFI_MOD_CLASS_HT'], import_from_module='ns.wifi')
+    module.add_enum('WifiModulationClass', ['WIFI_MOD_CLASS_UNKNOWN', 'WIFI_MOD_CLASS_IR', 'WIFI_MOD_CLASS_FHSS', 'WIFI_MOD_CLASS_DSSS', 'WIFI_MOD_CLASS_HR_DSSS', 'WIFI_MOD_CLASS_ERP_PBCC', 'WIFI_MOD_CLASS_DSSS_OFDM', 'WIFI_MOD_CLASS_ERP_OFDM', 'WIFI_MOD_CLASS_OFDM', 'WIFI_MOD_CLASS_HT', 'WIFI_MOD_CLASS_VHT'], import_from_module='ns.wifi')
     ## wifi-phy-standard.h (module 'wifi'): ns3::WifiPhyStandard [enumeration]
-    module.add_enum('WifiPhyStandard', ['WIFI_PHY_STANDARD_80211a', 'WIFI_PHY_STANDARD_80211b', 'WIFI_PHY_STANDARD_80211g', 'WIFI_PHY_STANDARD_80211_10MHZ', 'WIFI_PHY_STANDARD_80211_5MHZ', 'WIFI_PHY_STANDARD_holland', 'WIFI_PHY_STANDARD_80211n_2_4GHZ', 'WIFI_PHY_STANDARD_80211n_5GHZ'], import_from_module='ns.wifi')
+    module.add_enum('WifiPhyStandard', ['WIFI_PHY_STANDARD_80211a', 'WIFI_PHY_STANDARD_80211b', 'WIFI_PHY_STANDARD_80211g', 'WIFI_PHY_STANDARD_80211_10MHZ', 'WIFI_PHY_STANDARD_80211_5MHZ', 'WIFI_PHY_STANDARD_holland', 'WIFI_PHY_STANDARD_80211n_2_4GHZ', 'WIFI_PHY_STANDARD_80211n_5GHZ', 'WIFI_PHY_STANDARD_80211ac'], import_from_module='ns.wifi')
     ## wifi-mode.h (module 'wifi'): ns3::WifiCodeRate [enumeration]
     module.add_enum('WifiCodeRate', ['WIFI_CODE_RATE_UNDEFINED', 'WIFI_CODE_RATE_3_4', 'WIFI_CODE_RATE_2_3', 'WIFI_CODE_RATE_1_2', 'WIFI_CODE_RATE_5_6'], import_from_module='ns.wifi')
     ## qos-utils.h (module 'wifi'): ns3::AcIndex [enumeration]
@@ -135,7 +135,7 @@
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
+    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SSL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
@@ -186,6 +186,10 @@
     module.add_class('int64x64_t', import_from_module='ns.core')
     ## int64x64-double.h (module 'core'): ns3::int64x64_t::impl_type [enumeration]
     module.add_enum('impl_type', ['int128_impl', 'cairo_impl', 'ld_impl'], outer_class=root_module['ns3::int64x64_t'], import_from_module='ns.core')
+    ## wifi-phy.h (module 'wifi'): ns3::mpduInfo [struct]
+    module.add_class('mpduInfo', import_from_module='ns.wifi')
+    ## wifi-phy.h (module 'wifi'): ns3::signalNoiseDbm [struct]
+    module.add_class('signalNoiseDbm', import_from_module='ns.wifi')
     ## chunk.h (module 'network'): ns3::Chunk [class]
     module.add_class('Chunk', import_from_module='ns.network', parent=root_module['ns3::ObjectBase'])
     ## header.h (module 'network'): ns3::Header [class]
@@ -390,6 +394,12 @@
     module.add_class('TypeIdValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## uinteger.h (module 'core'): ns3::UintegerValue [class]
     module.add_class('UintegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilities [class]
+    module.add_class('VhtCapabilities', import_from_module='ns.wifi', parent=root_module['ns3::WifiInformationElement'])
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilitiesChecker [class]
+    module.add_class('VhtCapabilitiesChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilitiesValue [class]
+    module.add_class('VhtCapabilitiesValue', import_from_module='ns.wifi', parent=root_module['ns3::AttributeValue'])
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeChecker [class]
     module.add_class('WifiModeChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeValue [class]
@@ -411,23 +421,16 @@
     ## mesh-wifi-interface-mac.h (module 'mesh'): ns3::MeshWifiInterfaceMac [class]
     module.add_class('MeshWifiInterfaceMac', parent=root_module['ns3::RegularWifiMac'])
     module.add_container('ns3::WifiModeList', 'ns3::WifiMode', container_type=u'vector')
-    module.add_container('ns3::WifiMcsList', 'unsigned char', container_type=u'vector')
     module.add_container('std::vector< ns3::Ptr< ns3::NetDevice > >', 'ns3::Ptr< ns3::NetDevice >', container_type=u'vector')
-    typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >', u'ns3::WifiMcsList')
-    typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >*', u'ns3::WifiMcsList*')
-    typehandlers.add_type_alias(u'std::vector< unsigned char, std::allocator< unsigned char > >&', u'ns3::WifiMcsList&')
     typehandlers.add_type_alias(u'uint8_t', u'ns3::WifiInformationElementId')
     typehandlers.add_type_alias(u'uint8_t*', u'ns3::WifiInformationElementId*')
     typehandlers.add_type_alias(u'uint8_t&', u'ns3::WifiInformationElementId&')
-    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >', u'ns3::WifiModeListIterator')
-    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >*', u'ns3::WifiModeListIterator*')
-    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >&', u'ns3::WifiModeListIterator&')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >', u'ns3::WifiModeList')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >*', u'ns3::WifiModeList*')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >&', u'ns3::WifiModeList&')
-    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >', u'ns3::WifiMcsListIterator')
-    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >*', u'ns3::WifiMcsListIterator*')
-    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< unsigned char const *, std::vector< unsigned char, std::allocator< unsigned char > > >&', u'ns3::WifiMcsListIterator&')
+    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >', u'ns3::WifiModeListIterator')
+    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >*', u'ns3::WifiModeListIterator*')
+    typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >&', u'ns3::WifiModeListIterator&')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -441,6 +444,12 @@
     register_types_ns3_Hash(nested_module)
     
     
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
+    
     ## Register a nested module for the namespace dot11s
     
     nested_module = module.add_cpp_namespace('dot11s')
@@ -493,6 +502,37 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *', u'ns3::TracedValueCallback::Double')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) **', u'ns3::TracedValueCallback::Double*')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *&', u'ns3::TracedValueCallback::Double&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *', u'ns3::TracedValueCallback::Uint8')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) **', u'ns3::TracedValueCallback::Uint8*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *&', u'ns3::TracedValueCallback::Uint8&')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *', u'ns3::TracedValueCallback::Int32')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) **', u'ns3::TracedValueCallback::Int32*')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *&', u'ns3::TracedValueCallback::Int32&')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *', u'ns3::TracedValueCallback::Bool')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) **', u'ns3::TracedValueCallback::Bool*')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *&', u'ns3::TracedValueCallback::Bool&')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *', u'ns3::TracedValueCallback::Int8')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) **', u'ns3::TracedValueCallback::Int8*')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *&', u'ns3::TracedValueCallback::Int8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *', u'ns3::TracedValueCallback::Uint16')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) **', u'ns3::TracedValueCallback::Uint16*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *&', u'ns3::TracedValueCallback::Uint16&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *', u'ns3::TracedValueCallback::Uint32')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) **', u'ns3::TracedValueCallback::Uint32*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *&', u'ns3::TracedValueCallback::Uint32&')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *', u'ns3::TracedValueCallback::Int16')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) **', u'ns3::TracedValueCallback::Int16*')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *&', u'ns3::TracedValueCallback::Int16&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_types_ns3_dot11s(module):
     root_module = module.get_root()
     
@@ -554,10 +594,18 @@
     module.add_class('PeerLink', parent=root_module['ns3::Object'])
     ## peer-link.h (module 'mesh'): ns3::dot11s::PeerLink::PeerState [enumeration]
     module.add_enum('PeerState', ['IDLE', 'OPN_SNT', 'CNF_RCVD', 'OPN_RCVD', 'ESTAB', 'HOLDING'], outer_class=root_module['ns3::dot11s::PeerLink'])
-    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkFrameStart [class]
-    module.add_class('PeerLinkFrameStart', parent=root_module['ns3::Header'])
-    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkFrameStart::PlinkFrameStartFields [struct]
-    module.add_class('PlinkFrameStartFields', outer_class=root_module['ns3::dot11s::PeerLinkFrameStart'])
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkCloseStart [class]
+    module.add_class('PeerLinkCloseStart', parent=root_module['ns3::Header'])
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkCloseStart::PlinkCloseStartFields [struct]
+    module.add_class('PlinkCloseStartFields', outer_class=root_module['ns3::dot11s::PeerLinkCloseStart'])
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkConfirmStart [class]
+    module.add_class('PeerLinkConfirmStart', parent=root_module['ns3::Header'])
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields [struct]
+    module.add_class('PlinkConfirmStartFields', outer_class=root_module['ns3::dot11s::PeerLinkConfirmStart'])
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkOpenStart [class]
+    module.add_class('PeerLinkOpenStart', parent=root_module['ns3::Header'])
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields [struct]
+    module.add_class('PlinkOpenStartFields', outer_class=root_module['ns3::dot11s::PeerLinkOpenStart'])
     ## peer-management-protocol.h (module 'mesh'): ns3::dot11s::PeerManagementProtocol [class]
     module.add_class('PeerManagementProtocol', parent=root_module['ns3::Object'])
     module.add_container('std::vector< std::pair< unsigned int, ns3::Mac48Address > >', 'std::pair< unsigned int, ns3::Mac48Address >', container_type=u'vector')
@@ -651,6 +699,8 @@
     register_Ns3WifiTxVector_methods(root_module, root_module['ns3::WifiTxVector'])
     register_Ns3Empty_methods(root_module, root_module['ns3::empty'])
     register_Ns3Int64x64_t_methods(root_module, root_module['ns3::int64x64_t'])
+    register_Ns3MpduInfo_methods(root_module, root_module['ns3::mpduInfo'])
+    register_Ns3SignalNoiseDbm_methods(root_module, root_module['ns3::signalNoiseDbm'])
     register_Ns3Chunk_methods(root_module, root_module['ns3::Chunk'])
     register_Ns3Header_methods(root_module, root_module['ns3::Header'])
     register_Ns3MgtAddBaRequestHeader_methods(root_module, root_module['ns3::MgtAddBaRequestHeader'])
@@ -742,6 +792,9 @@
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
     register_Ns3UintegerValue_methods(root_module, root_module['ns3::UintegerValue'])
+    register_Ns3VhtCapabilities_methods(root_module, root_module['ns3::VhtCapabilities'])
+    register_Ns3VhtCapabilitiesChecker_methods(root_module, root_module['ns3::VhtCapabilitiesChecker'])
+    register_Ns3VhtCapabilitiesValue_methods(root_module, root_module['ns3::VhtCapabilitiesValue'])
     register_Ns3WifiModeChecker_methods(root_module, root_module['ns3::WifiModeChecker'])
     register_Ns3WifiModeValue_methods(root_module, root_module['ns3::WifiModeValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
@@ -778,8 +831,12 @@
     register_Ns3Dot11sIeRann_methods(root_module, root_module['ns3::dot11s::IeRann'])
     register_Ns3Dot11sMeshHeader_methods(root_module, root_module['ns3::dot11s::MeshHeader'])
     register_Ns3Dot11sPeerLink_methods(root_module, root_module['ns3::dot11s::PeerLink'])
-    register_Ns3Dot11sPeerLinkFrameStart_methods(root_module, root_module['ns3::dot11s::PeerLinkFrameStart'])
-    register_Ns3Dot11sPeerLinkFrameStartPlinkFrameStartFields_methods(root_module, root_module['ns3::dot11s::PeerLinkFrameStart::PlinkFrameStartFields'])
+    register_Ns3Dot11sPeerLinkCloseStart_methods(root_module, root_module['ns3::dot11s::PeerLinkCloseStart'])
+    register_Ns3Dot11sPeerLinkCloseStartPlinkCloseStartFields_methods(root_module, root_module['ns3::dot11s::PeerLinkCloseStart::PlinkCloseStartFields'])
+    register_Ns3Dot11sPeerLinkConfirmStart_methods(root_module, root_module['ns3::dot11s::PeerLinkConfirmStart'])
+    register_Ns3Dot11sPeerLinkConfirmStartPlinkConfirmStartFields_methods(root_module, root_module['ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields'])
+    register_Ns3Dot11sPeerLinkOpenStart_methods(root_module, root_module['ns3::dot11s::PeerLinkOpenStart'])
+    register_Ns3Dot11sPeerLinkOpenStartPlinkOpenStartFields_methods(root_module, root_module['ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields'])
     register_Ns3Dot11sPeerManagementProtocol_methods(root_module, root_module['ns3::dot11s::PeerManagementProtocol'])
     register_Ns3FlameFlameHeader_methods(root_module, root_module['ns3::flame::FlameHeader'])
     register_Ns3FlameFlameProtocol_methods(root_module, root_module['ns3::flame::FlameProtocol'])
@@ -1115,6 +1172,10 @@
     cls.add_method('SetStartingSequence', 
                    'void', 
                    [param('uint16_t', 'seq')])
+    ## block-ack-agreement.h (module 'wifi'): void ns3::BlockAckAgreement::SetStartingSequenceControl(uint16_t seq) [member function]
+    cls.add_method('SetStartingSequenceControl', 
+                   'void', 
+                   [param('uint16_t', 'seq')])
     ## block-ack-agreement.h (module 'wifi'): void ns3::BlockAckAgreement::SetTimeout(uint16_t timeout) [member function]
     cls.add_method('SetTimeout', 
                    'void', 
@@ -1291,17 +1352,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -1323,11 +1384,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -1337,16 +1393,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -1584,14 +1630,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -1652,11 +1702,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CapabilityInformation_methods(root_module, cls):
@@ -2802,7 +2847,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -2820,10 +2865,10 @@
     cls.add_method('Close', 
                    'void', 
                    [])
-    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
+    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t & packets, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
     cls.add_method('Diff', 
                    'bool', 
-                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
+                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t &', 'packets'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
                    is_static=True)
     ## pcap-file.h (module 'network'): bool ns3::PcapFile::Eof() const [member function]
     cls.add_method('Eof', 
@@ -2887,10 +2932,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header & header, ns3::Ptr<ns3::Packet const> p) [member function]
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header const & header, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file.h (module 'network'): ns3::PcapFile::SNAPLEN_DEFAULT [variable]
     cls.add_static_attribute('SNAPLEN_DEFAULT', 'uint32_t const', is_const=True)
     ## pcap-file.h (module 'network'): ns3::PcapFile::ZONE_DEFAULT [variable]
@@ -3037,10 +3082,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -3453,24 +3498,24 @@
     cls.add_constructor([])
     ## wifi-mode.h (module 'wifi'): ns3::WifiMode::WifiMode(std::string name) [constructor]
     cls.add_constructor([param('std::string', 'name')])
-    ## wifi-mode.h (module 'wifi'): uint32_t ns3::WifiMode::GetBandwidth() const [member function]
-    cls.add_method('GetBandwidth', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## wifi-mode.h (module 'wifi'): ns3::WifiCodeRate ns3::WifiMode::GetCodeRate() const [member function]
+    ## wifi-mode.h (module 'wifi'): ns3::WifiCodeRate ns3::WifiMode::GetCodeRate(uint8_t nss) const [member function]
     cls.add_method('GetCodeRate', 
                    'ns3::WifiCodeRate', 
-                   [], 
+                   [param('uint8_t', 'nss')], 
                    is_const=True)
-    ## wifi-mode.h (module 'wifi'): uint8_t ns3::WifiMode::GetConstellationSize() const [member function]
+    ## wifi-mode.h (module 'wifi'): uint16_t ns3::WifiMode::GetConstellationSize(uint8_t nss) const [member function]
     cls.add_method('GetConstellationSize', 
-                   'uint8_t', 
-                   [], 
+                   'uint16_t', 
+                   [param('uint8_t', 'nss')], 
                    is_const=True)
-    ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetDataRate() const [member function]
+    ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetDataRate(uint32_t channelWidth, bool isShortGuardInterval, uint8_t nss) const [member function]
     cls.add_method('GetDataRate', 
                    'uint64_t', 
+                   [param('uint32_t', 'channelWidth'), param('bool', 'isShortGuardInterval'), param('uint8_t', 'nss')], 
+                   is_const=True)
+    ## wifi-mode.h (module 'wifi'): uint8_t ns3::WifiMode::GetMcsValue() const [member function]
+    cls.add_method('GetMcsValue', 
+                   'uint8_t', 
                    [], 
                    is_const=True)
     ## wifi-mode.h (module 'wifi'): ns3::WifiModulationClass ns3::WifiMode::GetModulationClass() const [member function]
@@ -3478,10 +3523,10 @@
                    'ns3::WifiModulationClass', 
                    [], 
                    is_const=True)
-    ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetPhyRate() const [member function]
+    ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetPhyRate(uint32_t channelWidth, bool isShortGuardInterval, uint8_t nss) const [member function]
     cls.add_method('GetPhyRate', 
                    'uint64_t', 
-                   [], 
+                   [param('uint32_t', 'channelWidth'), param('bool', 'isShortGuardInterval'), param('uint8_t', 'nss')], 
                    is_const=True)
     ## wifi-mode.h (module 'wifi'): uint32_t ns3::WifiMode::GetUid() const [member function]
     cls.add_method('GetUid', 
@@ -3503,10 +3548,15 @@
 def register_Ns3WifiModeFactory_methods(root_module, cls):
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeFactory::WifiModeFactory(ns3::WifiModeFactory const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::WifiModeFactory const &', 'arg0')])
-    ## wifi-mode.h (module 'wifi'): static ns3::WifiMode ns3::WifiModeFactory::CreateWifiMode(std::string uniqueName, ns3::WifiModulationClass modClass, bool isMandatory, uint32_t bandwidth, uint32_t dataRate, ns3::WifiCodeRate codingRate, uint8_t constellationSize) [member function]
+    ## wifi-mode.h (module 'wifi'): static ns3::WifiMode ns3::WifiModeFactory::CreateWifiMcs(std::string uniqueName, uint8_t mcsValue, ns3::WifiModulationClass modClass) [member function]
+    cls.add_method('CreateWifiMcs', 
+                   'ns3::WifiMode', 
+                   [param('std::string', 'uniqueName'), param('uint8_t', 'mcsValue'), param('ns3::WifiModulationClass', 'modClass')], 
+                   is_static=True)
+    ## wifi-mode.h (module 'wifi'): static ns3::WifiMode ns3::WifiModeFactory::CreateWifiMode(std::string uniqueName, ns3::WifiModulationClass modClass, bool isMandatory, ns3::WifiCodeRate codingRate, uint16_t constellationSize) [member function]
     cls.add_method('CreateWifiMode', 
                    'ns3::WifiMode', 
-                   [param('std::string', 'uniqueName'), param('ns3::WifiModulationClass', 'modClass'), param('bool', 'isMandatory'), param('uint32_t', 'bandwidth'), param('uint32_t', 'dataRate'), param('ns3::WifiCodeRate', 'codingRate'), param('uint8_t', 'constellationSize')], 
+                   [param('std::string', 'uniqueName'), param('ns3::WifiModulationClass', 'modClass'), param('bool', 'isMandatory'), param('ns3::WifiCodeRate', 'codingRate'), param('uint16_t', 'constellationSize')], 
                    is_static=True)
     return
 
@@ -3611,6 +3661,10 @@
     cls.add_constructor([param('ns3::WifiRemoteStationState const &', 'arg0')])
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_address [variable]
     cls.add_instance_attribute('m_address', 'ns3::Mac48Address', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_aggregation [variable]
+    cls.add_instance_attribute('m_aggregation', 'bool', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_channelWidth [variable]
+    cls.add_instance_attribute('m_channelWidth', 'uint32_t', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_greenfield [variable]
     cls.add_instance_attribute('m_greenfield', 'bool', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_info [variable]
@@ -3618,7 +3672,7 @@
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_ness [variable]
     cls.add_instance_attribute('m_ness', 'uint32_t', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_operationalMcsSet [variable]
-    cls.add_instance_attribute('m_operationalMcsSet', 'ns3::WifiMcsList', is_const=False)
+    cls.add_instance_attribute('m_operationalMcsSet', 'ns3::WifiModeList', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_operationalRateSet [variable]
     cls.add_instance_attribute('m_operationalRateSet', 'ns3::WifiModeList', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_rx [variable]
@@ -3637,8 +3691,13 @@
     cls.add_constructor([param('ns3::WifiTxVector const &', 'arg0')])
     ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector() [constructor]
     cls.add_constructor([])
-    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiMode mode, uint8_t powerLevel, uint8_t retries, bool shortGuardInterval, uint8_t nss, uint8_t ness, bool stbc) [constructor]
-    cls.add_constructor([param('ns3::WifiMode', 'mode'), param('uint8_t', 'powerLevel'), param('uint8_t', 'retries'), param('bool', 'shortGuardInterval'), param('uint8_t', 'nss'), param('uint8_t', 'ness'), param('bool', 'stbc')])
+    ## wifi-tx-vector.h (module 'wifi'): ns3::WifiTxVector::WifiTxVector(ns3::WifiMode mode, uint8_t powerLevel, uint8_t retries, bool shortGuardInterval, uint8_t nss, uint8_t ness, uint32_t channelWidth, bool aggregation, bool stbc) [constructor]
+    cls.add_constructor([param('ns3::WifiMode', 'mode'), param('uint8_t', 'powerLevel'), param('uint8_t', 'retries'), param('bool', 'shortGuardInterval'), param('uint8_t', 'nss'), param('uint8_t', 'ness'), param('uint32_t', 'channelWidth'), param('bool', 'aggregation'), param('bool', 'stbc')])
+    ## wifi-tx-vector.h (module 'wifi'): uint32_t ns3::WifiTxVector::GetChannelWidth() const [member function]
+    cls.add_method('GetChannelWidth', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## wifi-tx-vector.h (module 'wifi'): ns3::WifiMode ns3::WifiTxVector::GetMode() const [member function]
     cls.add_method('GetMode', 
                    'ns3::WifiMode', 
@@ -3664,6 +3723,11 @@
                    'uint8_t', 
                    [], 
                    is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): bool ns3::WifiTxVector::IsAggregation() const [member function]
+    cls.add_method('IsAggregation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## wifi-tx-vector.h (module 'wifi'): bool ns3::WifiTxVector::IsShortGuardInterval() const [member function]
     cls.add_method('IsShortGuardInterval', 
                    'bool', 
@@ -3674,6 +3738,14 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetAggregation(bool aggregation) [member function]
+    cls.add_method('SetAggregation', 
+                   'void', 
+                   [param('bool', 'aggregation')])
+    ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetChannelWidth(uint32_t channelWidth) [member function]
+    cls.add_method('SetChannelWidth', 
+                   'void', 
+                   [param('uint32_t', 'channelWidth')])
     ## wifi-tx-vector.h (module 'wifi'): void ns3::WifiTxVector::SetMode(ns3::WifiMode mode) [member function]
     cls.add_method('SetMode', 
                    'void', 
@@ -3778,6 +3850,28 @@
     cls.add_static_attribute('implementation', 'ns3::int64x64_t::impl_type const', is_const=True)
     return
 
+def register_Ns3MpduInfo_methods(root_module, cls):
+    ## wifi-phy.h (module 'wifi'): ns3::mpduInfo::mpduInfo() [constructor]
+    cls.add_constructor([])
+    ## wifi-phy.h (module 'wifi'): ns3::mpduInfo::mpduInfo(ns3::mpduInfo const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::mpduInfo const &', 'arg0')])
+    ## wifi-phy.h (module 'wifi'): ns3::mpduInfo::packetType [variable]
+    cls.add_instance_attribute('packetType', 'uint8_t', is_const=False)
+    ## wifi-phy.h (module 'wifi'): ns3::mpduInfo::referenceNumber [variable]
+    cls.add_instance_attribute('referenceNumber', 'uint32_t', is_const=False)
+    return
+
+def register_Ns3SignalNoiseDbm_methods(root_module, cls):
+    ## wifi-phy.h (module 'wifi'): ns3::signalNoiseDbm::signalNoiseDbm() [constructor]
+    cls.add_constructor([])
+    ## wifi-phy.h (module 'wifi'): ns3::signalNoiseDbm::signalNoiseDbm(ns3::signalNoiseDbm const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::signalNoiseDbm const &', 'arg0')])
+    ## wifi-phy.h (module 'wifi'): ns3::signalNoiseDbm::noise [variable]
+    cls.add_instance_attribute('noise', 'double', is_const=False)
+    ## wifi-phy.h (module 'wifi'): ns3::signalNoiseDbm::signal [variable]
+    cls.add_instance_attribute('signal', 'double', is_const=False)
+    return
+
 def register_Ns3Chunk_methods(root_module, cls):
     ## chunk.h (module 'network'): ns3::Chunk::Chunk() [constructor]
     cls.add_constructor([])
@@ -4068,6 +4162,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## mgt-headers.h (module 'wifi'): ns3::VhtCapabilities ns3::MgtAssocRequestHeader::GetVhtCapabilities() const [member function]
+    cls.add_method('GetVhtCapabilities', 
+                   'ns3::VhtCapabilities', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocRequestHeader::Print(std::ostream & os) const [member function]
     cls.add_method('Print', 
                    'void', 
@@ -4094,6 +4193,10 @@
     cls.add_method('SetSupportedRates', 
                    'void', 
                    [param('ns3::SupportedRates', 'rates')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocRequestHeader::SetVhtCapabilities(ns3::VhtCapabilities vhtcapabilities) [member function]
+    cls.add_method('SetVhtCapabilities', 
+                   'void', 
+                   [param('ns3::VhtCapabilities', 'vhtcapabilities')])
     return
 
 def register_Ns3MgtAssocResponseHeader_methods(root_module, cls):
@@ -4134,6 +4237,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## mgt-headers.h (module 'wifi'): ns3::VhtCapabilities ns3::MgtAssocResponseHeader::GetVhtCapabilities() const [member function]
+    cls.add_method('GetVhtCapabilities', 
+                   'ns3::VhtCapabilities', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocResponseHeader::Print(std::ostream & os) const [member function]
     cls.add_method('Print', 
                    'void', 
@@ -4156,6 +4264,10 @@
     cls.add_method('SetSupportedRates', 
                    'void', 
                    [param('ns3::SupportedRates', 'rates')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocResponseHeader::SetVhtCapabilities(ns3::VhtCapabilities vhtcapabilities) [member function]
+    cls.add_method('SetVhtCapabilities', 
+                   'void', 
+                   [param('ns3::VhtCapabilities', 'vhtcapabilities')])
     return
 
 def register_Ns3MgtDelBaHeader_methods(root_module, cls):
@@ -4257,6 +4369,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## mgt-headers.h (module 'wifi'): ns3::VhtCapabilities ns3::MgtProbeRequestHeader::GetVhtCapabilities() const [member function]
+    cls.add_method('GetVhtCapabilities', 
+                   'ns3::VhtCapabilities', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeRequestHeader::Print(std::ostream & os) const [member function]
     cls.add_method('Print', 
                    'void', 
@@ -4279,6 +4396,10 @@
     cls.add_method('SetSupportedRates', 
                    'void', 
                    [param('ns3::SupportedRates', 'rates')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeRequestHeader::SetVhtCapabilities(ns3::VhtCapabilities vhtcapabilities) [member function]
+    cls.add_method('SetVhtCapabilities', 
+                   'void', 
+                   [param('ns3::VhtCapabilities', 'vhtcapabilities')])
     return
 
 def register_Ns3MgtProbeResponseHeader_methods(root_module, cls):
@@ -4330,6 +4451,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## mgt-headers.h (module 'wifi'): ns3::VhtCapabilities ns3::MgtProbeResponseHeader::GetVhtCapabilities() const [member function]
+    cls.add_method('GetVhtCapabilities', 
+                   'ns3::VhtCapabilities', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::Print(std::ostream & os) const [member function]
     cls.add_method('Print', 
                    'void', 
@@ -4356,6 +4482,10 @@
     cls.add_method('SetSupportedRates', 
                    'void', 
                    [param('ns3::SupportedRates', 'rates')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetVhtCapabilities(ns3::VhtCapabilities vhtcapabilities) [member function]
+    cls.add_method('SetVhtCapabilities', 
+                   'void', 
+                   [param('ns3::VhtCapabilities', 'vhtcapabilities')])
     return
 
 def register_Ns3Object_methods(root_module, cls):
@@ -4462,10 +4592,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header & header, ns3::Ptr<ns3::Packet const> p) [member function]
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header const & header, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('ns3::Time', 't'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('ns3::Time', 't'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, uint8_t const * buffer, uint32_t length) [member function]
     cls.add_method('Write', 
                    'void', 
@@ -5727,6 +5857,10 @@
     cls.add_method('SetQosEosp', 
                    'void', 
                    [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosMeshControlPresent() [member function]
+    cls.add_method('SetQosMeshControlPresent', 
+                   'void', 
+                   [])
     ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosNoAck() [member function]
     cls.add_method('SetQosNoAck', 
                    'void', 
@@ -5739,6 +5873,10 @@
     cls.add_method('SetQosNoEosp', 
                    'void', 
                    [])
+    ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosNoMeshControlPresent() [member function]
+    cls.add_method('SetQosNoMeshControlPresent', 
+                   'void', 
+                   [])
     ## wifi-mac-header.h (module 'wifi'): void ns3::WifiMacHeader::SetQosNormalAck() [member function]
     cls.add_method('SetQosNormalAck', 
                    'void', 
@@ -5783,19 +5921,19 @@
                    'int64_t', 
                    [param('int64_t', 'stream')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculatePlcpDuration(ns3::WifiTxVector txvector, ns3::WifiPreamble preamble) [member function]
-    cls.add_method('CalculatePlcpDuration', 
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculatePlcpPreambleAndHeaderDuration(ns3::WifiTxVector txVector, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('CalculatePlcpPreambleAndHeaderDuration', 
                    'ns3::Time', 
-                   [param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble')])
+                   [param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble')])
     ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::CalculateSnr(ns3::WifiMode txMode, double ber) const [member function]
     cls.add_method('CalculateSnr', 
                    'double', 
                    [param('ns3::WifiMode', 'txMode'), param('double', 'ber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
     cls.add_method('CalculateTxDuration', 
                    'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('ConfigureStandard', 
                    'void', 
@@ -5811,11 +5949,6 @@
                    'ns3::Ptr< ns3::WifiChannel >', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetChannelBonding() const [member function]
-    cls.add_method('GetChannelBonding', 
-                   'bool', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): uint16_t ns3::WifiPhy::GetChannelNumber() const [member function]
     cls.add_method('GetChannelNumber', 
                    'uint16_t', 
@@ -5826,6 +5959,11 @@
                    'ns3::Time', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::GetChannelWidth() const [member function]
+    cls.add_method('GetChannelWidth', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetDelayUntilIdle() [member function]
     cls.add_method('GetDelayUntilIdle', 
                    'ns3::Time', 
@@ -5906,6 +6044,171 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs0() [member function]
+    cls.add_method('GetHtMcs0', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs1() [member function]
+    cls.add_method('GetHtMcs1', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs10() [member function]
+    cls.add_method('GetHtMcs10', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs11() [member function]
+    cls.add_method('GetHtMcs11', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs12() [member function]
+    cls.add_method('GetHtMcs12', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs13() [member function]
+    cls.add_method('GetHtMcs13', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs14() [member function]
+    cls.add_method('GetHtMcs14', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs15() [member function]
+    cls.add_method('GetHtMcs15', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs16() [member function]
+    cls.add_method('GetHtMcs16', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs17() [member function]
+    cls.add_method('GetHtMcs17', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs18() [member function]
+    cls.add_method('GetHtMcs18', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs19() [member function]
+    cls.add_method('GetHtMcs19', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs2() [member function]
+    cls.add_method('GetHtMcs2', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs20() [member function]
+    cls.add_method('GetHtMcs20', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs21() [member function]
+    cls.add_method('GetHtMcs21', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs22() [member function]
+    cls.add_method('GetHtMcs22', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs23() [member function]
+    cls.add_method('GetHtMcs23', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs24() [member function]
+    cls.add_method('GetHtMcs24', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs25() [member function]
+    cls.add_method('GetHtMcs25', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs26() [member function]
+    cls.add_method('GetHtMcs26', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs27() [member function]
+    cls.add_method('GetHtMcs27', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs28() [member function]
+    cls.add_method('GetHtMcs28', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs29() [member function]
+    cls.add_method('GetHtMcs29', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs3() [member function]
+    cls.add_method('GetHtMcs3', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs30() [member function]
+    cls.add_method('GetHtMcs30', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs31() [member function]
+    cls.add_method('GetHtMcs31', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs4() [member function]
+    cls.add_method('GetHtMcs4', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs5() [member function]
+    cls.add_method('GetHtMcs5', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs6() [member function]
+    cls.add_method('GetHtMcs6', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs7() [member function]
+    cls.add_method('GetHtMcs7', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs8() [member function]
+    cls.add_method('GetHtMcs8', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtMcs9() [member function]
+    cls.add_method('GetHtMcs9', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetHtPlcpHeaderMode(ns3::WifiMode payloadMode) [member function]
+    cls.add_method('GetHtPlcpHeaderMode', 
+                   'ns3::WifiMode', 
+                   [param('ns3::WifiMode', 'payloadMode')], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetLastRxStartTime() const [member function]
     cls.add_method('GetLastRxStartTime', 
                    'ns3::Time', 
@@ -5916,14 +6219,9 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetMFPlcpHeaderMode(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
-    cls.add_method('GetMFPlcpHeaderMode', 
-                   'ns3::WifiMode', 
-                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetMcs(uint8_t mcs) const [member function]
+    ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::GetMcs(uint8_t mcs) const [member function]
     cls.add_method('GetMcs', 
-                   'uint8_t', 
+                   'ns3::WifiMode', 
                    [param('uint8_t', 'mcs')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::WifiModeList ns3::WifiPhy::GetMembershipSelectorModes(uint32_t selector) [member function]
@@ -5966,21 +6264,6 @@
                    'uint32_t', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate108MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate108MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate120MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate120MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate121_5MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate121_5MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate12Mbps() [member function]
     cls.add_method('GetOfdmRate12Mbps', 
                    'ns3::WifiMode', 
@@ -5996,46 +6279,11 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate135MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate135MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate135MbpsBW40MHzShGi() [member function]
-    cls.add_method('GetOfdmRate135MbpsBW40MHzShGi', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate13MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13_5MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate13_5MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate13_5MbpsBW5MHz() [member function]
     cls.add_method('GetOfdmRate13_5MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate14_4MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate14_4MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate150MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate150MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate15MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate15MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate18Mbps() [member function]
     cls.add_method('GetOfdmRate18Mbps', 
                    'ns3::WifiMode', 
@@ -6046,21 +6294,11 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate19_5MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate19_5MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate1_5MbpsBW5MHz() [member function]
     cls.add_method('GetOfdmRate1_5MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate21_7MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate21_7MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate24Mbps() [member function]
     cls.add_method('GetOfdmRate24Mbps', 
                    'ns3::WifiMode', 
@@ -6071,46 +6309,21 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate26MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate26MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate27MbpsBW10MHz() [member function]
     cls.add_method('GetOfdmRate27MbpsBW10MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate27MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate27MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate28_9MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate28_9MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate2_25MbpsBW5MHz() [member function]
     cls.add_method('GetOfdmRate2_25MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate30MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate30MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate36Mbps() [member function]
     cls.add_method('GetOfdmRate36Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate39MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate39MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate3MbpsBW10MHz() [member function]
     cls.add_method('GetOfdmRate3MbpsBW10MHz', 
                    'ns3::WifiMode', 
@@ -6121,21 +6334,6 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate40_5MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate40_5MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate43_3MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate43_3MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate45MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate45MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate48Mbps() [member function]
     cls.add_method('GetOfdmRate48Mbps', 
                    'ns3::WifiMode', 
@@ -6151,129 +6349,84 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate52MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate52MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate54Mbps() [member function]
     cls.add_method('GetOfdmRate54Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate54MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate54MbpsBW40MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6Mbps() [member function]
+    cls.add_method('GetOfdmRate6Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate57_8MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate57_8MbpsBW20MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6MbpsBW10MHz() [member function]
+    cls.add_method('GetOfdmRate6MbpsBW10MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate58_5MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate58_5MbpsBW20MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6MbpsBW5MHz() [member function]
+    cls.add_method('GetOfdmRate6MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate60MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate60MbpsBW40MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9Mbps() [member function]
+    cls.add_method('GetOfdmRate9Mbps', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate65MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate65MbpsBW20MHz', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9MbpsBW10MHz() [member function]
+    cls.add_method('GetOfdmRate9MbpsBW10MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate65MbpsBW20MHzShGi() [member function]
-    cls.add_method('GetOfdmRate65MbpsBW20MHzShGi', 
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9MbpsBW5MHz() [member function]
+    cls.add_method('GetOfdmRate9MbpsBW5MHz', 
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6Mbps() [member function]
-    cls.add_method('GetOfdmRate6Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate6MbpsBW10MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate6MbpsBW5MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate6_5MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate6_5MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate72_2MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate72_2MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate7_2MbpsBW20MHz() [member function]
-    cls.add_method('GetOfdmRate7_2MbpsBW20MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate81MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate81MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate90MbpsBW40MHz() [member function]
-    cls.add_method('GetOfdmRate90MbpsBW40MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9Mbps() [member function]
-    cls.add_method('GetOfdmRate9Mbps', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9MbpsBW10MHz() [member function]
-    cls.add_method('GetOfdmRate9MbpsBW10MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetOfdmRate9MbpsBW5MHz() [member function]
-    cls.add_method('GetOfdmRate9MbpsBW5MHz', 
-                   'ns3::WifiMode', 
-                   [], 
-                   is_static=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetPayloadDuration(uint32_t size, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetPayloadDuration(uint32_t size, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
     cls.add_method('GetPayloadDuration', 
                    'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
-    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHeaderDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHeaderDuration(ns3::WifiTxVector txVector, ns3::WifiPreamble preamble) [member function]
     cls.add_method('GetPlcpHeaderDuration', 
                    'ns3::Time', 
-                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   [param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetPlcpHeaderMode(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetPlcpHeaderMode(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble, ns3::WifiTxVector txVector) [member function]
     cls.add_method('GetPlcpHeaderMode', 
                    'ns3::WifiMode', 
-                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txVector')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHtSigHeaderDuration(ns3::WifiPreamble preamble) [member function]
     cls.add_method('GetPlcpHtSigHeaderDuration', 
                    'ns3::Time', 
                    [param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHtTrainingSymbolDuration(ns3::WifiPreamble preamble, ns3::WifiTxVector txvector) [member function]
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHtTrainingSymbolDuration(ns3::WifiPreamble preamble, ns3::WifiTxVector txVector) [member function]
     cls.add_method('GetPlcpHtTrainingSymbolDuration', 
                    'ns3::Time', 
-                   [param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txvector')], 
+                   [param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txVector')], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpPreambleDuration(ns3::WifiMode payloadMode, ns3::WifiPreamble preamble) [member function]
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpPreambleDuration(ns3::WifiTxVector txVector, ns3::WifiPreamble preamble) [member function]
     cls.add_method('GetPlcpPreambleDuration', 
                    'ns3::Time', 
-                   [param('ns3::WifiMode', 'payloadMode'), param('ns3::WifiPreamble', 'preamble')], 
+                   [param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpVhtSigA1Duration(ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpVhtSigA1Duration', 
+                   'ns3::Time', 
+                   [param('ns3::WifiPreamble', 'preamble')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpVhtSigA2Duration(ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpVhtSigA2Duration', 
+                   'ns3::Time', 
+                   [param('ns3::WifiPreamble', 'preamble')], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpVhtSigBDuration(ns3::WifiPreamble preamble) [member function]
+    cls.add_method('GetPlcpVhtSigBDuration', 
+                   'ns3::Time', 
+                   [param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetStateDuration() [member function]
     cls.add_method('GetStateDuration', 
@@ -6300,6 +6453,61 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs0() [member function]
+    cls.add_method('GetVhtMcs0', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs1() [member function]
+    cls.add_method('GetVhtMcs1', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs2() [member function]
+    cls.add_method('GetVhtMcs2', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs3() [member function]
+    cls.add_method('GetVhtMcs3', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs4() [member function]
+    cls.add_method('GetVhtMcs4', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs5() [member function]
+    cls.add_method('GetVhtMcs5', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs6() [member function]
+    cls.add_method('GetVhtMcs6', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs7() [member function]
+    cls.add_method('GetVhtMcs7', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs8() [member function]
+    cls.add_method('GetVhtMcs8', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtMcs9() [member function]
+    cls.add_method('GetVhtMcs9', 
+                   'ns3::WifiMode', 
+                   [], 
+                   is_static=True)
+    ## wifi-phy.h (module 'wifi'): static ns3::WifiMode ns3::WifiPhy::GetVhtPlcpHeaderMode(ns3::WifiMode payloadMode) [member function]
+    cls.add_method('GetVhtPlcpHeaderMode', 
+                   'ns3::WifiMode', 
+                   [param('ns3::WifiMode', 'payloadMode')], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::IsModeSupported(ns3::WifiMode mode) const [member function]
     cls.add_method('IsModeSupported', 
                    'bool', 
@@ -6340,19 +6548,14 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::WifiMode ns3::WifiPhy::McsToWifiMode(uint8_t mcs) [member function]
-    cls.add_method('McsToWifiMode', 
-                   'ns3::WifiMode', 
-                   [param('uint8_t', 'mcs')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffRx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble, double signalDbm, double noiseDbm) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffRx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, ns3::WifiPreamble preamble, ns3::WifiTxVector txVector, ns3::mpduInfo aMpdu, ns3::signalNoiseDbm signalNoise) [member function]
     cls.add_method('NotifyMonitorSniffRx', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('bool', 'isShortPreamble'), param('double', 'signalDbm'), param('double', 'noiseDbm')])
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffTx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, bool isShortPreamble, uint8_t txPower) [member function]
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txVector'), param('ns3::mpduInfo', 'aMpdu'), param('ns3::signalNoiseDbm', 'signalNoise')])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffTx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, ns3::WifiPreamble preamble, ns3::WifiTxVector txVector, ns3::mpduInfo aMpdu) [member function]
     cls.add_method('NotifyMonitorSniffTx', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('bool', 'isShortPreamble'), param('uint8_t', 'txPower')])
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'channelFreqMhz'), param('uint16_t', 'channelNumber'), param('uint32_t', 'rate'), param('ns3::WifiPreamble', 'preamble'), param('ns3::WifiTxVector', 'txVector'), param('ns3::mpduInfo', 'aMpdu')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyRxBegin(ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('NotifyRxBegin', 
                    'void', 
@@ -6387,21 +6590,21 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txvector, ns3::WifiPreamble preamble, uint8_t packetType) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, uint8_t packetType, uint32_t mpduReferenceNumber) [member function]
     cls.add_method('SendPacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txvector'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'packetType')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelBonding(bool channelbonding) [member function]
-    cls.add_method('SetChannelBonding', 
-                   'void', 
-                   [param('bool', 'channelbonding')], 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'packetType'), param('uint32_t', 'mpduReferenceNumber')], 
                    is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelNumber(uint16_t id) [member function]
     cls.add_method('SetChannelNumber', 
                    'void', 
                    [param('uint16_t', 'id')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelWidth(uint32_t channelwidth) [member function]
+    cls.add_method('SetChannelWidth', 
+                   'void', 
+                   [param('uint32_t', 'channelwidth')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetFrequency(uint32_t freq) [member function]
     cls.add_method('SetFrequency', 
                    'void', 
@@ -6457,11 +6660,6 @@
                    'void', 
                    [param('ns3::WifiPhyListener *', 'listener')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): uint32_t ns3::WifiPhy::WifiModeToMcs(ns3::WifiMode mode) [member function]
-    cls.add_method('WifiModeToMcs', 
-                   'uint32_t', 
-                   [param('ns3::WifiMode', 'mode')], 
-                   is_pure_virtual=True, is_virtual=True)
     return
 
 def register_Ns3WifiRemoteStationManager_methods(root_module, cls):
@@ -6473,10 +6671,10 @@
     cls.add_method('AddAllSupportedModes', 
                    'void', 
                    [param('ns3::Mac48Address', 'address')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddBasicMcs(uint8_t mcs) [member function]
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddBasicMcs(ns3::WifiMode mcs) [member function]
     cls.add_method('AddBasicMcs', 
                    'void', 
-                   [param('uint8_t', 'mcs')])
+                   [param('ns3::WifiMode', 'mcs')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddBasicMode(ns3::WifiMode mode) [member function]
     cls.add_method('AddBasicMode', 
                    'void', 
@@ -6485,10 +6683,14 @@
     cls.add_method('AddStationHtCapabilities', 
                    'void', 
                    [param('ns3::Mac48Address', 'from'), param('ns3::HtCapabilities', 'htcapabilities')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddSupportedMcs(ns3::Mac48Address address, uint8_t mcs) [member function]
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddStationVhtCapabilities(ns3::Mac48Address from, ns3::VhtCapabilities vhtcapabilities) [member function]
+    cls.add_method('AddStationVhtCapabilities', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'from'), param('ns3::VhtCapabilities', 'vhtcapabilities')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddSupportedMcs(ns3::Mac48Address address, ns3::WifiMode mcs) [member function]
     cls.add_method('AddSupportedMcs', 
                    'void', 
-                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'mcs')])
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'mcs')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddSupportedMode(ns3::Mac48Address address, ns3::WifiMode mode) [member function]
     cls.add_method('AddSupportedMode', 
                    'void', 
@@ -6501,9 +6703,9 @@
     cls.add_method('GetAckTxVector', 
                    'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'dataMode')])
-    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetBasicMcs(uint32_t i) const [member function]
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetBasicMcs(uint32_t i) const [member function]
     cls.add_method('GetBasicMcs', 
-                   'uint8_t', 
+                   'ns3::WifiMode', 
                    [param('uint32_t', 'i')], 
                    is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetBasicMode(uint32_t i) const [member function]
@@ -6527,9 +6729,9 @@
     cls.add_method('GetDataTxVector', 
                    'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint32_t', 'fullPacketSize')])
-    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetDefaultMcs() const [member function]
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetDefaultMcs() const [member function]
     cls.add_method('GetDefaultMcs', 
-                   'uint8_t', 
+                   'ns3::WifiMode', 
                    [], 
                    is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetDefaultMode() const [member function]
@@ -6612,6 +6814,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::HasVhtSupported() const [member function]
+    cls.add_method('HasVhtSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::IsAssociated(ns3::Mac48Address address) const [member function]
     cls.add_method('IsAssociated', 
                    'bool', 
@@ -6731,6 +6938,10 @@
     cls.add_method('SetRtsCtsThreshold', 
                    'void', 
                    [param('uint32_t', 'threshold')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetVhtSupported(bool enable) [member function]
+    cls.add_method('SetVhtSupported', 
+                   'void', 
+                   [param('bool', 'enable')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetupMac(ns3::Ptr<ns3::WifiMac> mac) [member function]
     cls.add_method('SetupMac', 
                    'void', 
@@ -6741,11 +6952,25 @@
                    'void', 
                    [param('ns3::Ptr< ns3::WifiPhy >', 'phy')], 
                    is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::UpdateFragmentationThreshold() [member function]
+    cls.add_method('UpdateFragmentationThreshold', 
+                   'void', 
+                   [])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetAggregation(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetAggregation', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetChannelWidth(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetChannelWidth', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetGreenfield(ns3::WifiRemoteStation const * station) const [member function]
     cls.add_method('GetGreenfield', 
                    'bool', 
@@ -6761,9 +6986,9 @@
                    'ns3::Ptr< ns3::WifiMac >', 
                    [], 
                    is_const=True, visibility='protected')
-    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetMcsSupported(ns3::WifiRemoteStation const * station, uint32_t i) const [member function]
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetMcsSupported(ns3::WifiRemoteStation const * station, uint32_t i) const [member function]
     cls.add_method('GetMcsSupported', 
-                   'uint8_t', 
+                   'ns3::WifiMode', 
                    [param('ns3::WifiRemoteStation const *', 'station'), param('uint32_t', 'i')], 
                    is_const=True, visibility='protected')
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNMcsSupported(ns3::WifiRemoteStation const * station) const [member function]
@@ -6821,6 +7046,11 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::DoGetAckTxChannelWidth(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetAckTxChannelWidth', 
+                   'uint32_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetAckTxGuardInterval(ns3::Mac48Address address, ns3::WifiMode ackMode) [member function]
     cls.add_method('DoGetAckTxGuardInterval', 
                    'bool', 
@@ -6846,6 +7076,11 @@
                    'bool', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ackMode')], 
                    visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::DoGetBlockAckTxChannelWidth(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetBlockAckTxChannelWidth', 
+                   'uint32_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetBlockAckTxGuardInterval(ns3::Mac48Address address, ns3::WifiMode blockAckMode) [member function]
     cls.add_method('DoGetBlockAckTxGuardInterval', 
                    'bool', 
@@ -6871,6 +7106,11 @@
                    'bool', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'blockAckMode')], 
                    visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::DoGetCtsTxChannelWidth(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
+    cls.add_method('DoGetCtsTxChannelWidth', 
+                   'uint32_t', 
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
+                   visibility='private', is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::DoGetCtsTxGuardInterval(ns3::Mac48Address address, ns3::WifiMode ctsMode) [member function]
     cls.add_method('DoGetCtsTxGuardInterval', 
                    'bool', 
@@ -7112,11 +7352,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -7967,6 +8217,16 @@
                    'uint8_t', 
                    [], 
                    is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetAntennaSelectionCapabilities() const [member function]
+    cls.add_method('GetAntennaSelectionCapabilities', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint16_t ns3::HtCapabilities::GetExtendedHtCapabilities() const [member function]
+    cls.add_method('GetExtendedHtCapabilities', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
     ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetGreenfield() const [member function]
     cls.add_method('GetGreenfield', 
                    'uint8_t', 
@@ -7982,11 +8242,31 @@
                    'uint8_t', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetLSigProtectionSupport() const [member function]
+    cls.add_method('GetLSigProtectionSupport', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetLdpc() const [member function]
     cls.add_method('GetLdpc', 
                    'uint8_t', 
                    [], 
                    is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetMaxAmpduLength() const [member function]
+    cls.add_method('GetMaxAmpduLength', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetMaxAmsduLength() const [member function]
+    cls.add_method('GetMaxAmsduLength', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint16_t ns3::HtCapabilities::GetRxHighestSupportedDataRate() const [member function]
+    cls.add_method('GetRxHighestSupportedDataRate', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
     ## ht-capabilities.h (module 'wifi'): uint8_t * ns3::HtCapabilities::GetRxMcsBitmask() [member function]
     cls.add_method('GetRxMcsBitmask', 
                    'uint8_t *', 
@@ -8001,6 +8281,11 @@
                    'uint8_t', 
                    [], 
                    is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetShortGuardInterval40() const [member function]
+    cls.add_method('GetShortGuardInterval40', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetSupportedChannelWidth() const [member function]
     cls.add_method('GetSupportedChannelWidth', 
                    'uint8_t', 
@@ -8016,6 +8301,21 @@
                    'uint64_t', 
                    [], 
                    is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint32_t ns3::HtCapabilities::GetTxBfCapabilities() const [member function]
+    cls.add_method('GetTxBfCapabilities', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetTxMaxNSpatialStreams() const [member function]
+    cls.add_method('GetTxMaxNSpatialStreams', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetTxMcsSetDefined() const [member function]
+    cls.add_method('GetTxMcsSetDefined', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## ht-capabilities.h (module 'wifi'): bool ns3::HtCapabilities::IsSupportedMcs(uint8_t mcs) [member function]
     cls.add_method('IsSupportedMcs', 
                    'bool', 
@@ -8034,6 +8334,14 @@
     cls.add_method('SetAmpduParameters', 
                    'void', 
                    [param('uint8_t', 'ctrl')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetAntennaSelectionCapabilities(uint8_t ctrl) [member function]
+    cls.add_method('SetAntennaSelectionCapabilities', 
+                   'void', 
+                   [param('uint8_t', 'ctrl')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetExtendedHtCapabilities(uint16_t ctrl) [member function]
+    cls.add_method('SetExtendedHtCapabilities', 
+                   'void', 
+                   [param('uint16_t', 'ctrl')])
     ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetGreenfield(uint8_t greenfield) [member function]
     cls.add_method('SetGreenfield', 
                    'void', 
@@ -8046,10 +8354,26 @@
     cls.add_method('SetHtSupported', 
                    'void', 
                    [param('uint8_t', 'htsupported')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetLSigProtectionSupport(uint8_t lsigprotection) [member function]
+    cls.add_method('SetLSigProtectionSupport', 
+                   'void', 
+                   [param('uint8_t', 'lsigprotection')])
     ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetLdpc(uint8_t ldpc) [member function]
     cls.add_method('SetLdpc', 
                    'void', 
                    [param('uint8_t', 'ldpc')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetMaxAmpduLength(uint8_t maxampdulength) [member function]
+    cls.add_method('SetMaxAmpduLength', 
+                   'void', 
+                   [param('uint8_t', 'maxampdulength')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetMaxAmsduLength(uint8_t maxamsdulength) [member function]
+    cls.add_method('SetMaxAmsduLength', 
+                   'void', 
+                   [param('uint8_t', 'maxamsdulength')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetRxHighestSupportedDataRate(uint16_t maxsupportedrate) [member function]
+    cls.add_method('SetRxHighestSupportedDataRate', 
+                   'void', 
+                   [param('uint16_t', 'maxsupportedrate')])
     ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetRxMcsBitmask(uint8_t index) [member function]
     cls.add_method('SetRxMcsBitmask', 
                    'void', 
@@ -8058,6 +8382,10 @@
     cls.add_method('SetShortGuardInterval20', 
                    'void', 
                    [param('uint8_t', 'shortguardinterval')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetShortGuardInterval40(uint8_t shortguardinterval) [member function]
+    cls.add_method('SetShortGuardInterval40', 
+                   'void', 
+                   [param('uint8_t', 'shortguardinterval')])
     ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetSupportedChannelWidth(uint8_t supportedchannelwidth) [member function]
     cls.add_method('SetSupportedChannelWidth', 
                    'void', 
@@ -8066,6 +8394,18 @@
     cls.add_method('SetSupportedMcsSet', 
                    'void', 
                    [param('uint64_t', 'ctrl1'), param('uint64_t', 'ctrl2')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetTxBfCapabilities(uint32_t ctrl) [member function]
+    cls.add_method('SetTxBfCapabilities', 
+                   'void', 
+                   [param('uint32_t', 'ctrl')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetTxMaxNSpatialStreams(uint8_t maxtxspatialstreams) [member function]
+    cls.add_method('SetTxMaxNSpatialStreams', 
+                   'void', 
+                   [param('uint8_t', 'maxtxspatialstreams')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetTxMcsSetDefined(uint8_t txmcssetdefined) [member function]
+    cls.add_method('SetTxMcsSetDefined', 
+                   'void', 
+                   [param('uint8_t', 'txmcssetdefined')])
     return
 
 def register_Ns3HtCapabilitiesChecker_methods(root_module, cls):
@@ -8342,15 +8682,25 @@
     return
 
 def register_Ns3MeshInformationElementVector_methods(root_module, cls):
-    ## mesh-information-element-vector.h (module 'mesh'): ns3::MeshInformationElementVector::MeshInformationElementVector() [constructor]
-    cls.add_constructor([])
     ## mesh-information-element-vector.h (module 'mesh'): ns3::MeshInformationElementVector::MeshInformationElementVector(ns3::MeshInformationElementVector const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::MeshInformationElementVector const &', 'arg0')])
+    ## mesh-information-element-vector.h (module 'mesh'): ns3::MeshInformationElementVector::MeshInformationElementVector() [constructor]
+    cls.add_constructor([])
     ## mesh-information-element-vector.h (module 'mesh'): uint32_t ns3::MeshInformationElementVector::DeserializeSingleIe(ns3::Buffer::Iterator start) [member function]
     cls.add_method('DeserializeSingleIe', 
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_virtual=True)
+    ## mesh-information-element-vector.h (module 'mesh'): ns3::TypeId ns3::MeshInformationElementVector::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mesh-information-element-vector.h (module 'mesh'): static ns3::TypeId ns3::MeshInformationElementVector::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     return
 
 def register_Ns3MeshL2RoutingProtocol_methods(root_module, cls):
@@ -8389,6 +8739,11 @@
     cls.add_constructor([])
     ## mesh-stack-installer.h (module 'mesh'): ns3::MeshStack::MeshStack(ns3::MeshStack const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::MeshStack const &', 'arg0')])
+    ## mesh-stack-installer.h (module 'mesh'): static ns3::TypeId ns3::MeshStack::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## mesh-stack-installer.h (module 'mesh'): bool ns3::MeshStack::InstallStack(ns3::Ptr<ns3::MeshPointDevice> mp) [member function]
     cls.add_method('InstallStack', 
                    'bool', 
@@ -8443,6 +8798,11 @@
     cls.add_constructor([])
     ## mgt-headers.h (module 'wifi'): ns3::MgtBeaconHeader::MgtBeaconHeader(ns3::MgtBeaconHeader const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::MgtBeaconHeader const &', 'arg0')])
+    ## mgt-headers.h (module 'wifi'): static ns3::TypeId ns3::MgtBeaconHeader::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     return
 
 def register_Ns3NetDevice_methods(root_module, cls):
@@ -9234,6 +9594,16 @@
                    'bool', 
                    [], 
                    is_const=True, visibility='protected')
+    ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetVhtSupported(bool enable) [member function]
+    cls.add_method('SetVhtSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   visibility='protected')
+    ## regular-wifi-mac.h (module 'wifi'): bool ns3::RegularWifiMac::GetVhtSupported() const [member function]
+    cls.add_method('GetVhtSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='protected')
     return
 
 def register_Ns3Ssid_methods(root_module, cls):
@@ -9489,6 +9859,237 @@
                    [param('uint64_t const &', 'value')])
     return
 
+def register_Ns3VhtCapabilities_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilities::VhtCapabilities(ns3::VhtCapabilities const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::VhtCapabilities const &', 'arg0')])
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilities::VhtCapabilities() [constructor]
+    cls.add_constructor([])
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::DeserializeInformationField(ns3::Buffer::Iterator start, uint8_t length) [member function]
+    cls.add_method('DeserializeInformationField', 
+                   'uint8_t', 
+                   [param('ns3::Buffer::Iterator', 'start'), param('uint8_t', 'length')], 
+                   is_virtual=True)
+    ## vht-capabilities.h (module 'wifi'): ns3::WifiInformationElementId ns3::VhtCapabilities::ElementId() const [member function]
+    cls.add_method('ElementId', 
+                   'ns3::WifiInformationElementId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::GetInformationFieldSize() const [member function]
+    cls.add_method('GetInformationFieldSize', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::GetMaxAmpduLengthExponent() const [member function]
+    cls.add_method('GetMaxAmpduLengthExponent', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::GetMaxMpduLength() const [member function]
+    cls.add_method('GetMaxMpduLength', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint16_t ns3::VhtCapabilities::GetRxHighestSupportedLgiDataRate() const [member function]
+    cls.add_method('GetRxHighestSupportedLgiDataRate', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::GetRxLdpc() const [member function]
+    cls.add_method('GetRxLdpc', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint16_t ns3::VhtCapabilities::GetRxMcsMap() const [member function]
+    cls.add_method('GetRxMcsMap', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::GetRxStbc() const [member function]
+    cls.add_method('GetRxStbc', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint16_t ns3::VhtCapabilities::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::GetShortGuardIntervalFor160Mhz() const [member function]
+    cls.add_method('GetShortGuardIntervalFor160Mhz', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::GetShortGuardIntervalFor80Mhz() const [member function]
+    cls.add_method('GetShortGuardIntervalFor80Mhz', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::GetSupportedChannelWidthSet() const [member function]
+    cls.add_method('GetSupportedChannelWidthSet', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint64_t ns3::VhtCapabilities::GetSupportedMcsAndNssSet() const [member function]
+    cls.add_method('GetSupportedMcsAndNssSet', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint16_t ns3::VhtCapabilities::GetTxHighestSupportedLgiDataRate() const [member function]
+    cls.add_method('GetTxHighestSupportedLgiDataRate', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint16_t ns3::VhtCapabilities::GetTxMcsMap() const [member function]
+    cls.add_method('GetTxMcsMap', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint8_t ns3::VhtCapabilities::GetTxStbc() const [member function]
+    cls.add_method('GetTxStbc', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): uint32_t ns3::VhtCapabilities::GetVhtCapabilitiesInfo() const [member function]
+    cls.add_method('GetVhtCapabilitiesInfo', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): bool ns3::VhtCapabilities::IsSupportedMcs(uint8_t mcs, uint8_t Nss) const [member function]
+    cls.add_method('IsSupportedMcs', 
+                   'bool', 
+                   [param('uint8_t', 'mcs'), param('uint8_t', 'Nss')], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): bool ns3::VhtCapabilities::IsSupportedRxMcs(uint8_t mcs) const [member function]
+    cls.add_method('IsSupportedRxMcs', 
+                   'bool', 
+                   [param('uint8_t', 'mcs')], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): bool ns3::VhtCapabilities::IsSupportedTxMcs(uint8_t mcs) const [member function]
+    cls.add_method('IsSupportedTxMcs', 
+                   'bool', 
+                   [param('uint8_t', 'mcs')], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): ns3::Buffer::Iterator ns3::VhtCapabilities::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'ns3::Buffer::Iterator', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SerializeInformationField(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('SerializeInformationField', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetMaxAmpduLengthExponent(uint8_t exponent) [member function]
+    cls.add_method('SetMaxAmpduLengthExponent', 
+                   'void', 
+                   [param('uint8_t', 'exponent')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetMaxMpduLength(uint8_t length) [member function]
+    cls.add_method('SetMaxMpduLength', 
+                   'void', 
+                   [param('uint8_t', 'length')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetRxHighestSupportedLgiDataRate(uint16_t supporteddatarate) [member function]
+    cls.add_method('SetRxHighestSupportedLgiDataRate', 
+                   'void', 
+                   [param('uint16_t', 'supporteddatarate')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetRxLdpc(uint8_t rxldpc) [member function]
+    cls.add_method('SetRxLdpc', 
+                   'void', 
+                   [param('uint8_t', 'rxldpc')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetRxMcsMap(uint16_t map) [member function]
+    cls.add_method('SetRxMcsMap', 
+                   'void', 
+                   [param('uint16_t', 'map')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetRxMcsMap(uint8_t mcs, uint8_t nss) [member function]
+    cls.add_method('SetRxMcsMap', 
+                   'void', 
+                   [param('uint8_t', 'mcs'), param('uint8_t', 'nss')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetRxStbc(uint8_t rxstbc) [member function]
+    cls.add_method('SetRxStbc', 
+                   'void', 
+                   [param('uint8_t', 'rxstbc')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetShortGuardIntervalFor160Mhz(uint8_t shortguardinterval) [member function]
+    cls.add_method('SetShortGuardIntervalFor160Mhz', 
+                   'void', 
+                   [param('uint8_t', 'shortguardinterval')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetShortGuardIntervalFor80Mhz(uint8_t shortguardinterval) [member function]
+    cls.add_method('SetShortGuardIntervalFor80Mhz', 
+                   'void', 
+                   [param('uint8_t', 'shortguardinterval')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetSupportedChannelWidthSet(uint8_t channelwidthset) [member function]
+    cls.add_method('SetSupportedChannelWidthSet', 
+                   'void', 
+                   [param('uint8_t', 'channelwidthset')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetSupportedMcsAndNssSet(uint64_t ctrl) [member function]
+    cls.add_method('SetSupportedMcsAndNssSet', 
+                   'void', 
+                   [param('uint64_t', 'ctrl')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetTxHighestSupportedLgiDataRate(uint16_t supporteddatarate) [member function]
+    cls.add_method('SetTxHighestSupportedLgiDataRate', 
+                   'void', 
+                   [param('uint16_t', 'supporteddatarate')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetTxMcsMap(uint16_t map) [member function]
+    cls.add_method('SetTxMcsMap', 
+                   'void', 
+                   [param('uint16_t', 'map')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetTxMcsMap(uint8_t mcs, uint8_t nss) [member function]
+    cls.add_method('SetTxMcsMap', 
+                   'void', 
+                   [param('uint8_t', 'mcs'), param('uint8_t', 'nss')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetTxStbc(uint8_t txstbc) [member function]
+    cls.add_method('SetTxStbc', 
+                   'void', 
+                   [param('uint8_t', 'txstbc')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetVhtCapabilitiesInfo(uint32_t ctrl) [member function]
+    cls.add_method('SetVhtCapabilitiesInfo', 
+                   'void', 
+                   [param('uint32_t', 'ctrl')])
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilities::SetVhtSupported(uint8_t vhtsupported) [member function]
+    cls.add_method('SetVhtSupported', 
+                   'void', 
+                   [param('uint8_t', 'vhtsupported')])
+    return
+
+def register_Ns3VhtCapabilitiesChecker_methods(root_module, cls):
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilitiesChecker::VhtCapabilitiesChecker() [constructor]
+    cls.add_constructor([])
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilitiesChecker::VhtCapabilitiesChecker(ns3::VhtCapabilitiesChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::VhtCapabilitiesChecker const &', 'arg0')])
+    return
+
+def register_Ns3VhtCapabilitiesValue_methods(root_module, cls):
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilitiesValue::VhtCapabilitiesValue() [constructor]
+    cls.add_constructor([])
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilitiesValue::VhtCapabilitiesValue(ns3::VhtCapabilitiesValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::VhtCapabilitiesValue const &', 'arg0')])
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilitiesValue::VhtCapabilitiesValue(ns3::VhtCapabilities const & value) [constructor]
+    cls.add_constructor([param('ns3::VhtCapabilities const &', 'value')])
+    ## vht-capabilities.h (module 'wifi'): ns3::Ptr<ns3::AttributeValue> ns3::VhtCapabilitiesValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## vht-capabilities.h (module 'wifi'): bool ns3::VhtCapabilitiesValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## vht-capabilities.h (module 'wifi'): ns3::VhtCapabilities ns3::VhtCapabilitiesValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::VhtCapabilities', 
+                   [], 
+                   is_const=True)
+    ## vht-capabilities.h (module 'wifi'): std::string ns3::VhtCapabilitiesValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## vht-capabilities.h (module 'wifi'): void ns3::VhtCapabilitiesValue::Set(ns3::VhtCapabilities const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::VhtCapabilities const &', 'value')])
+    return
+
 def register_Ns3WifiModeChecker_methods(root_module, cls):
     ## wifi-mode.h (module 'wifi'): ns3::WifiModeChecker::WifiModeChecker() [constructor]
     cls.add_constructor([])
@@ -11440,76 +12041,184 @@
                    is_const=True)
     return
 
-def register_Ns3Dot11sPeerLinkFrameStart_methods(root_module, cls):
+def register_Ns3Dot11sPeerLinkCloseStart_methods(root_module, cls):
     cls.add_binary_comparison_operator('==')
-    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkFrameStart::PeerLinkFrameStart() [constructor]
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkCloseStart::PeerLinkCloseStart() [constructor]
     cls.add_constructor([])
-    ## peer-link-frame.h (module 'mesh'): uint32_t ns3::dot11s::PeerLinkFrameStart::Deserialize(ns3::Buffer::Iterator start) [member function]
+    ## peer-link-frame.h (module 'mesh'): uint32_t ns3::dot11s::PeerLinkCloseStart::Deserialize(ns3::Buffer::Iterator start) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_virtual=True)
-    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkFrameStart::PlinkFrameStartFields ns3::dot11s::PeerLinkFrameStart::GetFields() const [member function]
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkCloseStart::PlinkCloseStartFields ns3::dot11s::PeerLinkCloseStart::GetFields() const [member function]
     cls.add_method('GetFields', 
-                   'ns3::dot11s::PeerLinkFrameStart::PlinkFrameStartFields', 
+                   'ns3::dot11s::PeerLinkCloseStart::PlinkCloseStartFields', 
                    [], 
                    is_const=True)
-    ## peer-link-frame.h (module 'mesh'): ns3::TypeId ns3::dot11s::PeerLinkFrameStart::GetInstanceTypeId() const [member function]
+    ## peer-link-frame.h (module 'mesh'): ns3::TypeId ns3::dot11s::PeerLinkCloseStart::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## peer-link-frame.h (module 'mesh'): uint32_t ns3::dot11s::PeerLinkFrameStart::GetSerializedSize() const [member function]
+    ## peer-link-frame.h (module 'mesh'): uint32_t ns3::dot11s::PeerLinkCloseStart::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## peer-link-frame.h (module 'mesh'): static ns3::TypeId ns3::dot11s::PeerLinkFrameStart::GetTypeId() [member function]
+    ## peer-link-frame.h (module 'mesh'): static ns3::TypeId ns3::dot11s::PeerLinkCloseStart::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## peer-link-frame.h (module 'mesh'): void ns3::dot11s::PeerLinkFrameStart::Print(std::ostream & os) const [member function]
+    ## peer-link-frame.h (module 'mesh'): void ns3::dot11s::PeerLinkCloseStart::Print(std::ostream & os) const [member function]
     cls.add_method('Print', 
                    'void', 
                    [param('std::ostream &', 'os')], 
                    is_const=True, is_virtual=True)
-    ## peer-link-frame.h (module 'mesh'): void ns3::dot11s::PeerLinkFrameStart::Serialize(ns3::Buffer::Iterator start) const [member function]
+    ## peer-link-frame.h (module 'mesh'): void ns3::dot11s::PeerLinkCloseStart::Serialize(ns3::Buffer::Iterator start) const [member function]
     cls.add_method('Serialize', 
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
-    ## peer-link-frame.h (module 'mesh'): void ns3::dot11s::PeerLinkFrameStart::SetPlinkFrameStart(ns3::dot11s::PeerLinkFrameStart::PlinkFrameStartFields arg0) [member function]
-    cls.add_method('SetPlinkFrameStart', 
+    ## peer-link-frame.h (module 'mesh'): void ns3::dot11s::PeerLinkCloseStart::SetPlinkCloseStart(ns3::dot11s::PeerLinkCloseStart::PlinkCloseStartFields arg0) [member function]
+    cls.add_method('SetPlinkCloseStart', 
                    'void', 
-                   [param('ns3::dot11s::PeerLinkFrameStart::PlinkFrameStartFields', 'arg0')])
-    ## peer-link-frame.h (module 'mesh'): void ns3::dot11s::PeerLinkFrameStart::SetPlinkFrameSubtype(uint8_t subtype) [member function]
-    cls.add_method('SetPlinkFrameSubtype', 
+                   [param('ns3::dot11s::PeerLinkCloseStart::PlinkCloseStartFields', 'arg0')])
+    return
+
+def register_Ns3Dot11sPeerLinkCloseStartPlinkCloseStartFields_methods(root_module, cls):
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkCloseStart::PlinkCloseStartFields::PlinkCloseStartFields() [constructor]
+    cls.add_constructor([])
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkCloseStart::PlinkCloseStartFields::PlinkCloseStartFields(ns3::dot11s::PeerLinkCloseStart::PlinkCloseStartFields const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dot11s::PeerLinkCloseStart::PlinkCloseStartFields const &', 'arg0')])
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkCloseStart::PlinkCloseStartFields::meshId [variable]
+    cls.add_instance_attribute('meshId', 'ns3::dot11s::IeMeshId', is_const=False)
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkCloseStart::PlinkCloseStartFields::protocol [variable]
+    cls.add_instance_attribute('protocol', 'ns3::dot11s::IePeeringProtocol', is_const=False)
+    return
+
+def register_Ns3Dot11sPeerLinkConfirmStart_methods(root_module, cls):
+    cls.add_binary_comparison_operator('==')
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkConfirmStart::PeerLinkConfirmStart() [constructor]
+    cls.add_constructor([])
+    ## peer-link-frame.h (module 'mesh'): uint32_t ns3::dot11s::PeerLinkConfirmStart::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields ns3::dot11s::PeerLinkConfirmStart::GetFields() const [member function]
+    cls.add_method('GetFields', 
+                   'ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields', 
+                   [], 
+                   is_const=True)
+    ## peer-link-frame.h (module 'mesh'): ns3::TypeId ns3::dot11s::PeerLinkConfirmStart::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## peer-link-frame.h (module 'mesh'): uint32_t ns3::dot11s::PeerLinkConfirmStart::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## peer-link-frame.h (module 'mesh'): static ns3::TypeId ns3::dot11s::PeerLinkConfirmStart::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## peer-link-frame.h (module 'mesh'): void ns3::dot11s::PeerLinkConfirmStart::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
                    'void', 
-                   [param('uint8_t', 'subtype')])
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## peer-link-frame.h (module 'mesh'): void ns3::dot11s::PeerLinkConfirmStart::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## peer-link-frame.h (module 'mesh'): void ns3::dot11s::PeerLinkConfirmStart::SetPlinkConfirmStart(ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields arg0) [member function]
+    cls.add_method('SetPlinkConfirmStart', 
+                   'void', 
+                   [param('ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields', 'arg0')])
     return
 
-def register_Ns3Dot11sPeerLinkFrameStartPlinkFrameStartFields_methods(root_module, cls):
-    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkFrameStart::PlinkFrameStartFields::PlinkFrameStartFields() [constructor]
+def register_Ns3Dot11sPeerLinkConfirmStartPlinkConfirmStartFields_methods(root_module, cls):
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields::PlinkConfirmStartFields() [constructor]
     cls.add_constructor([])
-    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkFrameStart::PlinkFrameStartFields::PlinkFrameStartFields(ns3::dot11s::PeerLinkFrameStart::PlinkFrameStartFields const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dot11s::PeerLinkFrameStart::PlinkFrameStartFields const &', 'arg0')])
-    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkFrameStart::PlinkFrameStartFields::aid [variable]
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields::PlinkConfirmStartFields(ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields const &', 'arg0')])
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields::aid [variable]
     cls.add_instance_attribute('aid', 'uint16_t', is_const=False)
-    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkFrameStart::PlinkFrameStartFields::capability [variable]
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields::capability [variable]
+    cls.add_instance_attribute('capability', 'uint16_t', is_const=False)
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields::config [variable]
+    cls.add_instance_attribute('config', 'ns3::dot11s::IeConfiguration', is_const=False)
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields::protocol [variable]
+    cls.add_instance_attribute('protocol', 'ns3::dot11s::IePeeringProtocol', is_const=False)
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkConfirmStart::PlinkConfirmStartFields::rates [variable]
+    cls.add_instance_attribute('rates', 'ns3::SupportedRates', is_const=False)
+    return
+
+def register_Ns3Dot11sPeerLinkOpenStart_methods(root_module, cls):
+    cls.add_binary_comparison_operator('==')
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkOpenStart::PeerLinkOpenStart() [constructor]
+    cls.add_constructor([])
+    ## peer-link-frame.h (module 'mesh'): uint32_t ns3::dot11s::PeerLinkOpenStart::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields ns3::dot11s::PeerLinkOpenStart::GetFields() const [member function]
+    cls.add_method('GetFields', 
+                   'ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields', 
+                   [], 
+                   is_const=True)
+    ## peer-link-frame.h (module 'mesh'): ns3::TypeId ns3::dot11s::PeerLinkOpenStart::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## peer-link-frame.h (module 'mesh'): uint32_t ns3::dot11s::PeerLinkOpenStart::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## peer-link-frame.h (module 'mesh'): static ns3::TypeId ns3::dot11s::PeerLinkOpenStart::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## peer-link-frame.h (module 'mesh'): void ns3::dot11s::PeerLinkOpenStart::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## peer-link-frame.h (module 'mesh'): void ns3::dot11s::PeerLinkOpenStart::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## peer-link-frame.h (module 'mesh'): void ns3::dot11s::PeerLinkOpenStart::SetPlinkOpenStart(ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields arg0) [member function]
+    cls.add_method('SetPlinkOpenStart', 
+                   'void', 
+                   [param('ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields', 'arg0')])
+    return
+
+def register_Ns3Dot11sPeerLinkOpenStartPlinkOpenStartFields_methods(root_module, cls):
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields::PlinkOpenStartFields() [constructor]
+    cls.add_constructor([])
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields::PlinkOpenStartFields(ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields const &', 'arg0')])
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields::capability [variable]
     cls.add_instance_attribute('capability', 'uint16_t', is_const=False)
-    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkFrameStart::PlinkFrameStartFields::config [variable]
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields::config [variable]
     cls.add_instance_attribute('config', 'ns3::dot11s::IeConfiguration', is_const=False)
-    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkFrameStart::PlinkFrameStartFields::meshId [variable]
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields::meshId [variable]
     cls.add_instance_attribute('meshId', 'ns3::dot11s::IeMeshId', is_const=False)
-    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkFrameStart::PlinkFrameStartFields::protocol [variable]
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields::protocol [variable]
     cls.add_instance_attribute('protocol', 'ns3::dot11s::IePeeringProtocol', is_const=False)
-    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkFrameStart::PlinkFrameStartFields::rates [variable]
+    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkOpenStart::PlinkOpenStartFields::rates [variable]
     cls.add_instance_attribute('rates', 'ns3::SupportedRates', is_const=False)
-    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkFrameStart::PlinkFrameStartFields::reasonCode [variable]
-    cls.add_instance_attribute('reasonCode', 'uint16_t', is_const=False)
-    ## peer-link-frame.h (module 'mesh'): ns3::dot11s::PeerLinkFrameStart::PlinkFrameStartFields::subtype [variable]
-    cls.add_instance_attribute('subtype', 'uint8_t', is_const=False)
     return
 
 def register_Ns3Dot11sPeerManagementProtocol_methods(root_module, cls):
@@ -11889,6 +12598,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     register_functions_ns3_dot11s(module.get_submodule('dot11s'), root_module)
     register_functions_ns3_flame(module.get_submodule('flame'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
@@ -11904,6 +12614,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def register_functions_ns3_dot11s(module, root_module):
     ## ie-dot11s-id.h (module 'mesh'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::dot11s::MakeIeMeshIdChecker() [free function]
     module.add_function('MakeIeMeshIdChecker', 
diff -Naur ns-3.23/src/mesh/doc/Makefile ns-3.24/src/mesh/doc/Makefile
--- ns-3.23/src/mesh/doc/Makefile	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.24/src/mesh/doc/Makefile	2015-09-15 11:18:44.000000000 -0700
@@ -0,0 +1,179 @@
+EPSTOPDF = epstopdf
+DIA = dia
+DOT = dot
+CONVERT = convert -density 250
+
+
+SOURCE = source
+FIGURES = $(SOURCE)/figures
+
+# specify dia figures from which .png and .pdf figures need to be built
+
+IMAGES_DIA = \
+
+# specify eps figures from which .png and .pdf figures need to be built
+
+IMAGES_EPS = \
+
+# rescale pdf figures as necessary
+
+IMAGES_NOBUILD = 
+# IMAGES_NOBUILD = $(FIGURES)/fading_pedestrian.png \
+
+IMAGES_BUILD = \
+	${IMAGES_DIA:.dia=.eps} \
+	${IMAGES_DIA:.dia=.png} \
+	${IMAGES_DIA:.dia=.pdf} \
+	${IMAGES_EPS:.eps=.png} \
+	${IMAGES_EPS:.eps=.pdf} 
+
+
+IMAGES = $(IMAGES_NOBUILD) $(IMAGES_BUILD)
+
+RESCALE = ../../../utils/rescale-pdf.sh
+
+%.eps : %.dia; $(DIA) -t eps $< -e $@
+%.png : %.dia; $(DIA) -t png $< -e $@
+%.png : %.eps; $(CONVERT) $< $@
+%.pdf : %.eps
+	$(EPSTOPDF) $< -o=$@
+	if test x$($@_width) != x; then $(RESCALE) $($@_width) $@ ; fi
+
+
+# You can set these variables from the command line.
+SPHINXOPTS    =
+SPHINXBUILD   = sphinx-build
+PAPER         =
+BUILDDIR      = build
+
+# Internal variables.
+PAPEROPT_a4     = -D latex_paper_size=a4
+PAPEROPT_letter = -D latex_paper_size=letter
+ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) $(SOURCE) 
+
+.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest
+
+help:
+	@echo "Please use \`make <target>' where <target> is one of"
+	@echo "  html       to make standalone HTML files"
+	@echo "  dirhtml    to make HTML files named index.html in directories"
+	@echo "  singlehtml to make a single large HTML file"
+	@echo "  pickle     to make pickle files"
+	@echo "  json       to make JSON files"
+	@echo "  htmlhelp   to make HTML files and a HTML help project"
+	@echo "  qthelp     to make HTML files and a qthelp project"
+	@echo "  devhelp    to make HTML files and a Devhelp project"
+	@echo "  epub       to make an epub"
+	@echo "  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
+	@echo "  latexpdf   to make LaTeX files and run them through pdflatex"
+	@echo "  text       to make text files"
+	@echo "  man        to make manual pages"
+	@echo "  changes    to make an overview of all changed/added/deprecated items"
+	@echo "  linkcheck  to check all external links for integrity"
+	@echo "  doctest    to run all doctests embedded in the documentation (if enabled)"
+
+clean:
+	-rm -rf $(BUILDDIR)/*
+	-rm -f $(IMAGES_BUILD)
+
+
+images: $(IMAGES_NOBUILD) $(IMAGES_BUILD)
+
+frag: pickle
+	@if test ! -d $(BUILDDIR)/frag; then mkdir $(BUILDDIR)/frag; fi
+	pushd $(BUILDDIR)/frag && ../../pickle-to-xml.py ../pickle/index.fpickle  > navigation.xml && popd
+	cp -r $(BUILDDIR)/pickle/_images $(BUILDDIR)/frag
+
+html:  $(IMAGES) 
+	$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
+	@echo
+	@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
+
+dirhtml:  $(IMAGES)
+	$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
+	@echo
+	@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
+
+singlehtml:  $(IMAGES)
+	$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
+	@echo
+	@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
+
+pickle:  $(IMAGES)
+	$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
+	@echo
+	@echo "Build finished; now you can process the pickle files."
+
+json:  $(IMAGES)
+	$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
+	@echo
+	@echo "Build finished; now you can process the JSON files."
+
+htmlhelp:  $(IMAGES)
+	$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
+	@echo
+	@echo "Build finished; now you can run HTML Help Workshop with the" \
+	      ".hhp project file in $(BUILDDIR)/htmlhelp."
+
+qthelp:  $(IMAGES)
+	$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
+	@echo
+	@echo "Build finished; now you can run "qcollectiongenerator" with the" \
+	      ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
+	@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/ns-3.qhcp"
+	@echo "To view the help file:"
+	@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/ns-3.qhc"
+
+devhelp:  $(IMAGES)
+	$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
+	@echo
+	@echo "Build finished."
+	@echo "To view the help file:"
+	@echo "# mkdir -p $$HOME/.local/share/devhelp/ns-3"
+	@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/ns-3"
+	@echo "# devhelp"
+
+epub:  $(IMAGES)
+	$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
+	@echo
+	@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
+
+latex:  $(IMAGES)
+	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+	@echo
+	@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
+	@echo "Run \`make' in that directory to run these through (pdf)latex" \
+	      "(use \`make latexpdf' here to do that automatically)."
+
+latexpdf:  $(IMAGES)
+	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+	@echo "Running LaTeX files through pdflatex..."
+	make -C $(BUILDDIR)/latex all-pdf
+	@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
+
+text:  $(IMAGES)
+	$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
+	@echo
+	@echo "Build finished. The text files are in $(BUILDDIR)/text."
+
+man:  $(IMAGES)
+	$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
+	@echo
+	@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
+
+changes:  $(IMAGES)
+	$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
+	@echo
+	@echo "The overview file is in $(BUILDDIR)/changes."
+
+linkcheck:  $(IMAGEs)
+	$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
+	@echo
+	@echo "Link check complete; look for any errors in the above output " \
+	      "or in $(BUILDDIR)/linkcheck/output.txt."
+
+doctest:  $(IMAGES)
+	$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
+	@echo "Testing of doctests in the sources finished, look at the " \
+	      "results in $(BUILDDIR)/doctest/output.txt."
+
diff -Naur ns-3.23/src/mesh/doc/mesh.rst ns-3.24/src/mesh/doc/mesh.rst
--- ns-3.23/src/mesh/doc/mesh.rst	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/doc/mesh.rst	1969-12-31 16:00:00.000000000 -0800
@@ -1,16 +0,0 @@
-.. include:: replace.txt
-
-Mesh NetDevice
---------------
-
-*Placeholder chapter*
-
-The Mesh NetDevice based on 802.11s was added in *ns-3.6*. An overview
-presentation by Kirill Andreev was published at the wns-3 workshop
-in 2009: `<http://www.nsnam.org/wiki/Wns3-2009>`_.
-
-An overview paper is available at:
-`<https://www.nsnam.org/workshops/wns3-2010/dot11s.pdf>`_.
-
-As of ns-3.23 release, the model has been slightly updated to the 802.11s-2012
-standard with regard to packet formats.
diff -Naur ns-3.23/src/mesh/doc/source/conf.py ns-3.24/src/mesh/doc/source/conf.py
--- ns-3.23/src/mesh/doc/source/conf.py	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.24/src/mesh/doc/source/conf.py	2015-09-15 11:18:44.000000000 -0700
@@ -0,0 +1,223 @@
+# -*- coding: utf-8 -*-
+#
+# ns-3 documentation build configuration file, created by
+# sphinx-quickstart on Tue Dec 14 09:00:39 2010.
+#
+# This file is execfile()d with the current directory set to its containing dir.
+#
+# Note that not all possible configuration values are present in this
+# autogenerated file.
+#
+# All configuration values have a default; values that are commented out
+# serve to show the default.
+
+import sys, os
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+#sys.path.insert(0, os.path.abspath('.'))
+
+# -- General configuration -----------------------------------------------------
+
+# If your documentation needs a minimal Sphinx version, state it here.
+#needs_sphinx = '1.0'
+
+# Add any Sphinx extension module names here, as strings. They can be extensions
+# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
+extensions = ['sphinx.ext.pngmath']
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# The suffix of source filenames.
+source_suffix = '.rst'
+
+# The encoding of source files.
+#source_encoding = 'utf-8-sig'
+
+# The master toctree document.
+master_doc = 'mesh'
+
+# General information about the project.
+project = u'ns-3'
+copyright = u'ns-3 project'
+
+# The version info for the project you're documenting, acts as replacement for
+# |version| and |release|, also used in various other places throughout the
+# built documents.
+#
+# The short X.Y version.
+version = 'ns-3-dev'
+# The full version, including alpha/beta/rc tags.
+release = 'ns-3-dev'
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+#language = None
+
+# There are two options for replacing |today|: either, you set today to some
+# non-false value, then it is used:
+#today = ''
+# Else, today_fmt is used as the format for a strftime call.
+#today_fmt = '%B %d, %Y'
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+exclude_patterns = []
+
+# The reST default role (used for this markup: `text`) to use for all documents.
+#default_role = None
+
+# If true, '()' will be appended to :func: etc. cross-reference text.
+#add_function_parentheses = True
+
+# If true, the current module name will be prepended to all description
+# unit titles (such as .. function::).
+#add_module_names = True
+
+# If true, sectionauthor and moduleauthor directives will be shown in the
+# output. They are ignored by default.
+#show_authors = False
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = 'sphinx'
+
+# A list of ignored prefixes for module index sorting.
+#modindex_common_prefix = []
+
+
+# -- Options for HTML output ---------------------------------------------------
+
+# The theme to use for HTML and HTML Help pages.  See the documentation for
+# a list of builtin themes.
+html_theme = 'default'
+
+# Theme options are theme-specific and customize the look and feel of a theme
+# further.  For a list of options available for each theme, see the
+# documentation.
+#html_theme_options = {}
+
+# Add any paths that contain custom themes here, relative to this directory.
+#html_theme_path = []
+
+# The name for this set of Sphinx documents.  If None, it defaults to
+# "<project> v<release> documentation".
+#html_title = None
+
+# A shorter title for the navigation bar.  Default is the same as html_title.
+#html_short_title = None
+
+# The name of an image file (relative to this directory) to place at the top
+# of the sidebar.
+#html_logo = None
+
+# The name of an image file (within the static path) to use as favicon of the
+# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
+# pixels large.
+#html_favicon = None
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+#html_static_path = ['_static']
+
+# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
+# using the given strftime format.
+#html_last_updated_fmt = '%b %d, %Y'
+
+# If true, SmartyPants will be used to convert quotes and dashes to
+# typographically correct entities.
+#html_use_smartypants = True
+
+# Custom sidebar templates, maps document names to template names.
+#html_sidebars = {}
+
+# Additional templates that should be rendered to pages, maps page names to
+# template names.
+#html_additional_pages = {}
+
+# If false, no module index is generated.
+#html_domain_indices = True
+
+# If false, no index is generated.
+#html_use_index = True
+
+# If true, the index is split into individual pages for each letter.
+#html_split_index = False
+
+# If true, links to the reST sources are added to the pages.
+#html_show_sourcelink = True
+
+# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
+#html_show_sphinx = True
+
+# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
+#html_show_copyright = True
+
+# If true, an OpenSearch description file will be output, and all pages will
+# contain a <link> tag referring to it.  The value of this option must be the
+# base URL from which the finished HTML is served.
+#html_use_opensearch = ''
+
+# This is the file name suffix for HTML files (e.g. ".xhtml").
+#html_file_suffix = None
+
+# Output file base name for HTML help builder.
+#htmlhelp_basename = 'ns-3doc'
+
+
+# -- Options for LaTeX output --------------------------------------------------
+
+# The paper size ('letter' or 'a4').
+#latex_paper_size = 'letter'
+
+# The font size ('10pt', '11pt' or '12pt').
+#latex_font_size = '10pt'
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title, author, documentclass [howto/manual]).
+latex_documents = [
+#  ('mesh-testing', 'mesh-doc-testing.tex', u'Mesh Wi-Fi Testing Documentation', u'ns-3 project', 'manual'),
+#  ('mesh-design', 'mesh-doc-design.tex', u'Mesh Wi-Fi Design Documentation', u'ns-3 project', 'manual'),
+#  ('mesh-user', 'mesh-doc-user.tex', u'Mesh Wi-Fi User Documentation', u'ns-3 project', 'manual'),
+  ('mesh', 'mesh-module-doc.tex', u'The ns-3 Mesh Wi-Fi Module Documentation', u'ns-3 project', 'manual'),
+]
+
+# The name of an image file (relative to this directory) to place at the top of
+# the title page.
+#latex_logo = None
+
+# For "manual" documents, if this is true, then toplevel headings are parts,
+# not chapters.
+#latex_use_parts = False
+
+# If true, show page references after internal links.
+#latex_show_pagerefs = False
+
+# If true, show URL addresses after external links.
+#latex_show_urls = False
+
+# Additional stuff for the LaTeX preamble.
+#latex_preamble = ''
+
+# Documents to append as an appendix to all manuals.
+#latex_appendices = []
+
+# If false, no module index is generated.
+#latex_domain_indices = True
+
+
+
+# add page breaks in the pdf. Level 1 is for top-level sections, level 2 for subsections, and so on.
+pdf_break_level = 4 
+
+
+# -- Options for manual page output --------------------------------------------
+
+# One entry per manual page. List of tuples
+# (source start file, name, description, authors, manual section).
+man_pages = [
+    ('index', 'ns-3-model-library', u'ns-3 Model Library',
+     [u'ns-3 project'], 1)
+]
diff -Naur ns-3.23/src/mesh/doc/source/mesh-design.rst ns-3.24/src/mesh/doc/source/mesh-design.rst
--- ns-3.23/src/mesh/doc/source/mesh-design.rst	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.24/src/mesh/doc/source/mesh-design.rst	2015-09-15 11:18:44.000000000 -0700
@@ -0,0 +1,171 @@
+.. include:: replace.txt
+
+.. heading hierarchy:
+   ------------- Document Title
+   ************* Chapter (#)
+   ============= Section (#.#)
+   ############# Subsection (#.#.#)
+   ~~~~~~~~~~~~~ Paragraph (no number)
+
+Design Documentation
+********************
+
+Overview
+========
+
+The |ns3| `mesh` module extends the |ns3| `wifi` module to provide mesh
+networking capabilities according to the IEEE 802.11s standard [ieee80211s]_.
+
+The basic purpose of IEEE 802.11s is to define a mode of operation for 
+Wi-Fi that permits frames to be forwarded over multiple radio hops 
+transparent to higher layer protocols such as IP.  To accomplish this,
+mesh-capable stations form a `Mesh Basic Service Set` (MBSS) by running
+a pair-wise peering protocol to establish forwarding associations, and
+by running a routing protocol to find paths through the network.  A
+special gateway device called a `mesh gate` allows a MBSS to interconnect
+with a Distribution System (DS).
+
+The basic enhancements defined by IEEE 802.11s include:
+
+* discovery services
+* peering management
+* security 
+* beaconing and synchronization
+* the Mesh Coordination Function (MCF)
+* power management
+* channel switching
+* extended frame formats
+* path selection and forwarding
+* interworking (proxy mesh gateways)
+* intra-mesh congestion control, and
+* emergency service support.
+
+The |ns3| models implement only a subset of the above service extensions,
+focusing mainly on those items related to peering and routing/forwarding
+of data frames through the mesh.
+
+The Mesh NetDevice based on 802.11s D3.0 draft standard
+was added in *ns-3.6* and includes the Mesh Peering Management Protocol and
+HWMP (routing) protocol implementations. An overview
+presentation by Kirill Andreev was published at the Workshop on ns-3
+in 2009 [And09]_.  An overview paper is available at [And10]_.
+
+As of ns-3.23 release, the model has been updated to the 802.11s-2012
+standard [ieee80211s]_ with regard to packet formats, based on the 
+contribution in [Hep15]_.
+
+These changes include:
+
+* Category codes and the categories compliant to IEEE-802.11-2012 Table 8-38â€”Category values.  
+* Information Elements (An adjustment of the element ID values was needed according to Table 8-54 of IEEE-802.11-2012).
+* Mesh Peering Management element format changed according to IEEE-802.11-2012 Figure 8-370.
+* Mesh Configuration element format changed according to IEEE-802.11-2012 Figure 8-363.
+* PERR element format changed according to IEEE-802.11-2012 Figure 8-394.
+
+With these changes the messages of the Peering Management Protocol and Hybrid Wireless Mesh Protocol will be transmitted compliant to IEEE802.11-2012 and the resulting pcap trace files can be analyzed by Wireshark.
+
+The multi-interface mesh points are supported as an extension of IEEE draft version 3.0. Note that corresponding |ns3| mesh device helper creates a single interface station by default.
+
+Overview of IEEE 802.11s
+########################
+
+The implementation of the 802.11s extension consists of two main parts: the Peer Management Protocol (PMP) and Hybrid Wireless Mesh Protocol (HWMP).
+
+The tasks of the peer management protocol are the following:
+
+* opening links, detecting beacons, and starting peer link finite state machine, and
+* closing peer links due to transmission failures or beacon loss.
+
+If a peer link between the sender and receiver does not exist, a frame will be 
+dropped. So, the plug-in to the peer management protocol (PMP) is the first 
+in the list ofÂ ``ns3::MeshWifiInterfaceMacPlugins`` to be used.
+
+Peer management protocol
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+The peer management protocol consists of three main parts:
+
+* the protocol itself,Â ``ns3::dot11s::PeerManagementProtocol``, which keeps all active peer links on interfaces, handles all changes of their states and notifies the routing protocol about link failures.
+* the MAC plug-in,Â ``ns3::dot11s::PeerManagementProtocolMac``,Â which drops frames if there is no peer link, and peeks all needed information from management frames and information elements from beacons.
+* the peer link,Â ``ns3::dot11s::PeerLink``,Â which keeps finite state machine of each peer link, keeps beacon loss counter and counter of successive transmission failures.
+
+The procedure of closing a peer link is not described in detail in the 
+standard, so in the model the link may be closed by: 
+
+* beacon loss (see an appropriate attribute ofÂ ns3::dot11s::PeerLinkÂ class)
+* transmission failure â€“ when a predefined number of successive packets have failed to transmit, the link will be closed.
+
+The peer management protocol is also responsible for beacon collision avoidance, because it keeps beacon timing elements from all neighbours. Note that the PeerManagementProtocol is not attached to the MeshPointDevice as a routing protocol, but the structure is similar: the upper tier of the protocolÂ is 
+``ns3::dot11s::PeerManagementProtocol``Â and its plug-in isÂ 
+``ns3::dot11s::PeerManagementProtocolMac``.
+
+Hybrid Wireless Mesh Protocol
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+HWMP is implemented in both modes, reactive and proactive, although path maintenance is not implemented (so active routes may time out and need to be rebuilt, causing packet loss). Also the model implements an ability to transmit broadcast data and management frames as unicasts (see appropriate attributes). This feature is disabled at a station when the number of neighbors of the station is more than a threshold value.
+
+Scope and Limitations
+=====================
+
+Supported features
+##################
+
+* Peering Management Protocol (PMP), including link close heuristics and beacon collision avoidance.
+* Hybrid Wireless Mesh Protocol (HWMP), including proactive and reactive modes, unicast/broadcast propagation of management traffic, multi-radio extensions.
+* 802.11e compatible airtime link metric.
+
+Verification
+############
+
+* Comes with the custom Wireshark dissector.
+* Linux kernel mac80211 layer compatible message formats.
+
+Unsupported features
+####################
+
+* Mesh Coordinated Channel Access (MCCA).
+* Internetworking: mesh access point and mesh portal.
+* Security.
+* Power save.
+* Path maintenance (sending PREQ proactively before a path expires)
+* Though multi-radio operation is supported, no channel assignment protocol is proposed for now. (Correct channel switching is not implemented)
+
+Models yet to be created
+########################
+
+* Mesh access point (QoS + non-QoS?)
+* Mesh portal (QoS + non-QoS?)
+
+Open issues
+###########
+
+Data packets are not shown correctly in Wireshark
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+802.11 packets (e.g. using UDP, ARP) which are generated in the simulator ns-3 are not recognized correctly in Wireshark. They are erroneously detected as LLC packets by using the mesh module.
+The reason is that the IEEE 802.11 frame is of type Data frame/Subtype 0 (not QoS). However at the end of the header are some additional bytes (referring to QoS) which should not be there and therefore the frame can't be detected with Wireshark.
+
+Lack of modelled processing delays can cause repeated packet losses
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Bug 1605 describes scenarios for which no data packets can be delivered through
+the network due to synchronized losses.  The model is highly sensitive to
+the fact that node packet processing time is not modelled.  The following
+is adapted from the bug report.
+
+The symptoms are the following:
+
+1. Successful transmission is possible only between two nodes, or
+2. successful transmission is possible only in a chain topology
+
+The explanation is the following:
+
+1. Some node sends a packet (this may be broadcast ARP request, or broadcast HWMP PREQ or something else)
+2. Several nodes receive this packet
+3. The received packet goes immediately through the node and comes to outgoing wifi-queue (EDCA-TXOP)
+4. all received packets are forwarded immediately (due to wifi-backoff procedure, and backoff is not calculated in this case, because there was no previous concurrency in the network)
+5. Packets collide
+6. NO management data can pass through the network
+
+Adding random jitter to all packets that go from the mesh interface mac to 
+EdcaTxopN can remedy this problem.
diff -Naur ns-3.23/src/mesh/doc/source/mesh-references.rst ns-3.24/src/mesh/doc/source/mesh-references.rst
--- ns-3.23/src/mesh/doc/source/mesh-references.rst	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.24/src/mesh/doc/source/mesh-references.rst	2015-09-15 11:18:44.000000000 -0700
@@ -0,0 +1,21 @@
+.. include:: replace.txt
+
+.. only:: html
+
+.. heading hierarchy:
+   ------------- Document Title
+   ************* Chapter (#)
+   ============= Section (#.#)
+   ############# Subsection (#.#.#)
+   ~~~~~~~~~~~~~ Paragraph (no number)
+
+References
+**********
+
+.. [And09] \K. Andreev, `Realization of IEEE802.11s draft standard in NS-3 <http://www.nsnam.org/wiki/Wns3-2009>`_.
+
+.. [And10] \K. Andreev and \P. Boyko, `IEEE 802.11s Mesh Networking NS-3 Model <http://www.nsnam.org/workshops/wns3-2010/dot11s.pdf>`_.
+
+.. [Hep15] \C. Hepner and \A. Witt and \R. Muenzner, `Validation of the ns-3 802.11s model and proposed changes compliant to IEEE 802.11-2012 <https://www.nsnam.org/wp-content/uploads/2015/05/WNS3_2015_submission_33.pdf>`_, Poster at 2015 Workshop on ns-3, May 2015.
+
+.. [ieee80211s] IEEE Standard for Information Technology, Telecommunications and information exchange between systems, Local and metropolitan area networks, Specific requirements,  Part 11: Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) specifications, Amendment 10: Mesh Networking, 10 September 2011.
diff -Naur ns-3.23/src/mesh/doc/source/mesh.rst ns-3.24/src/mesh/doc/source/mesh.rst
--- ns-3.23/src/mesh/doc/source/mesh.rst	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.24/src/mesh/doc/source/mesh.rst	2015-09-15 11:18:44.000000000 -0700
@@ -0,0 +1,9 @@
+Wi-Fi Mesh Module Documentation
+-------------------------------
+
+.. toctree::
+
+    mesh-design
+    mesh-user
+    mesh-testing
+    mesh-references
diff -Naur ns-3.23/src/mesh/doc/source/mesh-testing.rst ns-3.24/src/mesh/doc/source/mesh-testing.rst
--- ns-3.23/src/mesh/doc/source/mesh-testing.rst	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.24/src/mesh/doc/source/mesh-testing.rst	2015-09-15 11:18:44.000000000 -0700
@@ -0,0 +1,13 @@
+.. include:: replace.txt
+.. highlight:: bash
+
+.. heading hierarchy:
+   ------------- Document Title
+   ************* Chapter (#)
+   ============= Section (#.#)
+   ############# Subsection (#.#.#)
+   ~~~~~~~~~~~~~ Paragraph (no number)
+
+Testing Documentation
+*********************
+
diff -Naur ns-3.23/src/mesh/doc/source/mesh-user.rst ns-3.24/src/mesh/doc/source/mesh-user.rst
--- ns-3.23/src/mesh/doc/source/mesh-user.rst	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.24/src/mesh/doc/source/mesh-user.rst	2015-09-15 11:18:44.000000000 -0700
@@ -0,0 +1,17 @@
+.. include:: replace.txt
+.. highlight:: cpp
+
+.. heading hierarchy:
+   ------------- Document Title
+   ************* Chapter (#)
+   ============= Section (#.#)
+   ############# Subsection (#.#.#)
+   ~~~~~~~~~~~~~ Paragraph (no number)
+
+
+User Documentation
+******************
+
+Using the MeshNetDevice
+=======================
+
diff -Naur ns-3.23/src/mesh/doc/source/replace.txt ns-3.24/src/mesh/doc/source/replace.txt
--- ns-3.23/src/mesh/doc/source/replace.txt	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.24/src/mesh/doc/source/replace.txt	2015-09-15 11:18:44.000000000 -0700
@@ -0,0 +1,3 @@
+.. |ns3| replace:: *ns-3*
+
+.. |ns2| replace:: *ns-2*
diff -Naur ns-3.23/src/mesh/examples/wscript ns-3.24/src/mesh/examples/wscript
--- ns-3.23/src/mesh/examples/wscript	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/examples/wscript	2015-09-15 11:18:44.000000000 -0700
@@ -1,5 +1,5 @@
 ## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
 
 def build(bld):
-    obj = bld.create_ns3_program('mesh', ['internet', 'mobility', 'wifi', 'mesh'])
+    obj = bld.create_ns3_program('mesh', ['internet', 'mobility', 'wifi', 'mesh', 'applications'])
     obj.source = 'mesh.cc'
diff -Naur ns-3.23/src/mesh/helper/dot11s/dot11s-installer.cc ns-3.24/src/mesh/helper/dot11s/dot11s-installer.cc
--- ns-3.23/src/mesh/helper/dot11s/dot11s-installer.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/helper/dot11s/dot11s-installer.cc	2015-09-15 11:18:44.000000000 -0700
@@ -31,7 +31,8 @@
 Dot11sStack::GetTypeId ()
 {
   static TypeId tid = TypeId ("ns3::Dot11sStack")
-    .SetParent<Object> ()
+    .SetParent<MeshStack> ()
+    .SetGroupName ("Mesh")
     .AddConstructor<Dot11sStack> ()
     .AddAttribute ("Root", 
                    "The MAC address of root mesh point.",
diff -Naur ns-3.23/src/mesh/helper/flame/flame-installer.cc ns-3.24/src/mesh/helper/flame/flame-installer.cc
--- ns-3.23/src/mesh/helper/flame/flame-installer.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/helper/flame/flame-installer.cc	2015-09-15 11:18:44.000000000 -0700
@@ -32,7 +32,8 @@
 FlameStack::GetTypeId ()
 {
   static TypeId tid = TypeId ("ns3::FlameStack")
-    .SetParent<Object> ()
+    .SetParent<MeshStack> ()
+    .SetGroupName ("Mesh")
     .AddConstructor<FlameStack> ();
   return tid;
 }
diff -Naur ns-3.23/src/mesh/helper/mesh-stack-installer.cc ns-3.24/src/mesh/helper/mesh-stack-installer.cc
--- ns-3.23/src/mesh/helper/mesh-stack-installer.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.24/src/mesh/helper/mesh-stack-installer.cc	2015-09-15 11:18:44.000000000 -0700
@@ -0,0 +1,38 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015, Lawrence Livermore National Laboratory
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
+ */
+
+#include "ns3/mesh-stack-installer.h"
+
+namespace ns3
+{
+NS_OBJECT_ENSURE_REGISTERED (MeshStack);
+  
+TypeId
+MeshStack::GetTypeId ()
+{
+  static TypeId tid = TypeId ("ns3::MeshStack")
+    .SetParent<Object> ()
+    .SetGroupName ("Mesh")
+    // No AddConstructor because this is an abstract class.
+    ;
+  return tid;
+}
+
+} // namespace ns3
diff -Naur ns-3.23/src/mesh/helper/mesh-stack-installer.h ns-3.24/src/mesh/helper/mesh-stack-installer.h
--- ns-3.23/src/mesh/helper/mesh-stack-installer.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/helper/mesh-stack-installer.h	2015-09-15 11:18:44.000000000 -0700
@@ -35,6 +35,10 @@
 class MeshStack : public Object
 {
 public:
+  /// \brief Register this type.
+  /// \return The TypeId.
+  static TypeId GetTypeId (void);
+  
   ///\brief Installs mesh stack. needed by helper only
   virtual bool InstallStack (Ptr<MeshPointDevice> mp) = 0;
   /// Report statistics of a given mesh point
diff -Naur ns-3.23/src/mesh/model/dot11s/dot11s-mac-header.cc ns-3.24/src/mesh/model/dot11s/dot11s-mac-header.cc
--- ns-3.23/src/mesh/model/dot11s/dot11s-mac-header.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/model/dot11s/dot11s-mac-header.cc	2015-09-15 11:18:44.000000000 -0700
@@ -164,9 +164,9 @@
 void
 MeshHeader::Print (std::ostream &os) const
 {
-  os << "flags = " << (uint16_t) m_meshFlags << std::endl << "ttl = " << (uint16_t) m_meshTtl 
-     << std::endl << "seqno = " << m_meshSeqno << std::endl<< "addr4 = " << m_addr4 << std::endl
-     << "addr5 = " << m_addr5 << std::endl << "addr6 = " << m_addr6 << std::endl;
+  os << "flags=" << (uint16_t) m_meshFlags << ", ttl=" << (uint16_t) m_meshTtl 
+     << ", seqno=" << m_meshSeqno << ", addr4=" << m_addr4 
+     << ", addr5=" << m_addr5 << ", addr6=" << m_addr6;
 }
 bool
 operator== (const MeshHeader & a, const MeshHeader & b)
diff -Naur ns-3.23/src/mesh/model/dot11s/hwmp-protocol.h ns-3.24/src/mesh/model/dot11s/hwmp-protocol.h
--- ns-3.23/src/mesh/model/dot11s/hwmp-protocol.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/model/dot11s/hwmp-protocol.h	2015-09-15 11:18:44.000000000 -0700
@@ -132,9 +132,13 @@
 
   ///\name Interaction with HWMP MAC plugin
   //\{
+  ///\brief Handler for receiving Path Request
   void ReceivePreq (IePreq preq, Mac48Address from, uint32_t interface, Mac48Address fromMp, uint32_t metric);
+  ///\brief Handler for receiving Path Reply
   void ReceivePrep (IePrep prep, Mac48Address from, uint32_t interface, Mac48Address fromMp, uint32_t metric);
+  ///\brief Handler for receiving Path Error
   void ReceivePerr (std::vector<FailedDestination>, Mac48Address from, uint32_t interface, Mac48Address fromMp);
+   ///\brief Send Path Reply
   void SendPrep (
     Mac48Address src,
     Mac48Address dst,
@@ -263,7 +267,7 @@
   std::vector<QueuedPacket> m_rqueue;
   
   /// \name HWMP-protocol parameters
-  /// These are all Aattributes
+  /// These are all Attributes
   /// \{
   uint16_t m_maxQueueSize;
   uint8_t m_dot11MeshHWMPmaxPREQretries;
diff -Naur ns-3.23/src/mesh/model/dot11s/hwmp-protocol-mac.cc ns-3.24/src/mesh/model/dot11s/hwmp-protocol-mac.cc
--- ns-3.23/src/mesh/model/dot11s/hwmp-protocol-mac.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/model/dot11s/hwmp-protocol-mac.cc	2015-09-15 11:18:44.000000000 -0700
@@ -203,6 +203,7 @@
   meshHdr.SetMeshTtl (tag.GetTtl ());
   packet->AddHeader (meshHdr);
   header.SetAddr1 (tag.GetAddress ());
+  header.SetQosMeshControlPresent ();
   return true;
 }
 WifiActionHeader
diff -Naur ns-3.23/src/mesh/model/dot11s/hwmp-tag.cc ns-3.24/src/mesh/model/dot11s/hwmp-tag.cc
--- ns-3.23/src/mesh/model/dot11s/hwmp-tag.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/model/dot11s/hwmp-tag.cc	2015-09-15 11:18:44.000000000 -0700
@@ -86,7 +86,11 @@
 TypeId
 HwmpTag::GetTypeId ()
 {
-  static TypeId tid = TypeId ("ns3::dot11s::HwmpTag").SetParent<Tag> ().AddConstructor<HwmpTag> ().SetGroupName ("Mesh");
+  static TypeId tid = TypeId ("ns3::dot11s::HwmpTag")
+    .SetParent<Tag> ()
+    .SetGroupName ("Mesh")
+    .AddConstructor<HwmpTag> ()
+    ;
   return tid;
 }
 
diff -Naur ns-3.23/src/mesh/model/dot11s/ie-dot11s-beacon-timing.cc ns-3.24/src/mesh/model/dot11s/ie-dot11s-beacon-timing.cc
--- ns-3.23/src/mesh/model/dot11s/ie-dot11s-beacon-timing.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/model/dot11s/ie-dot11s-beacon-timing.cc	2015-09-15 11:18:44.000000000 -0700
@@ -130,14 +130,13 @@
 void
 IeBeaconTiming::Print (std::ostream& os) const
 {
-  os << std::endl << "<information_element id=" << ElementId () << ">" << std::endl;
-  os << "Number of units: " << (uint16_t) m_numOfUnits << std::endl;
+  os << "BeaconTiming=(Number of units=" << (uint16_t) m_numOfUnits;
   for (NeighboursTimingUnitsList::const_iterator j = m_neighbours.begin (); j != m_neighbours.end (); j++)
     {
-      os << "AID=" << (uint16_t)(*j)->GetAid () << ", Last beacon was at " << (*j)->GetLastBeacon ()
-         << ", with beacon interval " << (*j)->GetBeaconInterval () << std::endl;
+      os << "(AID=" << (uint16_t)(*j)->GetAid () << ", Last beacon at=" << (*j)->GetLastBeacon ()
+         << ", with beacon interval=" << (*j)->GetBeaconInterval () << ")";
     }
-  os << "</information_element>" << std::endl;
+  os << ")";
 }
 void
 IeBeaconTiming::SerializeInformationField (Buffer::Iterator i) const
diff -Naur ns-3.23/src/mesh/model/dot11s/ie-dot11s-configuration.cc ns-3.24/src/mesh/model/dot11s/ie-dot11s-configuration.cc
--- ns-3.23/src/mesh/model/dot11s/ie-dot11s-configuration.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/model/dot11s/ie-dot11s-configuration.cc	2015-09-15 11:18:44.000000000 -0700
@@ -151,15 +151,14 @@
 void
 IeConfiguration::Print (std::ostream& os) const
 {
-  os << std::endl << "<information_element id=" << ElementId () << ">" << std::endl;
-  os << "Number of neighbors:               = " << (uint16_t) m_neighbors
-     << std::endl << "Active Path Selection Protocol ID: = " << (uint32_t) m_APSPId
-     << std::endl << "Active Path Selection Metric ID:   = " << (uint32_t) m_APSMId
-     << std::endl << "Congestion Control Mode ID:        = " << (uint32_t) m_CCMId
-     << std::endl << "Synchronize protocol ID:           = " << (uint32_t) m_SPId
-     << std::endl << "Authentication protocol ID:        = " << (uint32_t) m_APId
-     << std::endl << "Capabilities:                      = " << m_meshCap.GetUint8 () << std::endl;
-  os << "</information_element>" << std::endl;
+  os << "MeshConfiguration=(neighbors=" << (uint16_t) m_neighbors
+     << ", Active Path Selection Protocol ID=" << (uint32_t) m_APSPId
+     << ", Active Path Selection Metric ID=" << (uint32_t) m_APSMId
+     << ", Congestion Control Mode ID=" << (uint32_t) m_CCMId
+     << ", Synchronize protocol ID=" << (uint32_t) m_SPId
+     << ", Authentication protocol ID=" << (uint32_t) m_APId
+     << ", Capabilities=" << m_meshCap.GetUint8 ();
+  os << ")";
 }
 void
 IeConfiguration::SetRouting (dot11sPathSelectionProtocol routingId)
diff -Naur ns-3.23/src/mesh/model/dot11s/ie-dot11s-id.cc ns-3.24/src/mesh/model/dot11s/ie-dot11s-id.cc
--- ns-3.23/src/mesh/model/dot11s/ie-dot11s-id.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/model/dot11s/ie-dot11s-id.cc	2015-09-15 11:18:44.000000000 -0700
@@ -115,9 +115,7 @@
 void
 IeMeshId::Print (std::ostream& os) const
 {
-  os << std::endl << "<information_element id=" << ElementId () << ">" << std::endl;
-  os << "meshId =  " << PeekString ();
-  os << "</information_element>" << std::endl;
+  os << "MeshId=(meshId=" << PeekString () << ")";
 }
 bool
 operator== (const IeMeshId & a, const IeMeshId & b)
diff -Naur ns-3.23/src/mesh/model/dot11s/ie-dot11s-metric-report.cc ns-3.24/src/mesh/model/dot11s/ie-dot11s-metric-report.cc
--- ns-3.23/src/mesh/model/dot11s/ie-dot11s-metric-report.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/model/dot11s/ie-dot11s-metric-report.cc	2015-09-15 11:18:44.000000000 -0700
@@ -66,9 +66,7 @@
 void
 IeLinkMetricReport::Print (std::ostream& os) const
 {
-  os << std::endl << "<information_element id=" << ElementId () << ">" << std::endl;
-  os << "Metric = " << m_metric;
-  os << "</information_element>" << std::endl;
+  os << "Metric=" << m_metric;
 }
 bool
 operator== (const IeLinkMetricReport & a, const IeLinkMetricReport & b)
diff -Naur ns-3.23/src/mesh/model/dot11s/ie-dot11s-peering-protocol.cc ns-3.24/src/mesh/model/dot11s/ie-dot11s-peering-protocol.cc
--- ns-3.23/src/mesh/model/dot11s/ie-dot11s-peering-protocol.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/model/dot11s/ie-dot11s-peering-protocol.cc	2015-09-15 11:18:44.000000000 -0700
@@ -50,9 +50,7 @@
 void
 IePeeringProtocol::Print (std::ostream& os) const
 {
-  os << std::endl << "<information_element id=" << ElementId () << ">" << std::endl;
-  os << "peering protocol = " << m_protocol;
-  os << "</information_element>" << std::endl;
+  os << "PeeringProtocol=(peering protocol=" << m_protocol << ")";
 }
 std::ostream &
 operator << (std::ostream &os, const IePeeringProtocol &a)
diff -Naur ns-3.23/src/mesh/model/dot11s/ie-dot11s-peer-management.cc ns-3.24/src/mesh/model/dot11s/ie-dot11s-peer-management.cc
--- ns-3.23/src/mesh/model/dot11s/ie-dot11s-peer-management.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/model/dot11s/ie-dot11s-peer-management.cc	2015-09-15 11:18:44.000000000 -0700
@@ -151,13 +151,12 @@
 void
 IePeerManagement::Print (std::ostream& os) const
 {
-  os << std::endl << "<information_element id=" << ElementId () << ">" << std::endl;
-  os << " Subtype:      = " << (uint16_t) m_subtype << std::endl;
-  os << " Length:       = " << (uint16_t) m_length << std::endl;
-  os << " LocalLinkId:  = " << m_localLinkId << std::endl;
-  os << " PeerLinkId:   = " << m_peerLinkId << std::endl;
-  os << " ReasonCode:   = " << m_reasonCode << std::endl;
-  os << "</information_element>" << std::endl;
+  os << "PeerMgmt=(Subtype=" << (uint16_t) m_subtype
+     << ", Length=" << (uint16_t) m_length
+     << ", LocalLinkId=" << m_localLinkId
+     << ", PeerLinkId=" << m_peerLinkId
+     << ", ReasonCode=" << m_reasonCode
+     << ")";
 }
 bool
 operator== (const IePeerManagement & a, const IePeerManagement & b)
diff -Naur ns-3.23/src/mesh/model/dot11s/ie-dot11s-perr.cc ns-3.24/src/mesh/model/dot11s/ie-dot11s-perr.cc
--- ns-3.23/src/mesh/model/dot11s/ie-dot11s-perr.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/model/dot11s/ie-dot11s-perr.cc	2015-09-15 11:18:44.000000000 -0700
@@ -37,14 +37,13 @@
 void
 IePerr::Print (std::ostream &os) const
 {
-  os << std::endl << "<information_element id=" << ElementId () << ">" << std::endl;
-  os << "Number of failed destinations: = " << m_addressUnits.size ();
+  os << "PERR=(Number of failed destinations=" << m_addressUnits.size ();
   for (unsigned int j = 0; j < m_addressUnits.size (); j++)
     {
-      os << "Failed destination address: = " << m_addressUnits[j].destination << ", sequence number = "
-         << m_addressUnits[j].seqnum;
+      os << "(Failed destination address=" << m_addressUnits[j].destination << ", sequence number = "
+         << m_addressUnits[j].seqnum << ")";
     }
-  os << std::endl << "</information_element>" << std::endl;
+  os << ")";
 }
 uint8_t
 IePerr::GetNumOfDest () const
diff -Naur ns-3.23/src/mesh/model/dot11s/ie-dot11s-prep.cc ns-3.24/src/mesh/model/dot11s/ie-dot11s-prep.cc
--- ns-3.23/src/mesh/model/dot11s/ie-dot11s-prep.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/model/dot11s/ie-dot11s-prep.cc	2015-09-15 11:18:44.000000000 -0700
@@ -189,12 +189,10 @@
 void
 IePrep::Print (std::ostream& os) const
 {
-  os << std::endl << "<information_element id=" << ElementId () << ">" << std::endl;
-  os << "Flags:        = " << m_flags << std::endl << "Hopcount:     = " << m_hopcount << std::endl << "TTL:          = " << m_ttl
-     << std::endl<< "Destination:  = " << m_destinationAddress << std::endl << "Dest. seqnum: = " << m_destSeqNumber
-     << std::endl << "Lifetime:     = " << m_lifetime << std::endl<< "Metric:       = " << m_metric << std::endl << "Originator:   = "
-     << m_originatorAddress << std::endl << "Orig. seqnum: = " << m_originatorSeqNumber << std::endl;
-  os << "</information_element>" << std::endl;
+  os << "PREP=(Flags=" << m_flags << ", Hopcount=" << m_hopcount << ", TTL=" << m_ttl
+     << ",Destination=" << m_destinationAddress << ", Dest. seqnum=" << m_destSeqNumber
+     << ", Lifetime=" << m_lifetime << ", Metric=" << m_metric << ", Originator="
+     << m_originatorAddress << ", Orig. seqnum=" << m_originatorSeqNumber << ")";
 }
 bool
 operator== (const IePrep & a, const IePrep & b)
diff -Naur ns-3.23/src/mesh/model/dot11s/ie-dot11s-preq.cc ns-3.24/src/mesh/model/dot11s/ie-dot11s-preq.cc
--- ns-3.23/src/mesh/model/dot11s/ie-dot11s-preq.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/model/dot11s/ie-dot11s-preq.cc	2015-09-15 11:18:44.000000000 -0700
@@ -316,20 +316,19 @@
 void
 IePreq::Print (std::ostream &os) const
 {
-  os << std::endl << "<information_element id=" << ElementId () << ">" << std::endl;
-  os << " originator address  = " << m_originatorAddress << std::endl;
-  os << " TTL                 = " << (uint16_t) m_ttl << std::endl;
-  os << " hop count           = " << (uint16_t) m_hopCount << std::endl;
-  os << " metric              = " << m_metric << std::endl;
-  os << " seqno               = " << m_originatorSeqNumber << std::endl;
-  os << " lifetime            = " << m_lifetime << std::endl;
-  os << " preq ID             = " << m_preqId << std::endl;
-  os << " Destinations are:" << std::endl;
+  os << "PREQ=(originator address=" << m_originatorAddress
+     << ", TTL=" << (uint16_t) m_ttl
+     << ", hop count=" << (uint16_t) m_hopCount
+     << ", metric=" << m_metric
+     << ", seqno=" << m_originatorSeqNumber
+     << ", lifetime=" << m_lifetime
+     << ", preq ID=" << m_preqId
+     << ", Destinations=(";
   for (int j = 0; j < m_destCount; j++)
     {
-      os << "    " << m_destinations[j]->GetDestinationAddress () << std::endl;
+      os << m_destinations[j]->GetDestinationAddress ();
     }
-  os << "</information_element>" << std::endl;
+  os << ")";
 }
 std::vector<Ptr<DestinationAddressUnit> >
 IePreq::GetDestinationList ()
diff -Naur ns-3.23/src/mesh/model/dot11s/ie-dot11s-rann.cc ns-3.24/src/mesh/model/dot11s/ie-dot11s-rann.cc
--- ns-3.23/src/mesh/model/dot11s/ie-dot11s-rann.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/model/dot11s/ie-dot11s-rann.cc	2015-09-15 11:18:44.000000000 -0700
@@ -151,14 +151,13 @@
 void
 IeRann::Print (std::ostream &os) const
 {
-  os << std::endl << "<information_element id=" << ElementId () << ">" << std::endl;
-  os << "  flags              = " << (int) m_flags << std::endl;
-  os << "  hop count          = " << (int) m_hopcount << std::endl;
-  os << "  TTL                = " << (int) m_ttl << std::endl;
-  os << "  originator address = " << m_originatorAddress << std::endl;
-  os << "  dst seq. number    = " << m_destSeqNumber << std::endl;
-  os << "  metric             = " << m_metric << std::endl;
-  os << "</information_element>" << std::endl;
+  os << "RANN=(flags=" << (int) m_flags
+     << ", hop count=" << (int) m_hopcount
+     << ", TTL=" << (int) m_ttl
+     << ", originator address=" << m_originatorAddress
+     << ", dst seq. number=" << m_destSeqNumber
+     << ", metric=" << m_metric
+     << ")";
 }
 
 bool
diff -Naur ns-3.23/src/mesh/model/dot11s/peer-link-frame.cc ns-3.24/src/mesh/model/dot11s/peer-link-frame.cc
--- ns-3.23/src/mesh/model/dot11s/peer-link-frame.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/model/dot11s/peer-link-frame.cc	2015-09-15 11:18:44.000000000 -0700
@@ -26,204 +26,281 @@
 
 namespace ns3 {
 namespace dot11s {
-NS_OBJECT_ENSURE_REGISTERED (PeerLinkFrameStart);
+NS_OBJECT_ENSURE_REGISTERED (PeerLinkOpenStart);
 
-PeerLinkFrameStart::PeerLinkFrameStart () :
-  m_subtype (255), m_capability (0), m_aid (0), m_rates (SupportedRates ()), m_meshId (),
+PeerLinkOpenStart::PeerLinkOpenStart () :
+  m_capability (0), m_rates (SupportedRates ()), m_meshId (),
   m_config (IeConfiguration ())
 {
 }
 void
-PeerLinkFrameStart::SetPlinkFrameSubtype (uint8_t subtype)
+PeerLinkOpenStart::SetPlinkOpenStart (PeerLinkOpenStart::PlinkOpenStartFields fields)
 {
-  m_subtype = subtype;
+  m_capability = fields.capability;
+  m_rates = fields.rates;
+  m_meshId = fields.meshId;
+  m_config = fields.config;
+}
+PeerLinkOpenStart::PlinkOpenStartFields
+PeerLinkOpenStart::GetFields () const
+{
+  PlinkOpenStartFields retval;
+  /// \todo protocol version:
+  retval.capability = m_capability;
+  retval.rates = m_rates;
+  retval.meshId = m_meshId;
+  retval.config = m_config;
+  
+  return retval;
+}
+TypeId
+PeerLinkOpenStart::GetTypeId ()
+{
+  static TypeId tid = TypeId ("ns3::dot11s::PeerLinkOpenStart")
+    .SetParent<Header> ()
+    .SetGroupName ("Mesh")
+    .AddConstructor<PeerLinkOpenStart> ()
+  ;
+  return tid;
+}
+TypeId
+PeerLinkOpenStart::GetInstanceTypeId () const
+{
+  return GetTypeId ();
 }
 void
-PeerLinkFrameStart::SetPlinkFrameStart (PeerLinkFrameStart::PlinkFrameStartFields fields)
+PeerLinkOpenStart::Print (std::ostream &os) const
 {
-  m_subtype = fields.subtype;
+  os << "capability=" << m_capability << ", rates=" << m_rates;
+  os << ", ";
+  m_meshId.Print (os);
+  os << ", ";
+  m_config.Print (os);
+}
+uint32_t
+PeerLinkOpenStart::GetSerializedSize () const
+{
+  uint32_t size =0; //Peering protocol
+  size += 2; //capability
+  size += m_rates.GetSerializedSize ();
+  size += m_rates.extended.GetSerializedSize ();
+  size += m_meshId.GetInformationFieldSize () + 2;
+  size += m_config.GetInformationFieldSize () + 2;
+  return size;
+}
+void
+PeerLinkOpenStart::Serialize (Buffer::Iterator start) const
+{
+  Buffer::Iterator i = start;
   
-  if (m_subtype != (uint8_t)(WifiActionHeader::PEER_LINK_CLOSE))
-    {
-      m_capability = fields.capability;
-    }
-  if (m_subtype == (uint8_t)(WifiActionHeader::PEER_LINK_CONFIRM))
-    {
-      m_aid = fields.aid;
-    }
-  if (m_subtype != (uint8_t)(WifiActionHeader::PEER_LINK_CLOSE))
-    {
-      m_rates = fields.rates;
-    }
-  if (m_subtype != (uint8_t)(WifiActionHeader::PEER_LINK_CONFIRM))
-    {
-      m_meshId = fields.meshId;
-    }
-  if (m_subtype != (uint8_t)(WifiActionHeader::PEER_LINK_CLOSE))
+  i.WriteHtolsbU16 (m_capability);
+  i = m_rates.Serialize (i);
+  i = m_rates.extended.Serialize (i);
+  i = m_meshId.Serialize (i);
+  i = m_config.Serialize (i);
+}
+uint32_t
+PeerLinkOpenStart::Deserialize (Buffer::Iterator start)
+{
+  Buffer::Iterator i = start;
+  
+  m_capability = i.ReadLsbtohU16 ();
+  i = m_rates.Deserialize (i);
+  i = m_rates.extended.DeserializeIfPresent (i);
+  uint8_t id = i.ReadU8 ();
+  uint8_t length = i.ReadU8 ();
+  m_meshId.DeserializeInformationField (i, length);
+  if ((m_meshId.ElementId () != (WifiInformationElementId) id) || (m_meshId.GetInformationFieldSize () != length))
+    {
+      NS_FATAL_ERROR ("Broken frame: Element ID does not match IE itself!");
+    }
+  i.Next (m_meshId.GetInformationFieldSize ());
+  id = i.ReadU8 ();
+  length = i.ReadU8 ();
+  m_config.DeserializeInformationField (i, length);
+  if ((m_config.ElementId () != (WifiInformationElementId) id) || (m_config.GetInformationFieldSize () != length))
     {
-      m_config = fields.config;
+      NS_FATAL_ERROR ("Broken frame: Element ID does not match IE itself!");
     }
-  else
+  i.Next (m_config.GetInformationFieldSize ());
+ 
+  return i.GetDistanceFrom (start);
+}
+bool
+operator== (const PeerLinkOpenStart & a, const PeerLinkOpenStart & b)
+{
+  return ((a.m_capability == b.m_capability)
+          && (a.m_meshId.IsEqual (b.m_meshId)) && (a.m_config == b.m_config));
+  
+}
+NS_OBJECT_ENSURE_REGISTERED (PeerLinkCloseStart);
+
+PeerLinkCloseStart::PeerLinkCloseStart () :
+  m_meshId ()
+{
+}
+void
+PeerLinkCloseStart::SetPlinkCloseStart (PeerLinkCloseStart::PlinkCloseStartFields fields)
+{
+  m_meshId = fields.meshId;
+}
+PeerLinkCloseStart::PlinkCloseStartFields
+PeerLinkCloseStart::GetFields () const
+{
+  PlinkCloseStartFields retval;
+  /// \todo protocol version:
+  retval.meshId = m_meshId;
+  
+  return retval;
+}
+TypeId
+PeerLinkCloseStart::GetTypeId ()
+{
+  static TypeId tid = TypeId ("ns3::dot11s::PeerLinkCloseStart")
+    .SetParent<Header> ()
+    .SetGroupName ("Mesh")
+    .AddConstructor<PeerLinkCloseStart> ()
+  ;
+  return tid;
+}
+TypeId
+PeerLinkCloseStart::GetInstanceTypeId () const
+{
+  return GetTypeId ();
+}
+void
+PeerLinkCloseStart::Print (std::ostream &os) const
+{
+  m_meshId.Print (os);
+}
+uint32_t
+PeerLinkCloseStart::GetSerializedSize () const
+{
+  uint32_t size =0; //Peering protocol
+  size += m_meshId.GetInformationFieldSize () + 2;
+  return size;
+}
+void
+PeerLinkCloseStart::Serialize (Buffer::Iterator start) const
+{
+  Buffer::Iterator i = start;
+  i = m_meshId.Serialize (i);
+}
+uint32_t
+PeerLinkCloseStart::Deserialize (Buffer::Iterator start)
+{
+  Buffer::Iterator i = start;
+  
+  uint8_t id = i.ReadU8 ();
+  uint8_t length = i.ReadU8 ();
+  m_meshId.DeserializeInformationField (i, length);
+  if ((m_meshId.ElementId () != (WifiInformationElementId) id) || (m_meshId.GetInformationFieldSize () != length))
     {
-      //reasonCode not used here
+      NS_FATAL_ERROR ("Broken frame: Element ID does not match IE itself!");
     }
+  i.Next (m_meshId.GetInformationFieldSize ());
+  return i.GetDistanceFrom (start);
 }
-PeerLinkFrameStart::PlinkFrameStartFields
-PeerLinkFrameStart::GetFields () const
+bool
+operator== (const PeerLinkCloseStart & a, const PeerLinkCloseStart & b)
+{
+  return ((a.m_meshId.IsEqual (b.m_meshId)));
+}
+NS_OBJECT_ENSURE_REGISTERED (PeerLinkConfirmStart);
+
+PeerLinkConfirmStart::PeerLinkConfirmStart () :
+  m_capability (0), m_aid (0), m_rates (SupportedRates ()),
+  m_config (IeConfiguration ())
 {
-  PlinkFrameStartFields retval;
+}
+void
+PeerLinkConfirmStart::SetPlinkConfirmStart (PeerLinkConfirmStart::PlinkConfirmStartFields fields)
+{
+  m_capability = fields.capability;
+  m_aid = fields.aid;
+  m_rates = fields.rates;
+  m_config = fields.config;
+}
+PeerLinkConfirmStart::PlinkConfirmStartFields
+PeerLinkConfirmStart::GetFields () const
+{
+  PlinkConfirmStartFields retval;
   /// \todo protocol version:
-  retval.subtype = m_subtype;
   retval.capability = m_capability;
   retval.aid = m_aid;
   retval.rates = m_rates;
-  retval.meshId = m_meshId;
   retval.config = m_config;
   
   return retval;
 }
 TypeId
-PeerLinkFrameStart::GetTypeId ()
+PeerLinkConfirmStart::GetTypeId ()
 {
-  static TypeId tid = TypeId ("ns3::dot11s::PeerLinkFrameStart")
+  static TypeId tid = TypeId ("ns3::dot11s::PeerLinkConfirmStart")
     .SetParent<Header> ()
     .SetGroupName ("Mesh")
-    .AddConstructor<PeerLinkFrameStart> ()
+    .AddConstructor<PeerLinkConfirmStart> ()
   ;
   return tid;
 }
 TypeId
-PeerLinkFrameStart::GetInstanceTypeId () const
+PeerLinkConfirmStart::GetInstanceTypeId () const
 {
   return GetTypeId ();
 }
 void
-PeerLinkFrameStart::Print (std::ostream &os) const
+PeerLinkConfirmStart::Print (std::ostream &os) const
 {
-  os << "subtype = " << (uint16_t) m_subtype << std::endl << "capability = " << m_capability << std::endl << "laid = "
-     << (uint16_t) m_aid << std::endl << "rates = " << m_rates << std::endl << "meshId = ";
-  m_meshId.Print (os);
-  os << std::endl << "configuration = ";
+  os << "capability=" << m_capability << ", rates=" << m_rates;
+  os << ", ";
   m_config.Print (os);
-  os << std::endl << "reason code = " << m_reasonCode;
 }
 uint32_t
-PeerLinkFrameStart::GetSerializedSize () const
+PeerLinkConfirmStart::GetSerializedSize () const
 {
   uint32_t size =0; //Peering protocol
-  NS_ASSERT (m_subtype < 4);
-  if ((uint8_t)(WifiActionHeader::PEER_LINK_CLOSE) != m_subtype)
-    {
-      size += 2; //capability
-    }
-  if ((uint8_t)(WifiActionHeader::PEER_LINK_CONFIRM) == m_subtype)
-    {
-      size += 2; //AID of remote peer
-    }
-  if ((uint8_t)(WifiActionHeader::PEER_LINK_CLOSE) != m_subtype)
-    {
-      size += m_rates.GetSerializedSize ();
-      size += m_rates.extended.GetSerializedSize ();
-    }
-  if ((uint8_t)(WifiActionHeader::PEER_LINK_CONFIRM) != m_subtype)
-    {
-      size += m_meshId.GetInformationFieldSize () + 2;
-    }
-  if ((uint8_t)(WifiActionHeader::PEER_LINK_CLOSE) != m_subtype)
-    {
-      size += m_config.GetInformationFieldSize () + 2;
-    }
-  else
-    {
-      //reasonCode not used here
-    }
+  size += 2; //capability
+  size += 2; //AID of remote peer
+  size += m_rates.GetSerializedSize ();
+  size += m_rates.extended.GetSerializedSize ();
+  size += m_config.GetInformationFieldSize () + 2;
   return size;
 }
 void
-PeerLinkFrameStart::Serialize (Buffer::Iterator start) const
+PeerLinkConfirmStart::Serialize (Buffer::Iterator start) const
 {
   Buffer::Iterator i = start;
-  NS_ASSERT (m_subtype < 4);
   
-  if ((uint8_t)(WifiActionHeader::PEER_LINK_CLOSE) != m_subtype)
-    {
-      i.WriteHtolsbU16 (m_capability);
-    }
-  if ((uint8_t)(WifiActionHeader::PEER_LINK_CONFIRM) == m_subtype)
-    {
-      i.WriteHtolsbU16 (m_aid);
-    }
-  if ((uint8_t)(WifiActionHeader::PEER_LINK_CLOSE) != m_subtype)
-    {
-      i = m_rates.Serialize (i);
-      i = m_rates.extended.Serialize (i);
-    }
-  if ((uint8_t)(WifiActionHeader::PEER_LINK_CONFIRM) != m_subtype)
-    {
-      i = m_meshId.Serialize (i);
-    }
-  if ((uint8_t)(WifiActionHeader::PEER_LINK_CLOSE) != m_subtype)
-    {
-      i = m_config.Serialize (i);
-    }
-  else
-    {
-      //reasonCode not used here
-    }
+  i.WriteHtolsbU16 (m_capability);
+  i.WriteHtolsbU16 (m_aid);
+  i = m_rates.Serialize (i);
+  i = m_rates.extended.Serialize (i);
+  i = m_config.Serialize (i);
 }
 uint32_t
-PeerLinkFrameStart::Deserialize (Buffer::Iterator start)
+PeerLinkConfirmStart::Deserialize (Buffer::Iterator start)
 {
   Buffer::Iterator i = start;
-  NS_ASSERT (m_subtype < 4);
   
-  if ((uint8_t)(WifiActionHeader::PEER_LINK_CLOSE) != m_subtype)
-    {
-      m_capability = i.ReadLsbtohU16 ();
-    }
-  if ((uint8_t)(WifiActionHeader::PEER_LINK_CONFIRM) == m_subtype)
-    {
-      m_aid = i.ReadLsbtohU16 ();
-    }
-  if ((uint8_t)(WifiActionHeader::PEER_LINK_CLOSE) != m_subtype)
+  m_capability = i.ReadLsbtohU16 ();
+  m_aid = i.ReadLsbtohU16 ();
+  i = m_rates.Deserialize (i);
+  i = m_rates.extended.DeserializeIfPresent (i);
+  uint8_t id = i.ReadU8 ();
+  uint8_t length = i.ReadU8 ();
+  m_config.DeserializeInformationField (i, length);
+  if ((m_config.ElementId () != (WifiInformationElementId) id) || (m_config.GetInformationFieldSize () != length))
     {
-      i = m_rates.Deserialize (i);
-      i = m_rates.extended.DeserializeIfPresent (i);
-    }
-  if ((uint8_t)(WifiActionHeader::PEER_LINK_CONFIRM) != m_subtype)
-    {
-      uint8_t id = i.ReadU8 ();
-      uint8_t length = i.ReadU8 ();
-      m_meshId.DeserializeInformationField (i, length);
-      if ((m_meshId.ElementId () != (WifiInformationElementId) id) || (m_meshId.GetInformationFieldSize () != length))
-        {
-          NS_FATAL_ERROR ("Broken frame: Element ID does not match IE itself!");
-        }
-      i.Next (m_meshId.GetInformationFieldSize ());
-    }
-  if ((uint8_t)(WifiActionHeader::PEER_LINK_CLOSE) != m_subtype)
-    {
-      uint8_t id = i.ReadU8 ();
-      uint8_t length = i.ReadU8 ();
-      m_config.DeserializeInformationField (i, length);
-      if ((m_config.ElementId () != (WifiInformationElementId) id) || (m_config.GetInformationFieldSize () != length))
-        {
-          NS_FATAL_ERROR ("Broken frame: Element ID does not match IE itself!");
-        }
-      i.Next (m_config.GetInformationFieldSize ());
-    }
-  else
-    {
-       //reasonCode not used here
+      NS_FATAL_ERROR ("Broken frame: Element ID does not match IE itself!");
     }
+  i.Next (m_config.GetInformationFieldSize ());
   return i.GetDistanceFrom (start);
 }
 bool
-operator== (const PeerLinkFrameStart & a, const PeerLinkFrameStart & b)
+operator== (const PeerLinkConfirmStart & a, const PeerLinkConfirmStart & b)
 {
-  return ((a.m_subtype == b.m_subtype) && (a.m_capability == b.m_capability) && (a.m_aid == b.m_aid)
-          && (a.m_meshId.IsEqual (b.m_meshId)) && (a.m_config == b.m_config));
-  
+  return ((a.m_capability == b.m_capability) && (a.m_aid == b.m_aid)
+          && (a.m_config == b.m_config));
 }
 } // namespace dot11s
 } // namespace ns3
diff -Naur ns-3.23/src/mesh/model/dot11s/peer-link-frame.h ns-3.24/src/mesh/model/dot11s/peer-link-frame.h
--- ns-3.23/src/mesh/model/dot11s/peer-link-frame.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/model/dot11s/peer-link-frame.h	2015-09-15 11:18:44.000000000 -0700
@@ -28,41 +28,34 @@
 #include "ie-dot11s-id.h"
 namespace ns3
 {
-class MeshWifiInterfaceMac;
 namespace dot11s
 {
 /**
  * \ingroup dot11s
  *
- * \brief 802.11s Peer link management frame
+ * \brief 802.11s Peer link open management frame
  * 
- * Peer link management frame included the following (see chapters 7.4.12.1-7.4.12.3 of 802.11s):
- * - Subtype field
- * - Association ID field
+ * Peer link opent frame includes the following:
+ * - Capability
  * - Supported rates
  * - Mesh ID of mesh
+ * - Configuration
  */
-class PeerLinkFrameStart : public Header
+class PeerLinkOpenStart : public Header
 {
 public:
-  PeerLinkFrameStart ();
+  PeerLinkOpenStart ();
   ///\brief fields:
-  struct PlinkFrameStartFields
+  struct PlinkOpenStartFields
   {
-    uint8_t subtype;
-    IePeeringProtocol protocol; //Peering protocol version - in all subtypes - 3 octets
+    IePeeringProtocol protocol; //Peering protocol version - 3 octets
     uint16_t capability;        //open and confirm
-    uint16_t aid;               //confirm only
     SupportedRates rates;       //open and confirm
     IeMeshId meshId;            //open and close
     IeConfiguration config;     //open and confirm
-    uint16_t reasonCode;        //close only
   };
-  ///\attention: must be set before deserialize, before only multihop
-  //action header knows about subtype
-  void SetPlinkFrameSubtype (uint8_t subtype);
-  void SetPlinkFrameStart (PlinkFrameStartFields);
-  PlinkFrameStartFields GetFields () const;
+  void SetPlinkOpenStart (PlinkOpenStartFields);
+  PlinkOpenStartFields GetFields () const;
 
   // Inherited from header:
   static  TypeId   GetTypeId ();
@@ -73,22 +66,107 @@
   virtual uint32_t Deserialize (Buffer::Iterator start);
 
 private:
-  uint8_t m_subtype;
-  IePeeringProtocol m_protocol;
   uint16_t m_capability;
-  uint16_t m_aid;
   SupportedRates m_rates;
   IeMeshId m_meshId;
   IeConfiguration m_config;
-  uint16_t m_reasonCode;
 
-  friend bool operator== (const PeerLinkFrameStart & a, const PeerLinkFrameStart & b);
+  friend bool operator== (const PeerLinkOpenStart & a, const PeerLinkOpenStart & b);
+
+  PeerLinkOpenStart& operator= (const PeerLinkOpenStart &);
+  PeerLinkOpenStart (const PeerLinkOpenStart &);
+
+};
+
+bool operator== (const PeerLinkOpenStart & a, const PeerLinkOpenStart & b);
+
+/**
+ * \ingroup dot11s
+ *
+ * \brief 802.11s Peer link close management frame
+ * 
+ * Peer link close frame includes the following:
+ * - Mesh ID of mesh
+ */
+class PeerLinkCloseStart : public Header
+{
+public:
+  PeerLinkCloseStart ();
+  ///\brief fields:
+  struct PlinkCloseStartFields
+  {
+    IePeeringProtocol protocol; //Peering protocol version - 3 octets
+    IeMeshId meshId;            //open and close
+  };
+  void SetPlinkCloseStart (PlinkCloseStartFields);
+  PlinkCloseStartFields GetFields () const;
+
+  // Inherited from header:
+  static  TypeId   GetTypeId ();
+  virtual TypeId   GetInstanceTypeId () const;
+  virtual void     Print (std::ostream &os) const;
+  virtual uint32_t GetSerializedSize () const;
+  virtual void     Serialize (Buffer::Iterator start) const;
+  virtual uint32_t Deserialize (Buffer::Iterator start);
+
+private:
+  IeMeshId m_meshId;
+
+  friend bool operator== (const PeerLinkCloseStart & a, const PeerLinkCloseStart & b);
+
+  PeerLinkCloseStart& operator= (const PeerLinkCloseStart &);
+  PeerLinkCloseStart (const PeerLinkCloseStart &);
+
+};
+bool operator== (const PeerLinkCloseStart & a, const PeerLinkCloseStart & b);
+
+/**
+ * \ingroup dot11s
+ *
+ * \brief 802.11s Peer link confirm management frame
+ * 
+ * Peer link confirm frame includes the following:
+ * - Association ID field
+ * - Supported rates
+ * - Configuration
+ */
+class PeerLinkConfirmStart : public Header
+{
+public:
+  PeerLinkConfirmStart ();
+  ///\brief fields:
+  struct PlinkConfirmStartFields
+  {
+    IePeeringProtocol protocol; //Peering protocol version - 3 octets
+    uint16_t capability;        //open and confirm
+    uint16_t aid;               //confirm only
+    SupportedRates rates;       //open and confirm
+    IeConfiguration config;     //open and confirm
+  };
+  void SetPlinkConfirmStart (PlinkConfirmStartFields);
+  PlinkConfirmStartFields GetFields () const;
+
+  // Inherited from header:
+  static  TypeId   GetTypeId ();
+  virtual TypeId   GetInstanceTypeId () const;
+  virtual void     Print (std::ostream &os) const;
+  virtual uint32_t GetSerializedSize () const;
+  virtual void     Serialize (Buffer::Iterator start) const;
+  virtual uint32_t Deserialize (Buffer::Iterator start);
+
+private:
+  uint16_t m_capability;
+  uint16_t m_aid;
+  SupportedRates m_rates;
+  IeConfiguration m_config;
+
+  friend bool operator== (const PeerLinkConfirmStart & a, const PeerLinkConfirmStart & b);
 
-  PeerLinkFrameStart& operator= (const PeerLinkFrameStart &);
-  PeerLinkFrameStart (const PeerLinkFrameStart &);
+  PeerLinkConfirmStart& operator= (const PeerLinkConfirmStart &);
+  PeerLinkConfirmStart (const PeerLinkConfirmStart &);
 
 };
-bool operator== (const PeerLinkFrameStart & a, const PeerLinkFrameStart & b);
+bool operator== (const PeerLinkConfirmStart & a, const PeerLinkConfirmStart & b);
 } // namespace dot11s
 } // namespace ns3
 #endif
diff -Naur ns-3.23/src/mesh/model/dot11s/peer-management-protocol.h ns-3.24/src/mesh/model/dot11s/peer-management-protocol.h
--- ns-3.23/src/mesh/model/dot11s/peer-management-protocol.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/model/dot11s/peer-management-protocol.h	2015-09-15 11:18:44.000000000 -0700
@@ -166,11 +166,11 @@
   /**
    * TracedCallback signature for link open/close events.
    *
-   * \param [in] myIface MAC address of my interface.
-   * \param [in] peerIface MAC address of peer interface.
+   * \param [in] src MAC address of source interface.
+   * \param [in] dst MAC address of destination interface.
    */
   typedef void (* LinkOpenCloseTracedCallback)
-    (const Mac48Address myIface, const Mac48Address peerIface);
+    (Mac48Address src, const Mac48Address dst);
    
 
 private:
diff -Naur ns-3.23/src/mesh/model/dot11s/peer-management-protocol-mac.cc ns-3.24/src/mesh/model/dot11s/peer-management-protocol-mac.cc
--- ns-3.23/src/mesh/model/dot11s/peer-management-protocol-mac.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/model/dot11s/peer-management-protocol-mac.cc	2015-09-15 11:18:44.000000000 -0700
@@ -82,6 +82,8 @@
       // Beacon shall not be dropped. May be needed to another plugins
       return true;
     }
+  uint16_t aid = 0;  // applicable only in Confirm message
+  IeConfiguration config;
   if (header.IsAction ())
     {
       WifiActionHeader actionHdr;
@@ -96,28 +98,61 @@
       m_stats.rxMgtBytes += packet->GetSize ();
       Mac48Address peerAddress = header.GetAddr2 ();
       Mac48Address peerMpAddress = header.GetAddr3 ();
-      PeerLinkFrameStart::PlinkFrameStartFields fields;
-      {
-        PeerLinkFrameStart peerFrame;
-        peerFrame.SetPlinkFrameSubtype ((uint8_t) actionValue.selfProtectedAction);
-        packet->RemoveHeader (peerFrame);
-        fields = peerFrame.GetFields ();
-        NS_ASSERT (fields.subtype == actionValue.selfProtectedAction); 
-      }
-      if ((actionValue.selfProtectedAction != WifiActionHeader::PEER_LINK_CLOSE) && !(m_parent->CheckSupportedRates (fields.rates))) 
-        {
-          m_protocol->ConfigurationMismatch (m_ifIndex, peerAddress);
-          // Broken peer link frame - drop it
-          m_stats.brokenMgt++;
-          return false;
+      if (actionValue.selfProtectedAction == WifiActionHeader::PEER_LINK_OPEN)
+        {
+          PeerLinkOpenStart::PlinkOpenStartFields fields;
+          PeerLinkOpenStart peerFrame;
+          packet->RemoveHeader (peerFrame);
+          fields = peerFrame.GetFields ();
+          if (!fields.meshId.IsEqual ( *(m_protocol->GetMeshId ())))
+            {
+              m_protocol->ConfigurationMismatch (m_ifIndex, peerAddress);
+              // Broken peer link frame - drop it
+              m_stats.brokenMgt++;
+              return false;
+            }
+          if (!(m_parent->CheckSupportedRates (fields.rates)))
+            {
+              m_protocol->ConfigurationMismatch (m_ifIndex, peerAddress);
+              // Broken peer link frame - drop it
+              m_stats.brokenMgt++;
+              return false;
+            }
+          config = fields.config;
+        }
+      else if (actionValue.selfProtectedAction == WifiActionHeader::PEER_LINK_CONFIRM)
+        {
+          PeerLinkConfirmStart::PlinkConfirmStartFields fields;
+          PeerLinkConfirmStart peerFrame;
+          packet->RemoveHeader (peerFrame);
+          fields = peerFrame.GetFields ();
+          if (!(m_parent->CheckSupportedRates (fields.rates)))
+            {
+              m_protocol->ConfigurationMismatch (m_ifIndex, peerAddress);
+              // Broken peer link frame - drop it
+              m_stats.brokenMgt++;
+              return false;
+            }
+          aid = fields.aid;
+          config = fields.config;
+        }
+      else if (actionValue.selfProtectedAction == WifiActionHeader::PEER_LINK_CLOSE)
+        {
+          PeerLinkCloseStart::PlinkCloseStartFields fields;
+          PeerLinkCloseStart peerFrame;
+          packet->RemoveHeader (peerFrame);
+          fields = peerFrame.GetFields ();
+          if (!fields.meshId.IsEqual ( *(m_protocol->GetMeshId ())))
+            {
+              m_protocol->ConfigurationMismatch (m_ifIndex, peerAddress);
+              // Broken peer link frame - drop it
+              m_stats.brokenMgt++;
+              return false;
+            }
         }
-     if ((actionValue.selfProtectedAction != WifiActionHeader::PEER_LINK_CONFIRM) && !fields.meshId.IsEqual (
-            *(m_protocol->GetMeshId ())))
+      else
         {
-          m_protocol->ConfigurationMismatch (m_ifIndex, peerAddress);
-          // Broken peer link frame - drop it
-          m_stats.brokenMgt++;
-          return false;
+          NS_FATAL_ERROR ("Unknown Self-protected Action type: " << actionValue.selfProtectedAction);
         }
       Ptr<IePeerManagement> peerElement;
       //Peer Management element is the last element in this frame - so, we can use MeshInformationElementVector
@@ -126,25 +161,24 @@
       peerElement = DynamicCast<IePeerManagement>(elements.FindFirst (IE11S_PEERING_MANAGEMENT));
 
       NS_ASSERT (peerElement != 0);
-      //Check taht frame subtype corresponds peer link subtype
+      //Check that frame subtype corresponds to peer link subtype
       if (peerElement->SubtypeIsOpen ())
         {
           m_stats.rxOpen++;
-         NS_ASSERT (actionValue.selfProtectedAction == WifiActionHeader::PEER_LINK_OPEN);
+          NS_ASSERT (actionValue.selfProtectedAction == WifiActionHeader::PEER_LINK_OPEN);
         }
       if (peerElement->SubtypeIsConfirm ())
         {
           m_stats.rxConfirm++;
-       NS_ASSERT (actionValue.selfProtectedAction == WifiActionHeader::PEER_LINK_CONFIRM); 
+          NS_ASSERT (actionValue.selfProtectedAction == WifiActionHeader::PEER_LINK_CONFIRM); 
         }
       if (peerElement->SubtypeIsClose ())
         {
           m_stats.rxClose++;
-           NS_ASSERT (actionValue.selfProtectedAction == WifiActionHeader::PEER_LINK_CLOSE); 
+          NS_ASSERT (actionValue.selfProtectedAction == WifiActionHeader::PEER_LINK_CLOSE); 
         }
       //Deliver Peer link management frame to protocol:
-      m_protocol->ReceivePeerLinkFrame (m_ifIndex, peerAddress, peerMpAddress, fields.aid, *peerElement,
-                                        fields.config);
+      m_protocol->ReceivePeerLinkFrame (m_ifIndex, peerAddress, peerMpAddress, aid, *peerElement, config);
       // if we can handle a frame - drop it
       return false;
     }
@@ -202,44 +236,56 @@
   MeshInformationElementVector elements;
   elements.AddInformationElement (Ptr<IePeerManagement> (&peerElement));
   packet->AddHeader (elements);
-  PeerLinkFrameStart::PlinkFrameStartFields fields;
-  fields.rates = m_parent->GetSupportedRates ();
-  fields.capability = 0;
-  fields.meshId = *(m_protocol->GetMeshId ());
-  fields.config = meshConfig;
-  PeerLinkFrameStart plinkFrame;
   //Create an 802.11 frame header:
   //Send management frame to MAC:
-  WifiActionHeader actionHdr;
   if (peerElement.SubtypeIsOpen ())
     {
+      PeerLinkOpenStart::PlinkOpenStartFields fields;
+      fields.rates = m_parent->GetSupportedRates ();
+      fields.capability = 0;
+      fields.meshId = *(m_protocol->GetMeshId ());
+      fields.config = meshConfig;
+      PeerLinkOpenStart plinkOpen;
+      WifiActionHeader actionHdr;
       m_stats.txOpen++;
       WifiActionHeader::ActionValue action;
       action.selfProtectedAction = WifiActionHeader::PEER_LINK_OPEN;
-      fields.subtype = WifiActionHeader::PEER_LINK_OPEN;
       actionHdr.SetAction (WifiActionHeader::SELF_PROTECTED, action); 
+      plinkOpen.SetPlinkOpenStart (fields);
+      packet->AddHeader (plinkOpen);
+      packet->AddHeader (actionHdr);
     }
   if (peerElement.SubtypeIsConfirm ())
     {
+      PeerLinkConfirmStart::PlinkConfirmStartFields fields;
+      fields.rates = m_parent->GetSupportedRates ();
+      fields.capability = 0;
+      fields.config = meshConfig;
+      PeerLinkConfirmStart plinkConfirm;
+      WifiActionHeader actionHdr;
       m_stats.txConfirm++;
       WifiActionHeader::ActionValue action;
-       action.selfProtectedAction = WifiActionHeader::PEER_LINK_CONFIRM; 
+      action.selfProtectedAction = WifiActionHeader::PEER_LINK_CONFIRM; 
       fields.aid = aid;
-      fields.subtype = WifiActionHeader::PEER_LINK_CONFIRM;
       actionHdr.SetAction (WifiActionHeader::SELF_PROTECTED, action); 
+      plinkConfirm.SetPlinkConfirmStart (fields);
+      packet->AddHeader (plinkConfirm);
+      packet->AddHeader (actionHdr);
     }
   if (peerElement.SubtypeIsClose ())
     {
+      PeerLinkCloseStart::PlinkCloseStartFields fields;
+      fields.meshId = *(m_protocol->GetMeshId ());
+      PeerLinkCloseStart plinkClose;
+      WifiActionHeader actionHdr;
       m_stats.txClose++;
       WifiActionHeader::ActionValue action;
       action.selfProtectedAction = WifiActionHeader::PEER_LINK_CLOSE; 
-      fields.subtype = WifiActionHeader::PEER_LINK_CLOSE;
-      fields.reasonCode = peerElement.GetReasonCode ();
       actionHdr.SetAction (WifiActionHeader::SELF_PROTECTED, action); 
+      plinkClose.SetPlinkCloseStart (fields);
+      packet->AddHeader (plinkClose);
+      packet->AddHeader (actionHdr);
     }
-  plinkFrame.SetPlinkFrameStart (fields);
-  packet->AddHeader (plinkFrame);
-  packet->AddHeader (actionHdr);
   m_stats.txMgt++;
   m_stats.txMgtBytes += packet->GetSize ();
   // Wifi Mac header:
diff -Naur ns-3.23/src/mesh/model/flame/flame-header.cc ns-3.24/src/mesh/model/flame/flame-header.cc
--- ns-3.23/src/mesh/model/flame/flame-header.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/model/flame/flame-header.cc	2015-09-15 11:18:44.000000000 -0700
@@ -52,8 +52,8 @@
 void
 FlameHeader::Print (std::ostream &os) const
 {
-  os << "Cost             = " << (uint16_t) m_cost << std::endl << "Sequence number  = " << m_seqno
-     << std::endl << "Orig Destination = " << m_origDst << std::endl << "Orig Source      = " << m_origSrc << std::endl;
+  os << "Cost= " << (uint16_t) m_cost << ", Sequence number= " << m_seqno
+     << ", Orig Destination= " << m_origDst << ", Orig Source= " << m_origSrc;
 }
 uint32_t
 FlameHeader::GetSerializedSize (void) const
diff -Naur ns-3.23/src/mesh/model/flame/flame-protocol.cc ns-3.24/src/mesh/model/flame/flame-protocol.cc
--- ns-3.23/src/mesh/model/flame/flame-protocol.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/model/flame/flame-protocol.cc	2015-09-15 11:18:44.000000000 -0700
@@ -46,7 +46,11 @@
 TypeId
 FlameTag::GetTypeId ()
 {
-  static TypeId tid = TypeId ("ns3::flame::FlameTag").SetParent<Tag> ().AddConstructor<FlameTag> ().SetGroupName ("Mesh");
+  static TypeId tid = TypeId ("ns3::flame::FlameTag")
+    .SetParent<Tag> ()
+    .SetGroupName ("Mesh")
+    .AddConstructor<FlameTag> ()
+    ;
   return tid;
 }
 
diff -Naur ns-3.23/src/mesh/model/flame/flame-rtable.cc ns-3.24/src/mesh/model/flame/flame-rtable.cc
--- ns-3.23/src/mesh/model/flame/flame-rtable.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/model/flame/flame-rtable.cc	2015-09-15 11:18:44.000000000 -0700
@@ -37,8 +37,9 @@
 {
   static TypeId tid =
     TypeId ("ns3::flame::FlameRtable")
-    .SetParent<Object> ().AddConstructor<FlameRtable> ()
+    .SetParent<Object> ()
     .SetGroupName ("Mesh")
+    .AddConstructor<FlameRtable> ()
     .AddAttribute ( "Lifetime",
                     "The lifetime of the routing enrty",
                     TimeValue (Seconds (120)), MakeTimeAccessor (
diff -Naur ns-3.23/src/mesh/model/mesh-information-element.h ns-3.24/src/mesh/model/mesh-information-element.h
--- ns-3.23/src/mesh/model/mesh-information-element.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/model/mesh-information-element.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,58 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2010 Dean Armstrong
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Dean Armstrong <deanarm@gmail.com>
- */
-
-#ifndef MESH_INFORMATION_ELEMENT_H
-#define MESH_INFORMATION_ELEMENT_H
-
-#include "ns3/wifi-information-element.h"
-
-namespace ns3 {
-
-#define IE11S_LINK_METRIC_REPORT               ((WifiInformationElementId)115)
-#define IE11S_CONGESTION_NOTIFICATION          ((WifiInformationElementId)116)
-#define IE11S_SUPP_MBSS_REG_CLASSES_CHANNELS   ((WifiInformationElementId)23)
-#define IE11S_MESH_CHANNEL_SWITCH_ANNOUNCEMENT ((WifiInformationElementId)24)
-#define IE11S_MESH_TIM                         ((WifiInformationElementId)25)
-#define IE11S_AWAKE_WINDOW                     ((WifiInformationElementId)119)
-#define IE11S_BEACON_TIMING                    ((WifiInformationElementId)120)
-#define IE11S_MCCAOP_SETUP_REQUEST             ((WifiInformationElementId)121)
-#define IE11S_MCCAOP_SETUP_REPLY               ((WifiInformationElementId)122)
-#define IE11S_MCCAOP_ADVERTISEMENT             ((WifiInformationElementId)123)
-#define IE11S_MCCAOP_RESERVATION_TEARDOWN      ((WifiInformationElementId)31)
-#define IE11S_PORTAL_ANNOUNCEMENT              ((WifiInformationElementId)32)
-#define IE11S_PROXY_UPDATE                     ((WifiInformationElementId)137)
-#define IE11S_PROXY_UPDATE_CONFIRMATION        ((WifiInformationElementId)138)
-#define IE11S_ABBREVIATED_HANDSHAKE            ((WifiInformationElementId)39)
-/* begin of open80211s-compatible IDs */
-#define IE11S_MESH_CONFIGURATION               ((WifiInformationElementId)113)
-#define IE11S_MESH_ID                          ((WifiInformationElementId)114)
-#define IE11S_PEERING_MANAGEMENT               ((WifiInformationElementId)117)
-/* end of open80211s-compatible IDs */
-#define IE11S_RANN                             ((WifiInformationElementId)126)
-/* begin of open80211s-compatible IDs */
-#define IE11S_PREQ                             ((WifiInformationElementId)130)
-#define IE11S_PREP                             ((WifiInformationElementId)131)
-#define IE11S_PERR                             ((WifiInformationElementId)132)
-/* end of open80211s-compatible IDs */
-#define IE11S_MESH_PEERING_PROTOCOL_VERSION    ((WifiInformationElementId)74)
-
-}
-
-#endif /* MESH_INFORMATION_ELEMENT_H */
diff -Naur ns-3.23/src/mesh/model/mesh-information-element-vector.cc ns-3.24/src/mesh/model/mesh-information-element-vector.cc
--- ns-3.23/src/mesh/model/mesh-information-element-vector.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/model/mesh-information-element-vector.cc	2015-09-15 11:18:44.000000000 -0700
@@ -36,6 +36,33 @@
 
 namespace ns3 {
 
+NS_OBJECT_ENSURE_REGISTERED (MeshInformationElementVector);
+
+MeshInformationElementVector::MeshInformationElementVector ()
+{
+}
+
+MeshInformationElementVector::~MeshInformationElementVector ()
+{
+}
+
+
+TypeId
+MeshInformationElementVector::GetTypeId ()
+{
+  static TypeId tid = TypeId ("ns3::MeshInformationElementVector")
+    .SetParent<WifiInformationElementVector> ()
+    .SetGroupName ("Mesh")
+    .AddConstructor<MeshInformationElementVector> ();
+  return tid;
+}
+
+TypeId
+MeshInformationElementVector::GetInstanceTypeId () const
+{
+  return GetTypeId ();
+}
+
 uint32_t
 MeshInformationElementVector::DeserializeSingleIe (Buffer::Iterator start)
 {
diff -Naur ns-3.23/src/mesh/model/mesh-information-element-vector.h ns-3.24/src/mesh/model/mesh-information-element-vector.h
--- ns-3.23/src/mesh/model/mesh-information-element-vector.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/model/mesh-information-element-vector.h	2015-09-15 11:18:44.000000000 -0700
@@ -23,13 +23,18 @@
 #define MESH_INFORMATION_ELEMENT_VECTOR_H
 
 #include "ns3/wifi-information-element-vector.h"
-#include "ns3/mesh-information-element.h"
+#include "ns3/wifi-information-element.h"
 
 namespace ns3 {
 
 class MeshInformationElementVector : public WifiInformationElementVector
 {
 public:
+  MeshInformationElementVector ();
+  ~MeshInformationElementVector ();
+
+  static TypeId GetTypeId ();
+  TypeId GetInstanceTypeId () const;
   virtual uint32_t DeserializeSingleIe (Buffer::Iterator start);
 };
 
diff -Naur ns-3.23/src/mesh/model/mesh-wifi-beacon.h ns-3.24/src/mesh/model/mesh-wifi-beacon.h
--- ns-3.23/src/mesh/model/mesh-wifi-beacon.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/model/mesh-wifi-beacon.h	2015-09-15 11:18:44.000000000 -0700
@@ -67,7 +67,7 @@
   /// Beacon header
   MgtBeaconHeader m_header;
   /// List of information elements added
-  WifiInformationElementVector m_elements;
+  MeshInformationElementVector m_elements;
 };
 
 }
diff -Naur ns-3.23/src/mesh/model/mesh-wifi-interface-mac.cc ns-3.24/src/mesh/model/mesh-wifi-interface-mac.cc
--- ns-3.23/src/mesh/model/mesh-wifi-interface-mac.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/model/mesh-wifi-interface-mac.cc	2015-09-15 11:18:44.000000000 -0700
@@ -74,8 +74,8 @@
   ;
   return tid;
 }
-MeshWifiInterfaceMac::MeshWifiInterfaceMac () :
-  m_standard (WIFI_PHY_STANDARD_80211a)
+MeshWifiInterfaceMac::MeshWifiInterfaceMac ()
+  : m_standard (WIFI_PHY_STANDARD_80211a)
 {
   NS_LOG_FUNCTION (this);
 
@@ -220,7 +220,7 @@
   // copy packet to allow modifications
   Ptr<Packet> packet = const_packet->Copy ();
   WifiMacHeader hdr;
-  hdr.SetTypeData ();
+  hdr.SetType (WIFI_MAC_QOSDATA);
   hdr.SetAddr2 (GetAddress ());
   hdr.SetAddr3 (to);
   hdr.SetAddr4 (from);
@@ -255,19 +255,20 @@
         }
       m_stationManager->RecordDisassociated (hdr.GetAddr1 ());
     }
-  //Classify: application sets a tag, which is removed here
-  // Get Qos tag:
-  AcIndex ac = AC_BE;
+  // Classify: application may have set a tag, which is removed here
+  AcIndex ac;
   QosTag tag;
   if (packet->RemovePacketTag (tag))
     {
-      hdr.SetType (WIFI_MAC_QOSDATA);
       hdr.SetQosTid (tag.GetTid ());
-      //Aftre setting type DsFrom and DsTo fields are reset.
-      hdr.SetDsFrom ();
-      hdr.SetDsTo ();
       ac = QosUtilsMapTidToAc (tag.GetTid ());
     }
+  else
+    {
+      // No tag found; set to best effort
+      ac = AC_BE;
+      hdr.SetQosTid (0);
+    }
   m_stats.sentFrames++;
   m_stats.sentBytes += packet->GetSize ();
   NS_ASSERT (m_edca.find (ac) != m_edca.end ());
@@ -318,13 +319,13 @@
   for (uint32_t i = 0; i < m_phy->GetNModes (); i++)
     {
       WifiMode mode = m_phy->GetMode (i);
-      rates.AddSupportedRate (mode.GetDataRate ());
+      rates.AddSupportedRate (mode.GetDataRate (m_phy->GetChannelWidth (), m_phy->GetGuardInterval (), 1));
     }
   // set the basic rates
   for (uint32_t j = 0; j < m_stationManager->GetNBasicModes (); j++)
     {
       WifiMode mode = m_stationManager->GetBasicMode (j);
-      rates.SetBasicRate (mode.GetDataRate ());
+      rates.SetBasicRate (mode.GetDataRate (m_phy->GetChannelWidth (), m_phy->GetGuardInterval (), 1));
     }
   return rates;
 }
@@ -334,7 +335,7 @@
   for (uint32_t i = 0; i < m_stationManager->GetNBasicModes (); i++)
     {
       WifiMode mode = m_stationManager->GetBasicMode (i);
-      if (!rates.IsSupportedRate (mode.GetDataRate ()))
+      if (!rates.IsSupportedRate (mode.GetDataRate (m_phy->GetChannelWidth (), m_phy->GetGuardInterval (), 1)))
         {
           return false;
         }
@@ -441,10 +442,10 @@
           for (uint32_t i = 0; i < m_phy->GetNModes (); i++)
             {
               WifiMode mode = m_phy->GetMode (i);
-              if (rates.IsSupportedRate (mode.GetDataRate ()))
+              if (rates.IsSupportedRate (mode.GetDataRate (m_phy->GetChannelWidth (), m_phy->GetGuardInterval (), 1)))
                 {
                   m_stationManager->AddSupportedMode (hdr->GetAddr2 (), mode);
-                  if (rates.IsBasicRate (mode.GetDataRate ()))
+                  if (rates.IsBasicRate (mode.GetDataRate (m_phy->GetChannelWidth (), m_phy->GetGuardInterval (), 1)))
                     {
                       m_stationManager->AddBasicMode (mode);
                     }
@@ -507,28 +508,32 @@
   return m_mpAddress;
 }
 //Statistics:
-MeshWifiInterfaceMac::Statistics::Statistics () :
-  recvBeacons (0), sentFrames (0), sentBytes (0), recvFrames (0), recvBytes (0)
+MeshWifiInterfaceMac::Statistics::Statistics ()
+  : recvBeacons (0),
+    sentFrames (0),
+    sentBytes (0),
+    recvFrames (0),
+    recvBytes (0)
 {
 }
 void
 MeshWifiInterfaceMac::Statistics::Print (std::ostream & os) const
 {
   os << "<Statistics "
-  /// \todo txBeacons
-  "rxBeacons=\"" << recvBeacons << "\" "
-  "txFrames=\"" << sentFrames << "\" "
-  "txBytes=\"" << sentBytes << "\" "
-  "rxFrames=\"" << recvFrames << "\" "
-  "rxBytes=\"" << recvBytes << "\"/>" << std::endl;
+    /// \todo txBeacons
+    "rxBeacons=\"" << recvBeacons << "\" "
+    "txFrames=\"" << sentFrames << "\" "
+    "txBytes=\"" << sentBytes << "\" "
+    "rxFrames=\"" << recvFrames << "\" "
+    "rxBytes=\"" << recvBytes << "\"/>" << std::endl;
 }
 void
 MeshWifiInterfaceMac::Report (std::ostream & os) const
 {
   os << "<Interface "
-  "BeaconInterval=\"" << GetBeaconInterval ().GetSeconds () << "\" "
-  "Channel=\"" << GetFrequencyChannel () << "\" "
-  "Address = \"" << GetAddress () << "\">" << std::endl;
+    "BeaconInterval=\"" << GetBeaconInterval ().GetSeconds () << "\" "
+    "Channel=\"" << GetFrequencyChannel () << "\" "
+    "Address = \"" << GetAddress () << "\">" << std::endl;
   m_stats.Print (os);
   os << "</Interface>" << std::endl;
 }
diff -Naur ns-3.23/src/mesh/test/dot11s/dot11s-test-suite.cc ns-3.24/src/mesh/test/dot11s/dot11s-test-suite.cc
--- ns-3.23/src/mesh/test/dot11s/dot11s-test-suite.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/test/dot11s/dot11s-test-suite.cc	2015-09-15 11:18:44.000000000 -0700
@@ -216,50 +216,37 @@
 PeerLinkFrameStartTest::DoRun ()
 {
   {
-    PeerLinkFrameStart a;
-    PeerLinkFrameStart::PlinkFrameStartFields fields;
-    fields.subtype = (uint8_t)(WifiActionHeader::PEER_LINK_OPEN);
+    PeerLinkOpenStart a;
+    PeerLinkOpenStart::PlinkOpenStartFields fields;
     fields.capability = 0;
-    fields.aid = 101;
-    fields.reasonCode = 12;
     fields.meshId = IeMeshId ("qwertyuiop");
-    a.SetPlinkFrameStart (fields);
+    a.SetPlinkOpenStart (fields);
     Ptr<Packet> packet = Create<Packet> ();
     packet->AddHeader (a);
-    PeerLinkFrameStart b;
-    b.SetPlinkFrameSubtype ((uint8_t)(WifiActionHeader::PEER_LINK_OPEN));
+    PeerLinkOpenStart b;
     packet->RemoveHeader (b);
     NS_TEST_EXPECT_MSG_EQ (a, b, "PEER_LINK_OPEN works");
   }
   {
-    PeerLinkFrameStart a;
-    PeerLinkFrameStart::PlinkFrameStartFields fields;
-    fields.subtype = (uint8_t)(WifiActionHeader::PEER_LINK_CONFIRM);
+    PeerLinkConfirmStart a;
+    PeerLinkConfirmStart::PlinkConfirmStartFields fields;
     fields.capability = 0;
     fields.aid = 1234;
-    fields.reasonCode = 12;
-    fields.meshId = IeMeshId ("qwerty");
-    a.SetPlinkFrameStart (fields);
+    a.SetPlinkConfirmStart (fields);
     Ptr<Packet> packet = Create<Packet> ();
     packet->AddHeader (a);
-    PeerLinkFrameStart b;
-    b.SetPlinkFrameSubtype ((uint8_t)(WifiActionHeader::PEER_LINK_CONFIRM));
+    PeerLinkConfirmStart b;
     packet->RemoveHeader (b);
     NS_TEST_EXPECT_MSG_EQ (a, b, "PEER_LINK_CONFIRM works");
   }
   {
-    PeerLinkFrameStart a;
-    PeerLinkFrameStart::PlinkFrameStartFields fields;
-    fields.subtype = (uint8_t)(WifiActionHeader::PEER_LINK_CLOSE);
-    fields.capability = 0;
-    fields.aid = 10;
+    PeerLinkCloseStart a;
+    PeerLinkCloseStart::PlinkCloseStartFields fields;
     fields.meshId = IeMeshId ("qqq");
-    fields.reasonCode = 12;
-    a.SetPlinkFrameStart (fields);
+    a.SetPlinkCloseStart (fields);
     Ptr<Packet> packet = Create<Packet> ();
     packet->AddHeader (a);
-    PeerLinkFrameStart b;
-    b.SetPlinkFrameSubtype ((uint8_t)(WifiActionHeader::PEER_LINK_CLOSE));
+    PeerLinkCloseStart b;
     packet->RemoveHeader (b);
     NS_TEST_EXPECT_MSG_EQ (a, b, "PEER_LINK_CLOSE works");
   }
diff -Naur ns-3.23/src/mesh/test/dot11s/hwmp-proactive-regression.cc ns-3.24/src/mesh/test/dot11s/hwmp-proactive-regression.cc
--- ns-3.23/src/mesh/test/dot11s/hwmp-proactive-regression.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/test/dot11s/hwmp-proactive-regression.cc	2015-09-15 11:18:44.000000000 -0700
@@ -31,7 +31,6 @@
 #include "ns3/ipv4-interface-container.h"
 #include "ns3/ipv4-address-helper.h"
 #include "ns3/abort.h"
-#include "ns3/udp-echo-helper.h"
 #include "ns3/mobility-model.h"
 #include "ns3/pcap-test.h"
 #include <sstream>
@@ -45,7 +44,8 @@
 
 HwmpProactiveRegressionTest::HwmpProactiveRegressionTest () : TestCase ("HWMP proactive regression test"),
                                                               m_nodes (0),
-                                                              m_time (Seconds (5))
+                                                              m_time (Seconds (5)),
+                                                              m_sentPktsCounter (0)
 {
 }
 
@@ -89,17 +89,18 @@
 void
 HwmpProactiveRegressionTest::InstallApplications ()
 {
-  UdpEchoServerHelper echoServer (9);
-  ApplicationContainer serverApps = echoServer.Install (m_nodes->Get (0));
-  serverApps.Start (Seconds (0.0));
-  serverApps.Stop (m_time);
-  UdpEchoClientHelper echoClient (m_interfaces.GetAddress (0), 9);
-  echoClient.SetAttribute ("MaxPackets", UintegerValue (300));
-  echoClient.SetAttribute ("Interval", TimeValue (Seconds (0.5)));
-  echoClient.SetAttribute ("PacketSize", UintegerValue (100));
-  ApplicationContainer clientApps = echoClient.Install (m_nodes->Get (4));
-  clientApps.Start (Seconds (2.5));
-  clientApps.Stop (m_time);
+  // client socket
+  m_clientSocket = Socket::CreateSocket (m_nodes->Get (4), TypeId::LookupByName ("ns3::UdpSocketFactory"));
+  m_clientSocket->Bind ();
+  m_clientSocket->Connect (InetSocketAddress (m_interfaces.GetAddress (0), 9));
+  m_clientSocket->SetRecvCallback (MakeCallback (&HwmpProactiveRegressionTest::HandleReadClient, this));
+  Simulator::ScheduleWithContext (m_clientSocket->GetNode ()->GetId (), Seconds (2.5),
+                                  &HwmpProactiveRegressionTest::SendData, this, m_clientSocket);
+
+  // server socket
+  m_serverSocket = Socket::CreateSocket (m_nodes->Get (0), TypeId::LookupByName ("ns3::UdpSocketFactory"));
+  m_serverSocket->Bind (InetSocketAddress (Ipv4Address::GetAny (), 9));
+  m_serverSocket->SetRecvCallback (MakeCallback (&HwmpProactiveRegressionTest::HandleReadServer, this));
 }
 void
 HwmpProactiveRegressionTest::CreateDevices ()
@@ -145,3 +146,38 @@
     }
 }
 
+void
+HwmpProactiveRegressionTest::SendData (Ptr<Socket> socket)
+{
+  if ((Simulator::Now () < m_time) && (m_sentPktsCounter < 300))
+    {
+      socket->Send (Create<Packet> (100));
+      m_sentPktsCounter ++;
+      Simulator::ScheduleWithContext (socket->GetNode ()->GetId (), Seconds (0.5),
+                                      &HwmpProactiveRegressionTest::SendData, this, socket);
+    }
+}
+
+void
+HwmpProactiveRegressionTest::HandleReadServer (Ptr<Socket> socket)
+{
+  Ptr<Packet> packet;
+  Address from;
+  while ((packet = socket->RecvFrom (from)))
+    {
+      packet->RemoveAllPacketTags ();
+      packet->RemoveAllByteTags ();
+
+      socket->SendTo (packet, 0, from);
+    }
+}
+
+void
+HwmpProactiveRegressionTest::HandleReadClient (Ptr<Socket> socket)
+{
+  Ptr<Packet> packet;
+  Address from;
+  while ((packet = socket->RecvFrom (from)))
+    {
+    }
+}
diff -Naur ns-3.23/src/mesh/test/dot11s/hwmp-proactive-regression.h ns-3.24/src/mesh/test/dot11s/hwmp-proactive-regression.h
--- ns-3.23/src/mesh/test/dot11s/hwmp-proactive-regression.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/test/dot11s/hwmp-proactive-regression.h	2015-09-15 11:18:44.000000000 -0700
@@ -74,5 +74,37 @@
   void CreateDevices ();
   void InstallApplications ();
   void ResetPosition ();
+
+  /// Server-side socket
+  Ptr<Socket> m_serverSocket;
+  /// Client-side socket
+  Ptr<Socket> m_clientSocket;
+
+  // sent packets counter
+  uint32_t m_sentPktsCounter;
+
+  /**
+   * Send data
+   * \param socket the sending socket
+   */
+  void SendData (Ptr<Socket> socket);
+
+  /**
+   * \brief Handle a packet reception.
+   *
+   * This function is called by lower layers.
+   *
+   * \param socket the socket the packet was received to.
+   */
+  void HandleReadServer (Ptr<Socket> socket);
+
+  /**
+   * \brief Handle a packet reception.
+   *
+   * This function is called by lower layers.
+   *
+   * \param socket the socket the packet was received to.
+   */
+  void HandleReadClient (Ptr<Socket> socket);
 };
 
diff -Naur ns-3.23/src/mesh/test/dot11s/hwmp-proactive-regression-test-0-1.pcap ns-3.24/src/mesh/test/dot11s/hwmp-proactive-regression-test-0-1.pcap
--- ns-3.23/src/mesh/test/dot11s/hwmp-proactive-regression-test-0-1.pcap	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/test/dot11s/hwmp-proactive-regression-test-0-1.pcap	2015-09-15 11:18:44.000000000 -0700
@@ -2,54 +2,54 @@
  7èOèrmesh        jð A   A   €€  ÿÿÿÿÿÿ          0 jð     è    Œ$0H`lx bèrmesh       Á  F   F   €€  ÿÿÿÿÿÿ          ` Ó     è    Œ$0H`lx
  Øèðèrmesh       JO A   A   €€  ÿÿÿÿÿÿ          @ Š‘     è    Œ$0H`lx èrmesh       +b F   F   €€  ÿÿÿÿÿÿ          p ó£     è    Œ$0H`lx
  zè‘èrmesh       jð A   A   €€  ÿÿÿÿÿÿ          P ª2     è    Œ$0H`lx ¤èrmesh       ¬À  ?   ?   Ð€<                € ƒ           ˆ                     zÁ  F   F   €€  ÿÿÿÿÿÿ          � E     è    Œ$0H`lx
- è3èrmesh       Ã  E   E   Ð€  ÿÿÿÿÿÿ            ‚%            ˆ  –   ÿÿÿÿÿÿ           *Ã  ?   ?   Ð€<                ` ƒ           ˆ                     ÓÃ        Ô€              bÄ  ?   ?   Ð€<                ° ƒ         ˆ  –                  VÅ  ?   ?   Ðˆ<                ° ƒ         ˆ  –                  áÅ  E   E   Ð€  ÿÿÿÿÿÿ          p ‚%            ˆ  ,  ÿÿÿÿÿÿ           JO A   A   €€  ÿÿÿÿÿÿ          € ÊÓ     è    Œ$0H`lx Eèrmesh       [Ç L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ          ªª           
+ è3èrmesh       Ã  E   E   Ð€  ÿÿÿÿÿÿ            ‚%            ˆ  –   ÿÿÿÿÿÿ           *Ã  ?   ?   Ð€<                ` ƒ           ˆ                     ÓÃ        Ô€              bÄ  ?   ?   Ð€<                ° ƒ         ˆ  –                  VÅ  ?   ?   Ðˆ<                ° ƒ         ˆ  –                  áÅ  E   E   Ð€  ÿÿÿÿÿÿ          p ‚%            ˆ  ,  ÿÿÿÿÿÿ           JO A   A   €€  ÿÿÿÿÿÿ          € ÊÓ     è    Œ$0H`lx Eèrmesh       [Ç N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ           ªª           
 ÿÿÿÿÿÿ
-       †Ç L   L   ƒ<                �            ªª           
+       †Ç N   N   ˆƒ<                              ªª           
      
-       BÈ       Ô€              mÈ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ           ªª           
+       BÈ       Ô€              mÈ N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ�           ªª           
 ÿÿÿÿÿÿ
-       ØÉ L   L   ƒ<                Ð           ªª           
+       ØÉ N   N   ˆƒ<                             ªª           
      
-       ¬Ð       Ô€              ÛÑ °   °   ƒ<                à           ªª    E  €    @  
+       ¸Ð       Ô€              ëÑ ²   ²   ˆƒ<                             ªª    E  €    @  
 
-À 	 l                                                                                                             ëÑ       Ô€              ñ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ°           ªª           
+À 	 l                                                                                                             ûÑ       Ô€              +ñ N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ             ªª           
 ÿÿÿÿÿÿ
-       Gò L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿð          ªª           
+       Wò N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ           ªª           
 ÿÿÿÿÿÿ
-       Y÷       Ô€              ø L   L   ƒ<                           ªª           
+       i÷       Ô€              ø N   N   ˆƒ<                            ªª           
      
-       ø       Ô€              kø °   °   ƒ<                À            ªª    E  €    @  
+       $ø       Ô€              {ø ²   ²   ˆƒ<                             ªª    E  €    @  
 
- 	À l                                                                                                             ¬ù       Ô€              íú °   °   ƒ<                          ªª    E  €    @  
+ 	À l                                                                                                             Àù       Ô€              û ²   ²   ˆƒ<                            ªª    E  €    @  
 
- 	À l                                                                                                             +b F   F   €€  ÿÿÿÿÿÿ           3æ&     è    Œ$0H`lx
- ¼&èÔèrmesh       jð A   A   €€  ÿÿÿÿÿÿ          Ð êt'     è    Œ$0H`lx æ&èrmesh               Ô€              F  °   °   ƒ<                0          ªª    E  €   @  
+ 	À l                                                                                                             +b F   F   €€  ÿÿÿÿÿÿ          à 3æ&     è    Œ$0H`lx
+ ¼&èÔèrmesh       jð A   A   €€  ÿÿÿÿÿÿ          ° êt'     è    Œ$0H`lx æ&èrmesh       #        Ô€              V  ²   ²   ˆƒ<                             ªª    E  €   @  
 
-À 	 l                                                                                                             V        Ô€              ­  °   °   ƒ<                à            ªª    E  €   @  
+À 	 l                                                                                                             f        Ô€              ½  ²   ²   ˆƒ<                              ªª    E  €   @  
 
- 	À l                                                                                                             í        Ô€              [  °   °   ƒ<                @          ªª    E  €   @  
+ 	À l                                                                                                                     Ô€              s  ²   ²   ˆƒ<                             ªª    E  €   @  
 
- 	À l                                                                                                             Á  F   F   €€  ÿÿÿÿÿÿ          PS‡.     è    Œ$0H`lx
- ].èu'èrmesh       JO A   A   €€  ÿÿÿÿÿÿ          ð 
-/     è    Œ$0H`lx ‡.èrmesh       7¥       Ô€              f¦ °   °   ƒ<                `          ªª    E  €   @  
+ 	À l                                                                                                             Á  F   F   €€  ÿÿÿÿÿÿ          ð S‡.     è    Œ$0H`lx
+ ].èu'èrmesh       JO A   A   €€  ÿÿÿÿÿÿ          À 
+/     è    Œ$0H`lx ‡.èrmesh       C¥       Ô€              v¦ ²   ²   ˆƒ<                0            ªª    E  €   @  
 
-À 	 l                                                                                                             v¦       Ô€              Í¦ °   °   ƒ<                            ªª    E  €   @  
+À 	 l                                                                                                             †¦       Ô€              Ý¦ ²   ²   ˆƒ<                0             ªª    E  €   @  
 
- 	À l                                                                                                             ¨       Ô€              {© °   °   ƒ<                p          ªª    E  €   @  
+ 	À l                                                                                                             !¨       Ô€              “© ²   ²   ˆƒ<                0            ªª    E  €   @  
 
- 	À l                                                                                                             +b F   F   €€  ÿÿÿÿÿÿ          €s(6     è    Œ$0H`lx
- þ5è/èrmesh       jð A   A   €€  ÿÿÿÿÿÿ          *·6     è    Œ$0H`lx (6èrmesh               Ô€              F  °   °   ƒ<                �          ªª    E  €   @  
+ 	À l                                                                                                             +b F   F   €€  ÿÿÿÿÿÿ           s(6     è    Œ$0H`lx
+ þ5è/èrmesh       jð A   A   €€  ÿÿÿÿÿÿ          Ð *·6     è    Œ$0H`lx (6èrmesh       #        Ô€              V  ²   ²   ˆƒ<                @            ªª    E  €   @  
 
-À 	 l                                                                                                             V        Ô€              ­  °   °   ƒ<                            ªª    E  €   @  
+À 	 l                                                                                                             f        Ô€              ½  ²   ²   ˆƒ<                @             ªª    E  €   @  
 
- 	À l                                                                                                             í        Ô€              š  °   °   ƒ<                           ªª    E  €   @  
+ 	À l                                                                                                                     Ô€              ²  ²   ²   ˆƒ<                @            ªª    E  €   @  
 
- 	À l                                                                                                             Á  F   F   €€  ÿÿÿÿÿÿ          °“É=     è    Œ$0H`lx
- Ÿ=è·6èrmesh       JO A   A   €€  ÿÿÿÿÿÿ          0JX>     è    Œ$0H`lx Ê=èrmesh       ,| ?   ?   Ð€<                Àƒ           ˆ                     } ?   ?   Ðˆ<                Àƒ           ˆ                     ~ E   E   Ð€  ÿÿÿÿÿÿ          Ð‚%            ˆ  –   ÿÿÿÿÿÿ           0~ ?   ?   Ð€<                @ƒ           ˆ                     Ù~       Ô€              ³ ?   ?   Ð€<                àƒ         ˆ  –                  >€ E   E   Ð€  ÿÿÿÿÿÿ          P‚%            ˆ  ,  ÿÿÿÿÿÿ           7¥       Ô€              f¦ °   °   ƒ<                ð          ªª    E  €   @  
+ 	À l                                                                                                             Á  F   F   €€  ÿÿÿÿÿÿ          “É=     è    Œ$0H`lx
+ Ÿ=è·6èrmesh       JO A   A   €€  ÿÿÿÿÿÿ          à JX>     è    Œ$0H`lx Ê=èrmesh       ,| ?   ?   Ð€<                 ƒ           ˆ                     } ?   ?   Ðˆ<                 ƒ           ˆ                     ~ E   E   Ð€  ÿÿÿÿÿÿ          0‚%            ˆ  –   ÿÿÿÿÿÿ           0~ ?   ?   Ð€<                ð ƒ           ˆ                     Ù~       Ô€              ³ ?   ?   Ð€<                @ƒ         ˆ  –                  >€ E   E   Ð€  ÿÿÿÿÿÿ           ‚%            ˆ  ,  ÿÿÿÿÿÿ           C¥       Ô€              v¦ ²   ²   ˆƒ<                P            ªª    E  €   @  
 
-À 	 l                                                                                                             v¦       Ô€              Í¦ °   °   ƒ<                `           ªª    E  €   @  
+À 	 l                                                                                                             †¦       Ô€              Ý¦ ²   ²   ˆƒ<                P             ªª    E  €   @  
 
- 	À l                                                                                                             ¨       Ô€              ¨© °   °   ƒ<                           ªª    E  €   @  
+ 	À l                                                                                                             !¨       Ô€              À© ²   ²   ˆƒ<                P            ªª    E  €   @  
 
- 	À l                                                                                                             +b F   F   €€  ÿÿÿÿÿÿ          ³jE     è    Œ$0H`lx
- @EèX>èrmesh       jð A   A   €€  ÿÿÿÿÿÿ          pjùE     è    Œ$0H`lx kEèrmesh    
\ No newline at end of file
+ 	À l                                                                                                             +b F   F   €€  ÿÿÿÿÿÿ          P³jE     è    Œ$0H`lx
+ @EèX>èrmesh       jð A   A   €€  ÿÿÿÿÿÿ          jùE     è    Œ$0H`lx kEèrmesh    
\ No newline at end of file
diff -Naur ns-3.23/src/mesh/test/dot11s/hwmp-proactive-regression-test-1-1.pcap ns-3.24/src/mesh/test/dot11s/hwmp-proactive-regression-test-1-1.pcap
--- ns-3.23/src/mesh/test/dot11s/hwmp-proactive-regression-test-1-1.pcap	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/test/dot11s/hwmp-proactive-regression-test-1-1.pcap	2015-09-15 11:18:44.000000000 -0700
@@ -6,90 +6,88 @@
  èèrmesh       ³a F   F   €€  ÿÿÿÿÿÿ          p ó£     è    Œ$0H`lx
  zè‘èrmesh       Ûð A   A   €€  ÿÿÿÿÿÿ          P ª2     è    Œ$0H`lx ¤èrmesh        –  F   F   €€  ÿÿÿÿÿÿ          � ¨     è    Œ$0H`lx
  ©è¤èrmesh       À  E   E   Ð€  ÿÿÿÿÿÿ            ‚%              ˆ      ÿÿÿÿÿÿ           @À  ?   ?   Ð€<                € ƒ           ˆ                     éÀ        Ô€              Á  F   F   €€  ÿÿÿÿÿÿ          � E     è    Œ$0H`lx
- è3èrmesh       EÂ        Ô€              ”Â  E   E   Ð€  ÿÿÿÿÿÿ            ‚%            ˆ  –   ÿÿÿÿÿÿ           —Ã  ?   ?   Ð€<                ` ƒ           ˆ                     §Ã        Ô€              õÃ  ?   ?   Ð€<                ° ƒ         ˆ  –                  žÄ        Ô€              éÄ  ?   ?   Ðˆ<                ° ƒ         ˆ  –                  ’Å        Ô€              VÆ  E   E   Ð€  ÿÿÿÿÿÿ          p ‚%            ˆ  ,  ÿÿÿÿÿÿ           »O A   A   €€  ÿÿÿÿÿÿ          € ÊÓ     è    Œ$0H`lx Eèrmesh       ¯Æ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ°          ªª           
+ è3èrmesh       EÂ        Ô€              ”Â  E   E   Ð€  ÿÿÿÿÿÿ            ‚%            ˆ  –   ÿÿÿÿÿÿ           —Ã  ?   ?   Ð€<                ` ƒ           ˆ                     §Ã        Ô€              õÃ  ?   ?   Ð€<                ° ƒ         ˆ  –                  žÄ        Ô€              éÄ  ?   ?   Ðˆ<                ° ƒ         ˆ  –                  ’Å        Ô€              VÆ  E   E   Ð€  ÿÿÿÿÿÿ          p ‚%            ˆ  ,  ÿÿÿÿÿÿ           »O A   A   €€  ÿÿÿÿÿÿ          € ÊÓ     è    Œ$0H`lx Eèrmesh       ¯Æ N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ°           ªª           
 ÿÿÿÿÿÿ
-       ÚÆ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ          ªª           
+       ÚÆ N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ           ªª           
 ÿÿÿÿÿÿ
-       È L   L   ƒ<                �            ªª           
+       È N   N   ˆƒ<                              ªª           
      
-       È       Ô€              îÈ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ           ªª           
+       È       Ô€              îÈ N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ�           ªª           
 ÿÿÿÿÿÿ
-       XÉ L   L   ƒ<                Ð           ªª           
+       XÉ N   N   ˆƒ<                             ªª           
      
-       Ê       Ô€              õÊ L   L   ƒ<                À           ªª           
+       Ê       Ô€              õÊ N   N   ˆƒ<                             ªª           
      
-       /Ï       Ô€              pÐ °   °   ƒ<                Ð           ªª    E  €    @  
+       7Ï       Ô€              |Ð ²   ²   ˆƒ<                             ªª    E  €    @  
 
-À 	 l                                                                                                             €Ð       Ô€              ×Ð °   °   ƒ<                à           ªª    E  €    @  
+À 	 l                                                                                                             ŒÐ       Ô€              ãÐ ²   ²   ˆƒ<                             ªª    E  €    @  
 
-À 	 l                                                                                                             Ò       Ô€              ›ñ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ°           ªª           
+À 	 l                                                                                                             'Ò       Ô€              «ñ N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ             ªª           
 ÿÿÿÿÿÿ
-       Æñ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿð          ªª           
+       Öñ N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ           ªª           
 ÿÿÿÿÿÿ
-       òò L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà          ªª           
+       ó N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ           ªª           
 ÿÿÿÿÿÿ
-       rö       Ô€              ÷ L   L   ƒ<                ð           ªª           
+       ‚ö       Ô€              -÷ N   N   ˆƒ<                            ªª           
      
-       -÷       Ô€              „÷ L   L   ƒ<                           ªª           
+       =÷       Ô€              ”÷ N   N   ˆƒ<                            ªª           
      
-       Aø       Ô€              pù °   °   ƒ<                À            ªª    E  €    @  
+       Qø       Ô€              „ù ²   ²   ˆƒ<                             ªª    E  €    @  
 
- 	À l                                                                                                             €ù       Ô€              éù °   °   ƒ<                          ªª    E  €    @  
+ 	À l                                                                                                             ”ù       Ô€              ýù ²   ²   ˆƒ<                            ªª    E  €    @  
 
- 	À l                                                                                                             )û       Ô€              »ü °   °   ƒ<                           ªª    E  €    @  
+ 	À l                                                                                                             Aû       Ô€              ×ü ²   ²   ˆƒ<                            ªª    E  €    @  
 
- 	À l                                                                                                             À7 F   F   €€  ÿÿÿÿÿÿ          È»&     è    Œ$0H`lx
- J&èEèrmesh       ³a F   F   €€  ÿÿÿÿÿÿ           3æ&     è    Œ$0H`lx
- ¼&èÔèrmesh       Ûð A   A   €€  ÿÿÿÿÿÿ          Ð êt'     è    Œ$0H`lx æ&èrmesh       «        Ô€              Ú  °   °   ƒ<                           ªª    E  €   @  
+ 	À l                                                                                                             À7 F   F   €€  ÿÿÿÿÿÿ          Ð È»&     è    Œ$0H`lx
+ J&èEèrmesh       ³a F   F   €€  ÿÿÿÿÿÿ          à 3æ&     è    Œ$0H`lx
+ ¼&èÔèrmesh       Ûð A   A   €€  ÿÿÿÿÿÿ          ° êt'     è    Œ$0H`lx æ&èrmesh       ³        Ô€              æ  ²   ²   ˆƒ<                             ªª    E  €   @  
 
-À 	 l                                                                                                             ê        Ô€              A  °   °   ƒ<                0          ªª    E  €   @  
+À 	 l                                                                                                             ö        Ô€              M  ²   ²   ˆƒ<                             ªª    E  €   @  
 
-À 	 l                                                                                                             ‚        Ô€              ±  °   °   ƒ<                à            ªª    E  €   @  
+À 	 l                                                                                                             ’        Ô€              Å  ²   ²   ˆƒ<                              ªª    E  €   @  
 
- 	À l                                                                                                             Á        Ô€              W  °   °   ƒ<                @          ªª    E  €   @  
+ 	À l                                                                                                             Õ        Ô€              k  ²   ²   ˆƒ<                             ªª    E  €   @  
 
- 	À l                                                                                                             ˜        Ô€              Ç	  °   °   ƒ<                0          ªª    E  €   @  
+ 	À l                                                                                                             °        Ô€              ã	  ²   ²   ˆƒ<                             ªª    E  €   @  
 
- 	À l                                                                                                              –  F   F   €€  ÿÿÿÿÿÿ          @è\.     è    Œ$0H`lx
- ë-èæ&èrmesh       “À  F   F   €€  ÿÿÿÿÿÿ          PS‡.     è    Œ$0H`lx
- ].èu'èrmesh       »O A   A   €€  ÿÿÿÿÿÿ          ð 
-/     è    Œ$0H`lx ‡.èrmesh       Ë£       Ô€              ú¤ °   °   ƒ<                P          ªª    E  €   @  
+ 	À l                                                                                                              –  F   F   €€  ÿÿÿÿÿÿ          à è\.     è    Œ$0H`lx
+ ë-èæ&èrmesh       “À  F   F   €€  ÿÿÿÿÿÿ          ð S‡.     è    Œ$0H`lx
+ ].èu'èrmesh       »O A   A   €€  ÿÿÿÿÿÿ          À 
+/     è    Œ$0H`lx ‡.èrmesh       Ó£       Ô€              ¥ ²   ²   ˆƒ<                0            ªª    E  €   @  
 
-À 	 l                                                                                                             
-¥       Ô€              a¥ °   °   ƒ<                `          ªª    E  €   @  
+À 	 l                                                                                                             ¥       Ô€              m¥ ²   ²   ˆƒ<                0            ªª    E  €   @  
 
-À 	 l                                                                                                             ¢¦       Ô€              Ñ§ °   °   ƒ<                            ªª    E  €   @  
+À 	 l                                                                                                             ²¦       Ô€              å§ ²   ²   ˆƒ<                0             ªª    E  €   @  
 
- 	À l                                                                                                             á§       Ô€              w¨ °   °   ƒ<                p          ªª    E  €   @  
+ 	À l                                                                                                             õ§       Ô€              ‹¨ ²   ²   ˆƒ<                0            ªª    E  €   @  
 
- 	À l                                                                                                             ¸©       Ô€              &« °   °   ƒ<                `          ªª    E  €   @  
+ 	À l                                                                                                             Ð©       Ô€              B« ²   ²   ˆƒ<                0            ªª    E  €   @  
 
- 	À l                                                                                                             À7 F   F   €€  ÿÿÿÿÿÿ          pþ5     è    Œ$0H`lx
- Œ5è‡.èrmesh       ³a F   F   €€  ÿÿÿÿÿÿ          €s(6     è    Œ$0H`lx
- þ5è/èrmesh       Ûð A   A   €€  ÿÿÿÿÿÿ          *·6     è    Œ$0H`lx (6èrmesh       «        Ô€              Ú  °   °   ƒ<                €          ªª    E  €   @  
+ 	À l                                                                                                             À7 F   F   €€  ÿÿÿÿÿÿ          ð þ5     è    Œ$0H`lx
+ Œ5è‡.èrmesh       ³a F   F   €€  ÿÿÿÿÿÿ           s(6     è    Œ$0H`lx
+ þ5è/èrmesh       Ûð A   A   €€  ÿÿÿÿÿÿ          Ð *·6     è    Œ$0H`lx (6èrmesh       ³        Ô€              æ  ²   ²   ˆƒ<                @            ªª    E  €   @  
 
-À 	 l                                                                                                             ê        Ô€              A  °   °   ƒ<                �          ªª    E  €   @  
+À 	 l                                                                                                             ö        Ô€              M  ²   ²   ˆƒ<                @            ªª    E  €   @  
 
-À 	 l                                                                                                             ‚        Ô€              ±  °   °   ƒ<                            ªª    E  €   @  
+À 	 l                                                                                                             ’        Ô€              Å  ²   ²   ˆƒ<                @             ªª    E  €   @  
 
- 	À l                                                                                                             Á        Ô€              –  °   °   ƒ<                           ªª    E  €   @  
+ 	À l                                                                                                             Õ        Ô€              ª  ²   ²   ˆƒ<                @            ªª    E  €   @  
 
- 	À l                                                                                                             ×        Ô€              
-  °   °   ƒ<                �          ªª    E  €   @  
+ 	À l                                                                                                             ï        Ô€              +
+  ²   ²   ˆƒ<                @            ªª    E  €   @  
 
- 	À l                                                                                                              –  F   F   €€  ÿÿÿÿÿÿ           (Ÿ=     è    Œ$0H`lx
- -=è(6èrmesh       “À  F   F   €€  ÿÿÿÿÿÿ          °“É=     è    Œ$0H`lx
- Ÿ=è·6èrmesh       »O A   A   €€  ÿÿÿÿÿÿ          0JX>     è    Œ$0H`lx Ê=èrmesh       ž{ E   E   Ð€  ÿÿÿÿÿÿ          °‚%              ˆ      ÿÿÿÿÿÿ           À{ ?   ?   Ð€<                Àƒ           ˆ                     ¢| ?   ?   Ðˆ<                Àƒ           ˆ                     K}       Ô€              š} E   E   Ð€  ÿÿÿÿÿÿ          Ð‚%            ˆ  –   ÿÿÿÿÿÿ           œ~ ?   ?   Ð€<                @ƒ           ˆ                     ¬~       Ô€              $       Ô€              F ?   ?   Ð€<                àƒ         ˆ  –                  ï       Ô€              ³€ E   E   Ð€  ÿÿÿÿÿÿ          P‚%            ˆ  ,  ÿÿÿÿÿÿ           Å‚       Ô€              Ë£       Ô€              ú¤ °   °   ƒ<                À          ªª    E  €   @  
+ 	À l                                                                                                              –  F   F   €€  ÿÿÿÿÿÿ           (Ÿ=     è    Œ$0H`lx
+ -=è(6èrmesh       “À  F   F   €€  ÿÿÿÿÿÿ          “É=     è    Œ$0H`lx
+ Ÿ=è·6èrmesh       »O A   A   €€  ÿÿÿÿÿÿ          à JX>     è    Œ$0H`lx Ê=èrmesh       ž{ E   E   Ð€  ÿÿÿÿÿÿ          ‚%              ˆ      ÿÿÿÿÿÿ           À{ ?   ?   Ð€<                 ƒ           ˆ                     ¢| ?   ?   Ðˆ<                 ƒ           ˆ                     K}       Ô€              š} E   E   Ð€  ÿÿÿÿÿÿ          0‚%            ˆ  –   ÿÿÿÿÿÿ           œ~ ?   ?   Ð€<                ð ƒ           ˆ                     ¬~       Ô€              $       Ô€              F ?   ?   Ð€<                @ƒ         ˆ  –                  ï       Ô€              ³€ E   E   Ð€  ÿÿÿÿÿÿ           ‚%            ˆ  ,  ÿÿÿÿÿÿ           Å‚       Ô€              Ó£       Ô€              ¥ ²   ²   ˆƒ<                P            ªª    E  €   @  
 
-À 	 l                                                                                                             
-¥       Ô€              a¥ °   °   ƒ<                ð          ªª    E  €   @  
+À 	 l                                                                                                             ¥       Ô€              m¥ ²   ²   ˆƒ<                P            ªª    E  €   @  
 
-À 	 l                                                                                                             ¢¦       Ô€              Ñ§ °   °   ƒ<                `           ªª    E  €   @  
+À 	 l                                                                                                             ²¦       Ô€              å§ ²   ²   ˆƒ<                P             ªª    E  €   @  
 
- 	À l                                                                                                             á§       Ô€              ¤¨ °   °   ƒ<                           ªª    E  €   @  
+ 	À l                                                                                                             õ§       Ô€              ¸¨ ²   ²   ˆƒ<                P            ªª    E  €   @  
 
- 	À l                                                                                                             å©       Ô€              « °   °   ƒ<                Ð          ªª    E  €   @  
+ 	À l                                                                                                             ý©       Ô€              K« ²   ²   ˆƒ<                P            ªª    E  €   @  
 
- 	À l                                                                                                             À7 F   F   €€  ÿÿÿÿÿÿ          àH@E     è    Œ$0H`lx
- ÎDèÊ=èrmesh       ³a F   F   €€  ÿÿÿÿÿÿ          ³jE     è    Œ$0H`lx
- @EèX>èrmesh       Ûð A   A   €€  ÿÿÿÿÿÿ          pjùE     è    Œ$0H`lx kEèrmesh    
\ No newline at end of file
+ 	À l                                                                                                             À7 F   F   €€  ÿÿÿÿÿÿ           H@E     è    Œ$0H`lx
+ ÎDèÊ=èrmesh       ³a F   F   €€  ÿÿÿÿÿÿ          P³jE     è    Œ$0H`lx
+ @EèX>èrmesh       Ûð A   A   €€  ÿÿÿÿÿÿ          jùE     è    Œ$0H`lx kEèrmesh    
\ No newline at end of file
diff -Naur ns-3.23/src/mesh/test/dot11s/hwmp-proactive-regression-test-2-1.pcap ns-3.24/src/mesh/test/dot11s/hwmp-proactive-regression-test-2-1.pcap
--- ns-3.23/src/mesh/test/dot11s/hwmp-proactive-regression-test-2-1.pcap	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/test/dot11s/hwmp-proactive-regression-test-2-1.pcap	2015-09-15 11:18:44.000000000 -0700
@@ -10,105 +10,106 @@
  zè‘èrmesh       …$  F   F   €€  ÿÿÿÿÿÿ          € �¨     è    Œ$0H`lx
  Œèzèrmesh       (–  F   F   €€  ÿÿÿÿÿÿ          � ¨     è    Œ$0H`lx
  ©è¤èrmesh       ª¿  E   E   Ð€  ÿÿÿÿÿÿ            ‚%              ˆ      ÿÿÿÿÿÿ           ¬À  ?   ?   Ð€<                € ƒ           ˆ                     ¼À        Ô€              zÁ  F   F   €€  ÿÿÿÿÿÿ          � E     è    Œ$0H`lx
- è3èrmesh       	Â  ?   ?   Ðˆ<                � ƒ           ˆ                     Â        Ô€              ÓÃ        Ô€              bÄ  ?   ?   Ð€<                ° ƒ         ˆ  –                  rÄ        Ô€              VÅ  ?   ?   Ðˆ<                ° ƒ         ˆ  –                  fÅ        Ô€              sÅ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ          ªª           
+ è3èrmesh       	Â  ?   ?   Ðˆ<                � ƒ           ˆ                     Â        Ô€              ÓÃ        Ô€              bÄ  ?   ?   Ð€<                ° ƒ         ˆ  –                  rÄ        Ô€              VÅ  ?   ?   Ðˆ<                ° ƒ         ˆ  –                  fÅ        Ô€              sÅ N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ           ªª           
 ÿÿÿÿÿÿ
        Æ F   F   €€  ÿÿÿÿÿÿ          Ð ­I&     è    Œ$0H`lx
- -&èèrmesh       /Æ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ°          ªª           
+ -&èèrmesh       /Æ N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ°           ªª           
 ÿÿÿÿÿÿ
-       [Ç L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ          ªª           
+       [Ç N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ           ªª           
 ÿÿÿÿÿÿ
-       BÈ       Ô€              ØÉ L   L   ƒ<                Ð           ªª           
+       BÈ       Ô€              ØÉ N   N   ˆƒ<                             ªª           
      
-       èÉ       Ô€              uÊ L   L   ƒ<                À           ªª           
+       èÉ       Ô€              uÊ N   N   ˆƒ<                             ªª           
      
-       2Ë       Ô€              ÝË L   L   ƒ<                à           ªª           
+       2Ë       Ô€              ÝË N   N   ˆƒ<                             ªª           
      
-       „Í       Ô€              òÎ °   °   ƒ<                ð           ªª    E  €    @  
+       ˆÍ       Ô€              úÎ ²   ²   ˆƒ<                             ªª    E  €    @  
 
-À 	 l                                                                                                             Ï       Ô€              kÏ °   °   ƒ<                Ð           ªª    E  €    @  
+À 	 l                                                                                                             
+Ï       Ô€              sÏ ²   ²   ˆƒ<                             ªª    E  €    @  
 
-À 	 l                                                                                                             ¬Ð       Ô€              ÛÑ °   °   ƒ<                à           ªª    E  €    @  
+À 	 l                                                                                                             ¸Ð       Ô€              ëÑ ²   ²   ˆƒ<                             ªª    E  €    @  
 
-À 	 l                                                                                                             Gò L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿð          ªª           
+À 	 l                                                                                                             Wò N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ           ªª           
 ÿÿÿÿÿÿ
-       rò L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà          ªª           
+       ‚ò N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ           ªª           
 ÿÿÿÿÿÿ
-       �ó L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ          ªª           
+       ­ó N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà           ªª           
 ÿÿÿÿÿÿ
-       …ô       Ô€              6ö L   L   ƒ<                          ªª           
+       •ô       Ô€              Fö N   N   ˆƒ<                            ªª           
      
-       Fö       Ô€              �ö L   L   ƒ<                ð           ªª           
+       Vö       Ô€              ­ö N   N   ˆƒ<                            ªª           
      
-       Y÷       Ô€              ø L   L   ƒ<                           ªª           
+       i÷       Ô€              ø N   N   ˆƒ<                            ªª           
      
-       ¬ù       Ô€              íú °   °   ƒ<                          ªª    E  €    @  
+       Àù       Ô€              û ²   ²   ˆƒ<                            ªª    E  €    @  
 
- 	À l                                                                                                             ýú       Ô€              ·û °   °   ƒ<                           ªª    E  €    @  
+ 	À l                                                                                                             û       Ô€              Ïû ²   ²   ˆƒ<                            ªª    E  €    @  
 
- 	À l                                                                                                             øü       Ô€              'þ °   °   ƒ<                           ªª    E  €    @  
+ 	À l                                                                                                             ý       Ô€              Gþ ²   ²   ˆƒ<                            ªª    E  €    @  
 
- 	À l                                                                                                             H7 F   F   €€  ÿÿÿÿÿÿ          È»&     è    Œ$0H`lx
- J&èEèrmesh       +b F   F   €€  ÿÿÿÿÿÿ           3æ&     è    Œ$0H`lx
- ¼&èÔèrmesh       @        Ô€              o  °   °   ƒ<                0          ªª    E  €   @  
+ 	À l                                                                                                             H7 F   F   €€  ÿÿÿÿÿÿ          Ð È»&     è    Œ$0H`lx
+ J&èEèrmesh       +b F   F   €€  ÿÿÿÿÿÿ          à 3æ&     è    Œ$0H`lx
+ ¼&èÔèrmesh       D        Ô€              w  ²   ²   ˆƒ<                             ªª    E  €   @  
 
-À 	 l                                                                                                                     Ô€              Ö  °   °   ƒ<                           ªª    E  €   @  
+À 	 l                                                                                                             ‡        Ô€              Þ  ²   ²   ˆƒ<                             ªª    E  €   @  
 
-À 	 l                                                                                                                     Ô€              F  °   °   ƒ<                0          ªª    E  €   @  
+À 	 l                                                                                                             #        Ô€              V  ²   ²   ˆƒ<                             ªª    E  €   @  
 
-À 	 l                                                                                                             í        Ô€              [  °   °   ƒ<                @          ªª    E  €   @  
+À 	 l                                                                                                                     Ô€              s  ²   ²   ˆƒ<                             ªª    E  €   @  
 
- 	À l                                                                                                             k        Ô€              Â  °   °   ƒ<                0          ªª    E  €   @  
+ 	À l                                                                                                             ƒ        Ô€              Ú  ²   ²   ˆƒ<                             ªª    E  €   @  
 
- 	À l                                                                                                             
-        Ô€              2  °   °   ƒ<                @          ªª    E  €   @  
+ 	À l                                                                                                             
+        Ô€              R  ²   ²   ˆƒ<                             ªª    E  €   @  
 
- 	À l                                                                                                             …$  F   F   €€  ÿÿÿÿÿÿ          PÍê-     è    Œ$0H`lx
- Î-è¼&èrmesh       (–  F   F   €€  ÿÿÿÿÿÿ          @è\.     è    Œ$0H`lx
- ë-èæ&èrmesh       Á  F   F   €€  ÿÿÿÿÿÿ          PS‡.     è    Œ$0H`lx
- ].èu'èrmesh       `¢       Ô€              �£ °   °   ƒ<                `          ªª    E  €   @  
+ 	À l                                                                                                             …$  F   F   €€  ÿÿÿÿÿÿ          ð Íê-     è    Œ$0H`lx
+ Î-è¼&èrmesh       (–  F   F   €€  ÿÿÿÿÿÿ          à è\.     è    Œ$0H`lx
+ ë-èæ&èrmesh       Á  F   F   €€  ÿÿÿÿÿÿ          ð S‡.     è    Œ$0H`lx
+ ].èu'èrmesh       d¢       Ô€              —£ ²   ²   ˆƒ<                0            ªª    E  €   @  
 
-À 	 l                                                                                                             Ÿ£       Ô€              ö£ °   °   ƒ<                P          ªª    E  €   @  
+À 	 l                                                                                                             §£       Ô€              þ£ ²   ²   ˆƒ<                0            ªª    E  €   @  
 
-À 	 l                                                                                                             7¥       Ô€              f¦ °   °   ƒ<                `          ªª    E  €   @  
+À 	 l                                                                                                             C¥       Ô€              v¦ ²   ²   ˆƒ<                0            ªª    E  €   @  
 
-À 	 l                                                                                                             ¨       Ô€              {© °   °   ƒ<                p          ªª    E  €   @  
+À 	 l                                                                                                             !¨       Ô€              “© ²   ²   ˆƒ<                0            ªª    E  €   @  
 
- 	À l                                                                                                             ‹©       Ô€              !ª °   °   ƒ<                `          ªª    E  €   @  
+ 	À l                                                                                                             £©       Ô€              9ª ²   ²   ˆƒ<                0            ªª    E  €   @  
 
- 	À l                                                                                                             b«       Ô€              ‘¬ °   °   ƒ<                p          ªª    E  €   @  
+ 	À l                                                                                                             ~«       Ô€              ±¬ ²   ²   ˆƒ<                0            ªª    E  €   @  
 
- 	À l                                                                                                             ¥Å F   F   €€  ÿÿÿÿÿÿ          €í‹5     è    Œ$0H`lx
- o5è].èrmesh       H7 F   F   €€  ÿÿÿÿÿÿ          pþ5     è    Œ$0H`lx
- Œ5è‡.èrmesh       +b F   F   €€  ÿÿÿÿÿÿ          €s(6     è    Œ$0H`lx
- þ5è/èrmesh       @        Ô€              o  °   °   ƒ<                �          ªª    E  €   @  
+ 	À l                                                                                                             ¥Å F   F   €€  ÿÿÿÿÿÿ           í‹5     è    Œ$0H`lx
+ o5è].èrmesh       H7 F   F   €€  ÿÿÿÿÿÿ          ð þ5     è    Œ$0H`lx
+ Œ5è‡.èrmesh       +b F   F   €€  ÿÿÿÿÿÿ           s(6     è    Œ$0H`lx
+ þ5è/èrmesh       D        Ô€              w  ²   ²   ˆƒ<                @            ªª    E  €   @  
 
-À 	 l                                                                                                                     Ô€              Ö  °   °   ƒ<                €          ªª    E  €   @  
+À 	 l                                                                                                             ‡        Ô€              Þ  ²   ²   ˆƒ<                @            ªª    E  €   @  
 
-À 	 l                                                                                                                     Ô€              F  °   °   ƒ<                �          ªª    E  €   @  
+À 	 l                                                                                                             #        Ô€              V  ²   ²   ˆƒ<                @            ªª    E  €   @  
 
-À 	 l                                                                                                             í        Ô€              š  °   °   ƒ<                           ªª    E  €   @  
+À 	 l                                                                                                                     Ô€              ²  ²   ²   ˆƒ<                @            ªª    E  €   @  
 
- 	À l                                                                                                             ª        Ô€              	  °   °   ƒ<                �          ªª    E  €   @  
+ 	À l                                                                                                             Â        Ô€              "	  ²   ²   ˆƒ<                @            ªª    E  €   @  
 
- 	À l                                                                                                             B
-        Ô€              q  °   °   ƒ<                           ªª    E  €   @  
+ 	À l                                                                                                             g
+        Ô€              š  ²   ²   ˆƒ<                @            ªª    E  €   @  
 
- 	À l                                                                                                             …$  F   F   €€  ÿÿÿÿÿÿ          °-=     è    Œ$0H`lx
- =èþ5èrmesh       (–  F   F   €€  ÿÿÿÿÿÿ           (Ÿ=     è    Œ$0H`lx
- -=è(6èrmesh       Á  F   F   €€  ÿÿÿÿÿÿ          °“É=     è    Œ$0H`lx
- Ÿ=è·6èrmesh       *{ E   E   Ð€  ÿÿÿÿÿÿ          °‚%              ˆ      ÿÿÿÿÿÿ           } ?   ?   Ðˆ<                Àƒ           ˆ                     }       Ô€              ~ E   E   Ð€  ÿÿÿÿÿÿ          Ð‚%            ˆ  –   ÿÿÿÿÿÿ           è~ ?   ?   Ðˆ<                Àƒ           ˆ                     ø~       Ô€              ³ ?   ?   Ð€<                àƒ         ˆ  –                  Ã       Ô€              0� E   E   Ð€  ÿÿÿÿÿÿ          Ð‚%            ˆ      ÿÿÿÿÿÿ           û�       Ô€              ‰‚ ?   ?   Ð€<                àƒ         ˆ  –                  ™‚       Ô€              `¢       Ô€              �£ °   °   ƒ<                ð          ªª    E  €   @  
+ 	À l                                                                                                             …$  F   F   €€  ÿÿÿÿÿÿ          -=     è    Œ$0H`lx
+ =èþ5èrmesh       (–  F   F   €€  ÿÿÿÿÿÿ           (Ÿ=     è    Œ$0H`lx
+ -=è(6èrmesh       Á  F   F   €€  ÿÿÿÿÿÿ          “É=     è    Œ$0H`lx
+ Ÿ=è·6èrmesh       *{ E   E   Ð€  ÿÿÿÿÿÿ          ‚%              ˆ      ÿÿÿÿÿÿ           } ?   ?   Ðˆ<                 ƒ           ˆ                     }       Ô€              ~ E   E   Ð€  ÿÿÿÿÿÿ          0‚%            ˆ  –   ÿÿÿÿÿÿ           è~ ?   ?   Ðˆ<                 ƒ           ˆ                     ø~       Ô€              ³ ?   ?   Ð€<                @ƒ         ˆ  –                  Ã       Ô€              0� E   E   Ð€  ÿÿÿÿÿÿ          0‚%            ˆ      ÿÿÿÿÿÿ           û�       Ô€              ‰‚ ?   ?   Ð€<                @ƒ         ˆ  –                  ™‚       Ô€              d¢       Ô€              —£ ²   ²   ˆƒ<                P            ªª    E  €   @  
 
-À 	 l                                                                                                             Ÿ£       Ô€              ö£ °   °   ƒ<                À          ªª    E  €   @  
+À 	 l                                                                                                             §£       Ô€              þ£ ²   ²   ˆƒ<                P            ªª    E  €   @  
 
-À 	 l                                                                                                             7¥       Ô€              f¦ °   °   ƒ<                ð          ªª    E  €   @  
+À 	 l                                                                                                             C¥       Ô€              v¦ ²   ²   ˆƒ<                P            ªª    E  €   @  
 
-À 	 l                                                                                                             ¨       Ô€              ¨© °   °   ƒ<                           ªª    E  €   @  
+À 	 l                                                                                                             !¨       Ô€              À© ²   ²   ˆƒ<                P            ªª    E  €   @  
 
- 	À l                                                                                                             ¸©       Ô€              ª °   °   ƒ<                Ð          ªª    E  €   @  
+ 	À l                                                                                                             Ð©       Ô€              Bª ²   ²   ˆƒ<                P            ªª    E  €   @  
 
- 	À l                                                                                                             Y«       Ô€              ˆ¬ °   °   ƒ<                           ªª    E  €   @  
+ 	À l                                                                                                             ‡«       Ô€              º¬ ²   ²   ˆƒ<                P            ªª    E  €   @  
 
- 	À l                                                                                                             ¥Å F   F   €€  ÿÿÿÿÿÿ          -ÎD     è    Œ$0H`lx
- ±DèŸ=èrmesh       H7 F   F   €€  ÿÿÿÿÿÿ          àH@E     è    Œ$0H`lx
- ÎDèÊ=èrmesh       +b F   F   €€  ÿÿÿÿÿÿ          ³jE     è    Œ$0H`lx
+ 	À l                                                                                                             ¥Å F   F   €€  ÿÿÿÿÿÿ          P-ÎD     è    Œ$0H`lx
+ ±DèŸ=èrmesh       H7 F   F   €€  ÿÿÿÿÿÿ           H@E     è    Œ$0H`lx
+ ÎDèÊ=èrmesh       +b F   F   €€  ÿÿÿÿÿÿ          P³jE     è    Œ$0H`lx
  @EèX>èrmesh    
\ No newline at end of file
diff -Naur ns-3.23/src/mesh/test/dot11s/hwmp-proactive-regression-test-3-1.pcap ns-3.24/src/mesh/test/dot11s/hwmp-proactive-regression-test-3-1.pcap
--- ns-3.23/src/mesh/test/dot11s/hwmp-proactive-regression-test-3-1.pcap	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/test/dot11s/hwmp-proactive-regression-test-3-1.pcap	2015-09-15 11:18:44.000000000 -0700
@@ -6,90 +6,90 @@
  ëèØèrmesh       À7 F   F   €€  ÿÿÿÿÿÿ          € ˆy     è    Œ$0H`lx
  èèrmesh       Ü  A   A   €€  ÿÿÿÿÿÿ          ` ë‹     è    Œ$0H`lx èrmesh       $  F   F   €€  ÿÿÿÿÿÿ          € �¨     è    Œ$0H`lx
  Œèzèrmesh        –  F   F   €€  ÿÿÿÿÿÿ          � ¨     è    Œ$0H`lx
- ©è¤èrmesh       À  E   E   Ð€  ÿÿÿÿÿÿ            ‚%              ˆ      ÿÿÿÿÿÿ           @À  ?   ?   Ð€<                � ƒ           ˆ                     éÀ        Ô€              œÁ  ?   ?   Ðˆ<                � ƒ           ˆ                     EÂ        Ô€              ”Â  E   E   Ð€  ÿÿÿÿÿÿ            ‚%            ˆ  –   ÿÿÿÿÿÿ           —Ã  ?   ?   Ð€<                p ƒ           ˆ                     §Ã        Ô€              õÃ  ?   ?   Ð€<                ° ƒ         ˆ  –                  žÄ        Ô€              bÅ  E   E   Ð€  ÿÿÿÿÿÿ          € ‚%            ˆ  -  ÿÿÿÿÿÿ           ’Å        Ô€              ü¨ A   A   €€  ÿÿÿÿÿÿ          � -&     è    Œ$0H`lx ©èrmesh       ÈÄ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ            ªª           
+ ©è¤èrmesh       À  E   E   Ð€  ÿÿÿÿÿÿ            ‚%              ˆ      ÿÿÿÿÿÿ           @À  ?   ?   Ð€<                � ƒ           ˆ                     éÀ        Ô€              œÁ  ?   ?   Ðˆ<                � ƒ           ˆ                     EÂ        Ô€              ”Â  E   E   Ð€  ÿÿÿÿÿÿ            ‚%            ˆ  –   ÿÿÿÿÿÿ           —Ã  ?   ?   Ð€<                p ƒ           ˆ                     §Ã        Ô€              õÃ  ?   ?   Ð€<                ° ƒ         ˆ  –                  žÄ        Ô€              bÅ  E   E   Ð€  ÿÿÿÿÿÿ          € ‚%            ˆ  -  ÿÿÿÿÿÿ           ’Å        Ô€              ü¨ A   A   €€  ÿÿÿÿÿÿ          � -&     è    Œ$0H`lx ©èrmesh       ÈÄ N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ             ªª           
 ÿÿÿÿÿÿ
-       óÄ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ          ªª           
+       óÄ N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ           ªª           
 ÿÿÿÿÿÿ
        ŒÅ F   F   €€  ÿÿÿÿÿÿ          Ð ­I&     è    Œ$0H`lx
- -&èèrmesh       ¯Æ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ°          ªª           
+ -&èèrmesh       ¯Æ N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ°           ªª           
 ÿÿÿÿÿÿ
-       Ê       Ô€              õÊ L   L   ƒ<                À           ªª           
+       Ê       Ô€              õÊ N   N   ˆƒ<                             ªª           
      
-       Ë       Ô€              \Ë L   L   ƒ<                à           ªª           
+       Ë       Ô€              \Ë N   N   ˆƒ<                             ªª           
      
-       Ì       Ô€              HÍ °   °   ƒ<                °            ªª    E  €    @  
+       Ì       Ô€              LÍ ²   ²   ˆƒ<                              ªª    E  €    @  
 
-À 	 l                                                                                                             XÍ       Ô€              îÍ °   °   ƒ<                ð           ªª    E  €    @  
+À 	 l                                                                                                             \Í       Ô€              òÍ ²   ²   ˆƒ<                             ªª    E  €    @  
 
-À 	 l                                                                                                             /Ï       Ô€              pÐ °   °   ƒ<                Ð           ªª    E  €    @  
+À 	 l                                                                                                             7Ï       Ô€              |Ð ²   ²   ˆƒ<                             ªª    E  €    @  
 
-À 	 l                                                                                                             òò L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà          ªª           
+À 	 l                                                                                                             ó N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ           ªª           
 ÿÿÿÿÿÿ
-       ó L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ          ªª           
+       -ó N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà           ªª           
 ÿÿÿÿÿÿ
-       Iô L   L   ƒ<                À            ªª           
+       Yô N   N   ˆƒ<                             ªª           
      
-       Yô       Ô€              Tõ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ          ªª           
+       iô       Ô€              dõ N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ°           ªª           
 ÿÿÿÿÿÿ
-       µõ L   L   ƒ<                          ªª           
+       Åõ N   N   ˆƒ<                            ªª           
      
-       rö       Ô€              ÷ L   L   ƒ<                ð           ªª           
+       ‚ö       Ô€              -÷ N   N   ˆƒ<                            ªª           
      
-       )û       Ô€              »ü °   °   ƒ<                           ªª    E  €    @  
+       Aû       Ô€              ×ü ²   ²   ˆƒ<                            ªª    E  €    @  
 
- 	À l                                                                                                             Ëü       Ô€              "ý °   °   ƒ<                           ªª    E  €    @  
+ 	À l                                                                                                             çü       Ô€              >ý ²   ²   ˆƒ<                            ªª    E  €    @  
 
- 	À l                                                                                                             cþ       Ô€              À7 F   F   €€  ÿÿÿÿÿÿ          È»&     è    Œ$0H`lx
- J&èEèrmesh         °   °   ƒ<                à            ªª    E  €   @  
+ 	À l                                                                                                             ƒþ       Ô€              À7 F   F   €€  ÿÿÿÿÿÿ          Ð È»&     è    Œ$0H`lx
+ J&èEèrmesh         ²   ²   ˆƒ<                              ªª    E  €   @  
 
-À 	 l                                                                                                                     Ô€              k  °   °   ƒ<                0          ªª    E  €   @  
+À 	 l                                                                                                                     Ô€              o  ²   ²   ˆƒ<                             ªª    E  €   @  
 
-À 	 l                                                                                                             «        Ô€              Ú  °   °   ƒ<                           ªª    E  €   @  
+À 	 l                                                                                                             ³        Ô€              æ  ²   ²   ˆƒ<                             ªª    E  €   @  
 
-À 	 l                                                                                                             Ü  A   A   €€  ÿÿÿÿÿÿ          ð +Î-     è    Œ$0H`lx J&èrmesh       ˜        Ô€              Ç	  °   °   ƒ<                0          ªª    E  €   @  
+À 	 l                                                                                                             Ü  A   A   €€  ÿÿÿÿÿÿ          À +Î-     è    Œ$0H`lx J&èrmesh       °        Ô€              ã	  ²   ²   ˆƒ<                             ªª    E  €   @  
 
- 	À l                                                                                                             ×	        Ô€              .
-  °   °   ƒ<                @          ªª    E  €   @  
+ 	À l                                                                                                             ó	        Ô€              J
+  ²   ²   ˆƒ<                             ªª    E  €   @  
 
- 	À l                                                                                                             n        Ô€              $  F   F   €€  ÿÿÿÿÿÿ          PÍê-     è    Œ$0H`lx
- Î-è¼&èrmesh        –  F   F   €€  ÿÿÿÿÿÿ          @è\.     è    Œ$0H`lx
- ë-èæ&èrmesh       $¢ °   °   ƒ<                            ªª    E  €   @  
+ 	À l                                                                                                             Ž        Ô€              $  F   F   €€  ÿÿÿÿÿÿ          ð Íê-     è    Œ$0H`lx
+ Î-è¼&èrmesh        –  F   F   €€  ÿÿÿÿÿÿ          à è\.     è    Œ$0H`lx
+ ë-èæ&èrmesh       (¢ ²   ²   ˆƒ<                0             ªª    E  €   @  
 
-À 	 l                                                                                                             4¢       Ô€              ‹¢ °   °   ƒ<                `          ªª    E  €   @  
+À 	 l                                                                                                             8¢       Ô€              �¢ ²   ²   ˆƒ<                0            ªª    E  €   @  
 
-À 	 l                                                                                                             Ë£       Ô€              ú¤ °   °   ƒ<                P          ªª    E  €   @  
+À 	 l                                                                                                             Ó£       Ô€              ¥ ²   ²   ˆƒ<                0            ªª    E  €   @  
 
-À 	 l                                                                                                             ü¨ A   A   €€  ÿÿÿÿÿÿ          Ko5     è    Œ$0H`lx ë-èrmesh       ¸©       Ô€              &« °   °   ƒ<                `          ªª    E  €   @  
+À 	 l                                                                                                             ü¨ A   A   €€  ÿÿÿÿÿÿ          Ð Ko5     è    Œ$0H`lx ë-èrmesh       Ð©       Ô€              B« ²   ²   ˆƒ<                0            ªª    E  €   @  
 
- 	À l                                                                                                             6«       Ô€              �« °   °   ƒ<                p          ªª    E  €   @  
+ 	À l                                                                                                             R«       Ô€              ©« ²   ²   ˆƒ<                0            ªª    E  €   @  
 
- 	À l                                                                                                             Í¬       Ô€              -Å F   F   €€  ÿÿÿÿÿÿ          €í‹5     è    Œ$0H`lx
- o5è].èrmesh       À7 F   F   €€  ÿÿÿÿÿÿ          pþ5     è    Œ$0H`lx
- Œ5è‡.èrmesh         °   °   ƒ<                            ªª    E  €   @  
+ 	À l                                                                                                             í¬       Ô€              -Å F   F   €€  ÿÿÿÿÿÿ           í‹5     è    Œ$0H`lx
+ o5è].èrmesh       À7 F   F   €€  ÿÿÿÿÿÿ          ð þ5     è    Œ$0H`lx
+ Œ5è‡.èrmesh         ²   ²   ˆƒ<                @             ªª    E  €   @  
 
-À 	 l                                                                                                                     Ô€              k  °   °   ƒ<                �          ªª    E  €   @  
+À 	 l                                                                                                                     Ô€              o  ²   ²   ˆƒ<                @            ªª    E  €   @  
 
-À 	 l                                                                                                             «        Ô€              Ú  °   °   ƒ<                €          ªª    E  €   @  
+À 	 l                                                                                                             ³        Ô€              æ  ²   ²   ˆƒ<                @            ªª    E  €   @  
 
-À 	 l                                                                                                             Ü  A   A   €€  ÿÿÿÿÿÿ          0k=     è    Œ$0H`lx Œ5èrmesh       ×        Ô€              
-  °   °   ƒ<                �          ªª    E  €   @  
+À 	 l                                                                                                             Ü  A   A   €€  ÿÿÿÿÿÿ          à k=     è    Œ$0H`lx Œ5èrmesh       ï        Ô€              +
+  ²   ²   ˆƒ<                @            ªª    E  €   @  
 
- 	À l                                                                                                             
-        Ô€              m
-  °   °   ƒ<                           ªª    E  €   @  
+ 	À l                                                                                                             ;
+        Ô€              ’
+  ²   ²   ˆƒ<                @            ªª    E  €   @  
 
- 	À l                                                                                                             ­        Ô€              $  F   F   €€  ÿÿÿÿÿÿ          °-=     è    Œ$0H`lx
- =èþ5èrmesh        –  F   F   €€  ÿÿÿÿÿÿ           (Ÿ=     è    Œ$0H`lx
- -=è(6èrmesh       ž{ E   E   Ð€  ÿÿÿÿÿÿ          °‚%              ˆ      ÿÿÿÿÿÿ           À{ ?   ?   Ð€<                Àƒ           ˆ                     K}       Ô€              š} ?   ?   Ðˆ<                Àƒ           ˆ                     |~ ?   ?   Ðˆ<                Àƒ           ˆ                     $       Ô€              ï       Ô€              ¼€ E   E   Ð€  ÿÿÿÿÿÿ          Ð‚%            ˆ      ÿÿÿÿÿÿ           ¿� ?   ?   Ð€<                @ƒ           ˆ                     Ï�       Ô€              ‚ ?   ?   Ð€<                àƒ         ˆ  –                  Å‚       Ô€              ‰ƒ E   E   Ð€  ÿÿÿÿÿÿ          P‚%            ˆ  6  ÿÿÿÿÿÿ           $¢ °   °   ƒ<                `           ªª    E  €   @  
+ 	À l                                                                                                             Ö        Ô€              $  F   F   €€  ÿÿÿÿÿÿ          -=     è    Œ$0H`lx
+ =èþ5èrmesh        –  F   F   €€  ÿÿÿÿÿÿ           (Ÿ=     è    Œ$0H`lx
+ -=è(6èrmesh       ž{ E   E   Ð€  ÿÿÿÿÿÿ          ‚%              ˆ      ÿÿÿÿÿÿ           À{ ?   ?   Ð€<                 ƒ           ˆ                     K}       Ô€              š} ?   ?   Ðˆ<                 ƒ           ˆ                     |~ ?   ?   Ðˆ<                 ƒ           ˆ                     $       Ô€              ï       Ô€              ¼€ E   E   Ð€  ÿÿÿÿÿÿ          0‚%            ˆ      ÿÿÿÿÿÿ           ¿� ?   ?   Ð€<                ð ƒ           ˆ                     Ï�       Ô€              ‚ ?   ?   Ð€<                @ƒ         ˆ  –                  Å‚       Ô€              ‰ƒ E   E   Ð€  ÿÿÿÿÿÿ           ‚%            ˆ  6  ÿÿÿÿÿÿ           (¢ ²   ²   ˆƒ<                P             ªª    E  €   @  
 
-À 	 l                                                                                                             4¢       Ô€              ‹¢ °   °   ƒ<                ð          ªª    E  €   @  
+À 	 l                                                                                                             8¢       Ô€              �¢ ²   ²   ˆƒ<                P            ªª    E  €   @  
 
-À 	 l                                                                                                             Ë£       Ô€              ú¤ °   °   ƒ<                À          ªª    E  €   @  
+À 	 l                                                                                                             Ó£       Ô€              ¥ ²   ²   ˆƒ<                P            ªª    E  €   @  
 
-À 	 l                                                                                                             ü¨ A   A   €€  ÿÿÿÿÿÿ          p‹±D     è    Œ$0H`lx -=èrmesh       å©       Ô€              « °   °   ƒ<                Ð          ªª    E  €   @  
+À 	 l                                                                                                             ü¨ A   A   €€  ÿÿÿÿÿÿ          ‹±D     è    Œ$0H`lx -=èrmesh       ý©       Ô€              K« ²   ²   ˆƒ<                P            ªª    E  €   @  
 
- 	À l                                                                                                             -«       Ô€              „« °   °   ƒ<                           ªª    E  €   @  
+ 	À l                                                                                                             [«       Ô€              ²« ²   ²   ˆƒ<                P            ªª    E  €   @  
 
- 	À l                                                                                                             Ä¬       Ô€              -Å F   F   €€  ÿÿÿÿÿÿ          -ÎD     è    Œ$0H`lx
- ±DèŸ=èrmesh       À7 F   F   €€  ÿÿÿÿÿÿ          àH@E     è    Œ$0H`lx
+ 	À l                                                                                                             ö¬       Ô€              -Å F   F   €€  ÿÿÿÿÿÿ          P-ÎD     è    Œ$0H`lx
+ ±DèŸ=èrmesh       À7 F   F   €€  ÿÿÿÿÿÿ           H@E     è    Œ$0H`lx
  ÎDèÊ=èrmesh    
\ No newline at end of file
diff -Naur ns-3.23/src/mesh/test/dot11s/hwmp-proactive-regression-test-4-1.pcap ns-3.24/src/mesh/test/dot11s/hwmp-proactive-regression-test-4-1.pcap
--- ns-3.23/src/mesh/test/dot11s/hwmp-proactive-regression-test-4-1.pcap	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/test/dot11s/hwmp-proactive-regression-test-4-1.pcap	2015-09-15 11:18:44.000000000 -0700
@@ -2,55 +2,55 @@
  ¨è– èrmesh       k  A   A   €€  ÿÿÿÿÿÿ          @ «I     è    Œ$0H`lx Åèrmesh       …$  F   F   €€  ÿÿÿÿÿÿ          ` Mf     è    Œ$0H`lx
  Jè7èrmesh       ‹¨ A   A   €€  ÿÿÿÿÿÿ          P Ëê     è    Œ$0H`lx fèrmesh       ¥Å F   F   €€  ÿÿÿÿÿÿ          p m     è    Œ$0H`lx
  ëèØèrmesh       k  A   A   €€  ÿÿÿÿÿÿ          ` ë‹     è    Œ$0H`lx èrmesh       …$  F   F   €€  ÿÿÿÿÿÿ          € �¨     è    Œ$0H`lx
- Œèzèrmesh       ¬À  ?   ?   Ð€<                � ƒ           ˆ                     	Â  ?   ?   Ðˆ<                � ƒ           ˆ                     Ã  E   E   Ð€  ÿÿÿÿÿÿ            ‚%            ˆ  –   ÿÿÿÿÿÿ           *Ã  ?   ?   Ð€<                p ƒ           ˆ                     ÓÃ        Ô€              bÄ  ?   ?   Ð€<                ° ƒ         ˆ  –                  íÄ  E   E   Ð€  ÿÿÿÿÿÿ          € ‚%            ˆ  -  ÿÿÿÿÿÿ           ‹¨ A   A   €€  ÿÿÿÿÿÿ          � -&     è    Œ$0H`lx ©èrmesh       HÄ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ            ªª           
+ Œèzèrmesh       ¬À  ?   ?   Ð€<                � ƒ           ˆ                     	Â  ?   ?   Ðˆ<                � ƒ           ˆ                     Ã  E   E   Ð€  ÿÿÿÿÿÿ            ‚%            ˆ  –   ÿÿÿÿÿÿ           *Ã  ?   ?   Ð€<                p ƒ           ˆ                     ÓÃ        Ô€              bÄ  ?   ?   Ð€<                ° ƒ         ˆ  –                  íÄ  E   E   Ð€  ÿÿÿÿÿÿ          € ‚%            ˆ  -  ÿÿÿÿÿÿ           ‹¨ A   A   €€  ÿÿÿÿÿÿ          � -&     è    Œ$0H`lx ©èrmesh       HÄ N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ             ªª           
 ÿÿÿÿÿÿ
-       sÅ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ          ªª           
+       sÅ N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ           ªª           
 ÿÿÿÿÿÿ
        Æ F   F   €€  ÿÿÿÿÿÿ          Ð ­I&     è    Œ$0H`lx
- -&èèrmesh       2Ë       Ô€              ÝË L   L   ƒ<                à           ªª           
+ -&èèrmesh       2Ë       Ô€              ÝË N   N   ˆƒ<                             ªª           
      
-       íË       Ô€              DÌ °   °   ƒ<                °            ªª    E  €    @  
+       íË       Ô€              DÌ ²   ²   ˆƒ<                              ªª    E  €    @  
 
-À 	 l                                                                                                             „Í       Ô€              òÎ °   °   ƒ<                ð           ªª    E  €    @  
+À 	 l                                                                                                             ˆÍ       Ô€              úÎ ²   ²   ˆƒ<                             ªª    E  €    @  
 
-À 	 l                                                                                                             �ó L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ          ªª           
+À 	 l                                                                                                             ­ó N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà           ªª           
 ÿÿÿÿÿÿ
-       Èó L   L   ƒ<                À            ªª           
+       Øó N   N   ˆƒ<                             ªª           
      
-       …ô       Ô€              Ôô L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ          ªª           
+       •ô       Ô€              äô N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ°           ªª           
 ÿÿÿÿÿÿ
-       6ö L   L   ƒ<                          ªª           
+       Fö N   N   ˆƒ<                            ªª           
      
-       øü       Ô€              'þ °   °   ƒ<                           ªª    E  €    @  
+       ý       Ô€              Gþ ²   ²   ˆƒ<                            ªª    E  €    @  
 
- 	À l                                                                                                             7þ       Ô€                  °   °   ƒ<                à            ªª    E  €   @  
+ 	À l                                                                                                             Wþ       Ô€                  ²   ²   ˆƒ<                              ªª    E  €   @  
 
-À 	 l                                                                                                             @        Ô€              o  °   °   ƒ<                0          ªª    E  €   @  
+À 	 l                                                                                                             D        Ô€              w  ²   ²   ˆƒ<                             ªª    E  €   @  
 
-À 	 l                                                                                                             k  A   A   €€  ÿÿÿÿÿÿ          ð +Î-     è    Œ$0H`lx J&èrmesh       
-        Ô€              2  °   °   ƒ<                @          ªª    E  €   @  
+À 	 l                                                                                                             k  A   A   €€  ÿÿÿÿÿÿ          À +Î-     è    Œ$0H`lx J&èrmesh       
+        Ô€              R  ²   ²   ˆƒ<                             ªª    E  €   @  
 
- 	À l                                                                                                             B        Ô€              …$  F   F   €€  ÿÿÿÿÿÿ          PÍê-     è    Œ$0H`lx
- Î-è¼&èrmesh        ¡ °   °   ƒ<                            ªª    E  €   @  
+ 	À l                                                                                                             b        Ô€              …$  F   F   €€  ÿÿÿÿÿÿ          ð Íê-     è    Œ$0H`lx
+ Î-è¼&èrmesh        ¡ ²   ²   ˆƒ<                0             ªª    E  €   @  
 
-À 	 l                                                                                                             `¢       Ô€              �£ °   °   ƒ<                `          ªª    E  €   @  
+À 	 l                                                                                                             d¢       Ô€              —£ ²   ²   ˆƒ<                0            ªª    E  €   @  
 
-À 	 l                                                                                                             ‹¨ A   A   €€  ÿÿÿÿÿÿ          Ko5     è    Œ$0H`lx ë-èrmesh       b«       Ô€              ‘¬ °   °   ƒ<                p          ªª    E  €   @  
+À 	 l                                                                                                             ‹¨ A   A   €€  ÿÿÿÿÿÿ          Ð Ko5     è    Œ$0H`lx ë-èrmesh       ~«       Ô€              ±¬ ²   ²   ˆƒ<                0            ªª    E  €   @  
 
- 	À l                                                                                                             ¡¬       Ô€              ¥Å F   F   €€  ÿÿÿÿÿÿ          €í‹5     è    Œ$0H`lx
- o5è].èrmesh           °   °   ƒ<                            ªª    E  €   @  
+ 	À l                                                                                                             Á¬       Ô€              ¥Å F   F   €€  ÿÿÿÿÿÿ           í‹5     è    Œ$0H`lx
+ o5è].èrmesh           ²   ²   ˆƒ<                @             ªª    E  €   @  
 
-À 	 l                                                                                                             @        Ô€              o  °   °   ƒ<                �          ªª    E  €   @  
+À 	 l                                                                                                             D        Ô€              w  ²   ²   ˆƒ<                @            ªª    E  €   @  
 
-À 	 l                                                                                                             k  A   A   €€  ÿÿÿÿÿÿ          0k=     è    Œ$0H`lx Œ5èrmesh       B
-        Ô€              q  °   °   ƒ<                           ªª    E  €   @  
+À 	 l                                                                                                             k  A   A   €€  ÿÿÿÿÿÿ          à k=     è    Œ$0H`lx Œ5èrmesh       g
+        Ô€              š  ²   ²   ˆƒ<                @            ªª    E  €   @  
 
- 	À l                                                                                                             �        Ô€              …$  F   F   €€  ÿÿÿÿÿÿ          °-=     è    Œ$0H`lx
- =èþ5èrmesh       ,| ?   ?   Ð€<                Àƒ           ˆ                     ~ ?   ?   Ðˆ<                Àƒ           ˆ                     è~ ?   ?   Ðˆ<                Àƒ           ˆ                     0� E   E   Ð€  ÿÿÿÿÿÿ          Ð‚%            ˆ      ÿÿÿÿÿÿ           R� ?   ?   Ð€<                @ƒ           ˆ                     û�       Ô€              ‰‚ ?   ?   Ð€<                àƒ         ˆ  –                  ƒ E   E   Ð€  ÿÿÿÿÿÿ          P‚%            ˆ  6  ÿÿÿÿÿÿ            ¡ °   °   ƒ<                `           ªª    E  €   @  
+ 	À l                                                                                                             ª        Ô€              …$  F   F   €€  ÿÿÿÿÿÿ          -=     è    Œ$0H`lx
+ =èþ5èrmesh       ,| ?   ?   Ð€<                 ƒ           ˆ                     ~ ?   ?   Ðˆ<                 ƒ           ˆ                     è~ ?   ?   Ðˆ<                 ƒ           ˆ                     0� E   E   Ð€  ÿÿÿÿÿÿ          0‚%            ˆ      ÿÿÿÿÿÿ           R� ?   ?   Ð€<                ð ƒ           ˆ                     û�       Ô€              ‰‚ ?   ?   Ð€<                @ƒ         ˆ  –                  ƒ E   E   Ð€  ÿÿÿÿÿÿ           ‚%            ˆ  6  ÿÿÿÿÿÿ            ¡ ²   ²   ˆƒ<                P             ªª    E  €   @  
 
-À 	 l                                                                                                             `¢       Ô€              �£ °   °   ƒ<                ð          ªª    E  €   @  
+À 	 l                                                                                                             d¢       Ô€              —£ ²   ²   ˆƒ<                P            ªª    E  €   @  
 
-À 	 l                                                                                                             ‹¨ A   A   €€  ÿÿÿÿÿÿ          p‹±D     è    Œ$0H`lx -=èrmesh       Y«       Ô€              ˆ¬ °   °   ƒ<                           ªª    E  €   @  
+À 	 l                                                                                                             ‹¨ A   A   €€  ÿÿÿÿÿÿ          ‹±D     è    Œ$0H`lx -=èrmesh       ‡«       Ô€              º¬ ²   ²   ˆƒ<                P            ªª    E  €   @  
 
- 	À l                                                                                                             ˜¬       Ô€              ¥Å F   F   €€  ÿÿÿÿÿÿ          -ÎD     è    Œ$0H`lx
+ 	À l                                                                                                             Ê¬       Ô€              ¥Å F   F   €€  ÿÿÿÿÿÿ          P-ÎD     è    Œ$0H`lx
  ±DèŸ=èrmesh    
\ No newline at end of file
diff -Naur ns-3.23/src/mesh/test/dot11s/hwmp-reactive-regression.cc ns-3.24/src/mesh/test/dot11s/hwmp-reactive-regression.cc
--- ns-3.23/src/mesh/test/dot11s/hwmp-reactive-regression.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/test/dot11s/hwmp-reactive-regression.cc	2015-09-15 11:18:44.000000000 -0700
@@ -30,7 +30,6 @@
 #include "ns3/internet-stack-helper.h"
 #include "ns3/ipv4-address-helper.h"
 #include "ns3/abort.h"
-#include "ns3/udp-echo-helper.h"
 #include "ns3/mobility-model.h"
 #include "ns3/pcap-test.h"
 #include <sstream>
@@ -42,7 +41,8 @@
 
 HwmpReactiveRegressionTest::HwmpReactiveRegressionTest () : TestCase ("HWMP on-demand regression test"),
                                                             m_nodes (0),
-                                                            m_time (Seconds (10))
+                                                            m_time (Seconds (10)),
+                                                            m_sentPktsCounter (0)
 {
 }
 HwmpReactiveRegressionTest::~HwmpReactiveRegressionTest ()
@@ -86,17 +86,18 @@
 void
 HwmpReactiveRegressionTest::InstallApplications ()
 {
-  UdpEchoServerHelper echoServer (9);
-  ApplicationContainer serverApps = echoServer.Install (m_nodes->Get (0));
-  serverApps.Start (Seconds (0.0));
-  serverApps.Stop (m_time);
-  UdpEchoClientHelper echoClient (m_interfaces.GetAddress (0), 9);
-  echoClient.SetAttribute ("MaxPackets", UintegerValue (300));
-  echoClient.SetAttribute ("Interval", TimeValue (Seconds (0.5)));
-  echoClient.SetAttribute ("PacketSize", UintegerValue (20));
-  ApplicationContainer clientApps = echoClient.Install (m_nodes->Get (5));
-  clientApps.Start (Seconds (2.0));
-  clientApps.Stop (m_time);
+  // client socket
+  m_clientSocket = Socket::CreateSocket (m_nodes->Get (5), TypeId::LookupByName ("ns3::UdpSocketFactory"));
+  m_clientSocket->Bind ();
+  m_clientSocket->Connect (InetSocketAddress (m_interfaces.GetAddress (0), 9));
+  m_clientSocket->SetRecvCallback (MakeCallback (&HwmpReactiveRegressionTest::HandleReadClient, this));
+  Simulator::ScheduleWithContext (m_clientSocket->GetNode ()->GetId (), Seconds (2.0),
+                                  &HwmpReactiveRegressionTest::SendData, this, m_clientSocket);
+
+  // server socket
+  m_serverSocket = Socket::CreateSocket (m_nodes->Get (0), TypeId::LookupByName ("ns3::UdpSocketFactory"));
+  m_serverSocket->Bind (InetSocketAddress (Ipv4Address::GetAny (), 9));
+  m_serverSocket->SetRecvCallback (MakeCallback (&HwmpReactiveRegressionTest::HandleReadServer, this));
 }
 void
 HwmpReactiveRegressionTest::CreateDevices ()
@@ -152,5 +153,40 @@
       return;
     }
   model->SetPosition (Vector (9000, 0, 0));
+}
+
+void
+HwmpReactiveRegressionTest::SendData (Ptr<Socket> socket)
+{
+  if ((Simulator::Now () < m_time) && (m_sentPktsCounter < 300))
+    {
+      socket->Send (Create<Packet> (20));
+      m_sentPktsCounter ++;
+      Simulator::ScheduleWithContext (socket->GetNode ()->GetId (), Seconds (0.5),
+                                      &HwmpReactiveRegressionTest::SendData, this, socket);
+    }
+}
+
+void
+HwmpReactiveRegressionTest::HandleReadServer (Ptr<Socket> socket)
+{
+  Ptr<Packet> packet;
+  Address from;
+  while ((packet = socket->RecvFrom (from)))
+    {
+      packet->RemoveAllPacketTags ();
+      packet->RemoveAllByteTags ();
+
+      socket->SendTo (packet, 0, from);
+    }
+}
 
+void
+HwmpReactiveRegressionTest::HandleReadClient (Ptr<Socket> socket)
+{
+  Ptr<Packet> packet;
+  Address from;
+  while ((packet = socket->RecvFrom (from)))
+    {
+    }
 }
diff -Naur ns-3.23/src/mesh/test/dot11s/hwmp-reactive-regression.h ns-3.24/src/mesh/test/dot11s/hwmp-reactive-regression.h
--- ns-3.23/src/mesh/test/dot11s/hwmp-reactive-regression.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/test/dot11s/hwmp-reactive-regression.h	2015-09-15 11:18:44.000000000 -0700
@@ -87,5 +87,37 @@
   void CreateDevices ();
   void InstallApplications ();
   void ResetPosition ();
+
+  /// Server-side socket
+  Ptr<Socket> m_serverSocket;
+  /// Client-side socket
+  Ptr<Socket> m_clientSocket;
+
+  // sent packets counter
+  uint32_t m_sentPktsCounter;
+
+  /**
+   * Send data
+   * \param socket the sending socket
+   */
+  void SendData (Ptr<Socket> socket);
+
+  /**
+   * \brief Handle a packet reception.
+   *
+   * This function is called by lower layers.
+   *
+   * \param socket the socket the packet was received to.
+   */
+  void HandleReadServer (Ptr<Socket> socket);
+
+  /**
+   * \brief Handle a packet reception.
+   *
+   * This function is called by lower layers.
+   *
+   * \param socket the socket the packet was received to.
+   */
+  void HandleReadClient (Ptr<Socket> socket);
 };
 
diff -Naur ns-3.23/src/mesh/test/dot11s/hwmp-reactive-regression-test-0-1.pcap ns-3.24/src/mesh/test/dot11s/hwmp-reactive-regression-test-0-1.pcap
--- ns-3.23/src/mesh/test/dot11s/hwmp-reactive-regression-test-0-1.pcap	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/test/dot11s/hwmp-reactive-regression-test-0-1.pcap	2015-09-15 11:18:44.000000000 -0700
@@ -1,126 +1,140 @@
-ÔÃ²¡          ÿÿ  i       '—  >   >   Ð€<                    Œ$0H`lrmeshq   9u         -˜  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ‰É  A   A   €€  ÿÿÿÿÿÿ           “È      è    Œ$0H`lx – èrmesh        «É  >   >   Ð€<                    Œ$0H`lrmeshq   9u         ±Ê  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ®Ë  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ½Ì  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ÃÍ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ÛÎ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         êÏ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         cÓ        Ô€               íÓ  <   <   Ð€<                      Œ$0H`lq   9u          7 >   >   Ð€<                0   Œ$0H`lrmeshq   9u         8       Ô€               JO A   A   €€  ÿÿÿÿÿÿ           JO     è    Œ$0H`lx É èrmesh        ‰i >   >   Ð€<                    Œ$0H`lrmeshq   9u         2j       Ô€               ¼j <   <   Ð€<                @    Œ$0H`lq  9u          Ìj       Ô€               ¢k >   >   Ð€<                P   Œ$0H`lrmeshq  9u         ²k       Ô€                l <   <   Ð€<                0     Œ$0H`lq  9u          ¥l       Ô€               #b A   A   €€  ÿÿÿÿÿÿ          ` ³a     è    Œ$0H`lx – èrmesh        jÐ A   A   €€  ÿÿÿÿÿÿ          @ jÐ     è    Œ$0H`lx bèrmesh       Á  F   F   €€  ÿÿÿÿÿÿ          p Ó     è    Œ$0H`lx
- ðèÐèrmesh       J/ A   A   €€  ÿÿÿÿÿÿ          P Šq     è    Œ$0H`lx èrmesh       +b F   F   €€  ÿÿÿÿÿÿ          € ó£     è    Œ$0H`lx
- ðèqèrmesh       jÐ A   A   €€  ÿÿÿÿÿÿ          ` ª     è    Œ$0H`lx ¤èrmesh       a  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ�      
-    ªª           
+ÔÃ²¡          ÿÿ  i       '—  >   >   Ð€<                    Œ$0H`lrmeshq   9u         -˜  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         *™  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         9š  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         H›  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         Wœ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         K�  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ‰É  A   A   €€  ÿÿÿÿÿÿ           “È      è    Œ$0H`lx – èrmesh        «É  >   >   Ð€<                    Œ$0H`lrmeshq   9u         ±Ê  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ®Ë  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ½Ì  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ÃÍ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ÛÎ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         êÏ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         HÑ        Ô€               ÒÑ  <   <   Ð€<                      Œ$0H`lq   9u          °Ò  <   <   Ðˆ<                      Œ$0H`lq   9u          7 >   >   Ð€<                0   Œ$0H`lrmeshq   9u         8       Ô€               JO A   A   €€  ÿÿÿÿÿÿ           JO     è    Œ$0H`lx É èrmesh        IP >   >   Ð€<                @   Œ$0H`lrmeshq  9u         YP       Ô€               §P <   <   Ð€<                      Œ$0H`lq   9u          LQ       Ô€               ‰i >   >   Ð€<                0   Œ$0H`lrmeshq   9u         2j       Ô€               ¼j <   <   Ð€<                P    Œ$0H`lq  9u          Ìj       Ô€               +b F   F   €€  ÿÿÿÿÿÿ          ` ³a     è    Œ$0H`lx
+ – èOèrmesh        jð A   A   €€  ÿÿÿÿÿÿ          @ jð     è    Œ$0H`lx bèrmesh       Á  F   F   €€  ÿÿÿÿÿÿ          p Ó     è    Œ$0H`lx
+ ðèðèrmesh       JO A   A   €€  ÿÿÿÿÿÿ          P Š‘     è    Œ$0H`lx èrmesh       +b F   F   €€  ÿÿÿÿÿÿ          € ó£     è    Œ$0H`lx
+ ’è‘èrmesh       jð A   A   €€  ÿÿÿÿÿÿ          ` ª2     è    Œ$0H`lx ¤èrmesh       þ
+  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ�      
+     ªª           
 
 ÿÿÿÿÿÿ
-       Œ  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿp      
-    ªª           
+       )  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿp      
+     ªª           
 
 ÿÿÿÿÿÿ
-       [  E   E   Ð€  ÿÿÿÿÿÿ          € ‚%              ˆ           
-           “  E   E   Ð€  ÿÿÿÿÿÿ            ‚%            ˆ  –        
-           ê        Ô€              x  ?   ?   Ð€<                ° ƒ         ˆ  ”       
-          ˆ        Ô€              ß  L   L   ƒ<                
-�            ªª           
+       ø  E   E   Ð€  ÿÿÿÿÿÿ          € ‚%              ˆ           
+           0  E   E   Ð€  ÿÿÿÿÿÿ            ‚%            ˆ  –        
+           ¥        Ô€              3  ?   ?   Ð€<                ° ƒ         ˆ  °       
+          C        Ô€              š  N   N   ˆƒ<                
+              ªª           
      
 
-       w  L   L   ‹<                
-�            ªª           
+       W        Ô€                N   N   ˆƒ<                
+             ªª           
      
 
-       4        Ô€              ß  L   L   ƒ<                
-À           ªª           
-     
-
-       2         Ô€              õ   `   `   ƒ<                Ð      
-     ªª    E  0    @  
+       '        Ô€              î  b   b   ˆƒ<                       
+      ªª    E  0    @  
 
-À 	                              !        Ô€              }4  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ            ªª           
+À 	                              þ        Ô€              v0  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ�            ªª           
 ÿÿÿÿÿÿ
-       ©5  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà          ªª           
+       ¢1  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ           ªª           
 ÿÿÿÿÿÿ
-       <=        Ô€              ç=  L   L   ƒ<                ð      
-     ªª           
+       Á7        Ô€              l8  N   N   ˆƒ<                      
+      ªª           
 
      
-       ÷=        Ô€              N>  `   `   ƒ<                
-°            ªª    E  0    @  
+       |8        Ô€              Ó8  b   b   ˆƒ<                
+             ªª    E  0    @  
 
- 	À                              #?        Ô€              ø?  `   `   ƒ<                
-           ªª    E  0    @  
+ 	À                              ¬9        Ô€              …:  b   b   ˆƒ<                
+            ªª    E  0    @  
 
- 	À                              Á  F   F   €€  ÿÿÿÿÿÿ          E     è    Œ$0H`lx
- ªèèrmesh       J/ A   A   €€  ÿÿÿÿÿÿ          À Ê³     è    Œ$0H`lx Eèrmesh       ó¤       Ô€              ¶¥ `   `   ƒ<                      
-     ªª    E  0   @  
-
-À 	                              Æ¥       Ô€              ¦ `   `   ƒ<                
-Ð            ªª    E  0   @  
-
- 	À                              ò¦       Ô€              ô§ `   `   ƒ<                
-0          ªª    E  0   @  
-
- 	À                              +b F   F   €€  ÿÿÿÿÿÿ          @3æ&     è    Œ$0H`lx
- sè´èrmesh       jÐ A   A   €€  ÿÿÿÿÿÿ          à êT'     è    Œ$0H`lx æ&èrmesh       dö /   /   Ð€<                P„       
-            tö       Ô€              Á  F   F   €€  ÿÿÿÿÿÿ          `S‡.     è    Œ$0H`lx
- 'èU'èrmesh       J/ A   A   €€  ÿÿÿÿÿÿ          ð 
-ö.     è    Œ$0H`lx ‡.èrmesh       % E   E   Ð€  ÿÿÿÿÿÿ          p‚%         
-   ˆ  ª                  9% ?   ?   Ð€<                 ƒ        
-   ˆ                     & ?   ?   Ðˆ<                 ƒ        
-   ˆ                     °' ?   ?   Ðˆ<                 ƒ        
-   ˆ                     Y(       Ô€              ) ?   ?   Ðˆ<                €ƒ      
-   ˆ  –                  * ?   ?   Ðˆ<                €ƒ      
-   ˆ  –                  2+ ?   ?   Ðˆ<                €ƒ      
-   ˆ  –                  ÿ0       Ô€              Â1 `   `   ƒ<                �     
-     ªª    E  0   @  
-
-À 	                              Ò1       Ô€              )2 `   `   ƒ<                
-           ªª    E  0   @  
-
- 	À                              þ2       Ô€               4 `   `   ƒ<                
-           ªª    E  0   @  
-
- 	À                              M5 `   `   ‹<                
-           ªª    E  0   @  
-
- 	À                              ó¤       Ô€              ¶¥ `   `   ƒ<                °     
-     ªª    E  0   @  
-
-À 	                              Æ¥       Ô€              ¦ `   `   ƒ<                
-            ªª    E  0   @  
-
- 	À                              ò¦       Ô€              3¨ `   `   ƒ<                
-À          ªª    E  0   @  
-
- 	À                              +b F   F   €€  ÿÿÿÿÿÿ          Ðs(6     è    Œ$0H`lx
- µ.èU'èrmesh       óÎ /   /   Ð€<                à„                   ÌÐ A   A   €€  ÿÿÿÿÿÿ          0*—6     è    Œ$0H`lx (6èrmesh       %Ò -   -   Ðˆ<                ðrmeshu  4        5Ò       Ô€              ƒÒ -   -   Ð€<                @rmeshu  7        ±Ó -   -   Ðˆ<                @rmeshu  7        ¨Ô -   -   Ðˆ<                @rmeshu  7        9Õ       Ô€              ‚ƒ E   E   Ð€  ÿÿÿÿÿÿ           ‚%         
-   ˆ  Ì                  Á  A   A   €€  ÿÿÿÿÿÿ          “É=     è    Œ$0H`lx V6èrmesh       %Á  >   >   Ð€<                P  Œ$0H`lrmeshq   9u        ÎÁ        Ô€              HÃ  <   <   Ðˆ<                    Œ$0H`lq  9u         XÃ        Ô€              .Ä  >   >   Ð€<                0  Œ$0H`lrmeshq  9u        >Ä        Ô€              ŒÄ  <   <   Ð€<                `   Œ$0H`lq  9u         1Å        Ô€              JW A   A   €€  ÿÿÿÿÿÿ          pJ`>     è    Œ$0H`lxÊ=èrmesh       +b F   F   €€  ÿÿÿÿÿÿ          @³jE     è    Œ$0H`lx
- ÷=è`>èrmesh       jø A   A   €€  ÿÿÿÿÿÿ          €jF     è    Œ$0H`lxkEèrmesh       BÁ	 E   E   Ð€  ÿÿÿÿÿÿ          P‚%         
-   ˆ  Ì                  dÁ	 ?   ?   Ð€<                �ƒ        
-   ˆ                     Â	       Ô€              ›Â	 ?   ?   Ð€<                `ƒ      
-   ˆ  ¾                  ‚Ê	       Ô€              ‰Ì	 `   `   ‹<                p     
-     ªª    E  0   @  
-
-À 	                              ™Ì	       Ô€              ðÌ	 `   `   ƒ<                
-            ªª    E  0   @  
-
- 	À                              ÅÍ	       Ô€              Ï	 `   `   ƒ<                
-€          ªª    E  0   @  
-
- 	À                              nÐ	 `   `   ‹<                
-€          ªª    E  0   @  
-
- 	À                              ØÕ	 `   `   ‹<                
-€          ªª    E  0   @  
-
- 	À                              áØ	       Ô€              FÚ	 `   `   ‹<                
-€          ªª    E  0   @  
-
- 	À                              Þ	 `   `   ‹<                �     
-     ªª    E  0   @  
-
-À 	                              )Þ	       Ô€              €Þ	 `   `   ƒ<                
-°           ªª    E  0   @  
-
- 	À                              à	 `   `   ‹<                
-°           ªª    E  0   @  
-
- 	À                              Øà	       Ô€              ›á	 `   `   ƒ<                
-           ªª    E  0   @  
-
- 	À                              JW A   A   €€  ÿÿÿÿÿÿ          ÀŠ¢M     è    Œ$0H`lxkEèrmesh       ë_ -   -   Ð€<                Ðrmeshu  4        |`       Ô€              ò` -   -   Ð€<                Àrmeshu  7        a       Ô€              +b F   F   €€  ÿÿÿÿÿÿ          Ðó¬T     è    Œ$0H`lx
- 9Mè¢Mèrmesh       Mb >   >   Ð€<                à  Œ$0H`lrmeshq   9u        Ac >   >   Ðˆ<                à  Œ$0H`lrmeshq   9u        êc       Ô€              `d -   -   Ð€<                àrmeshu  4        pd       Ô€              Ðd -   -   Ð€<                ðrmeshu  7        ae       Ô€              jØ A   A   €€  ÿÿÿÿÿÿ           ª#U     è    Œ$0H`lx­Tèrmesh       iÙ >   >   Ð€<                ð  Œ$0H`lrmeshq  9u        yÙ       Ô€              ÇÙ -   -   Ð€<                rmeshu  4        XÚ       Ô€              ÎÚ -   -   Ð€<                 rmeshu  7        ÞÚ       Ô€              sŠ	 /   /   Ð€<                „                   *=       Ô€              Á  A   A   €€  ÿÿÿÿÿÿ           N\     è    Œ$0H`lx 9Mèrmesh       %Á  >   >   Ð€<                   Œ$0H`lrmeshq   9u        ÎÁ        Ô€              XÂ  <   <   Ð€<                0   Œ$0H`lq  9u         hÂ        Ô€              5Ã  >   >   Ð€<                @  Œ$0H`lrmeshq  9u        EÃ        Ô€              “Ã  <   <   Ð€<                0   Œ$0H`lq  9u         8Ä        Ô€              µì  -   -   Ð€<                Prmeshu  4        ¤í        Ô€              J# A   A   €€  ÿÿÿÿÿÿ          @Ê°\     è    Œ$0H`lxN\èrmesh       îb       Ô€              xc <   <   Ð€<                p   Œ$0H`lq  9u         ^d >   >   Ð€<                €  Œ$0H`lrmeshq  9u        #f       Ô€              jŒ A   A   €€  ÿÿÿÿÿÿ          Pêd     è    Œ$0H`lxN\èrmesh       Ã¾  -   -   Ð€<                `rmeshu  4        T¿        Ô€              Ê¿  -   -   Ð€<                �rmeshu  7        Ú¿        Ô€              Jï  <   <   €€  ÿÿÿÿÿÿ          p
-¿k     è    Œ$0H`lx rmesh       #b A   A   €€  ÿÿÿÿÿÿ          °s1s     è    Œ$0H`lxîkèrmesh       Eb >   >   Ð€<                €  Œ$0H`lrmeshq   9u        8c >   >   Ðˆ<                €  Œ$0H`lrmeshq   9u        ác       Ô€              kd <   <   Ð€<                À   Œ$0H`lq  9u         {d       Ô€              !f >   >   Ðˆ<                Ð  Œ$0H`lrmeshq  9u        1f       Ô€              f <   <   Ð€<                �   Œ$0H`lq  9u         $g       Ô€              j” A   A   €€  ÿÿÿÿÿÿ           *ds     è    Œ$0H`lx1sèrmesh       Á  F   F   €€  ÿÿÿÿÿÿ          à“Òz     è    Œ$0H`lx
-îkèdsèrmesh       J A   A   €€  ÿÿÿÿÿÿ          °J{     è    Œ$0H`lxÓzèrmesh       ­ -   -   Ð€<                ðrmeshu  4        œ       Ô€              ' >   >   Ð€<                   Œ$0H`lrmeshq  9u                Ô€              •  -   -   Ð€<                rmeshu  7        #b A   A   €€  ÿÿÿÿÿÿ           ³s‚     è    Œ$0H`lx{èrmesh       îb       Ô€              3e       Ô€              j¬ A   A   €€  ÿÿÿÿÿÿ          Àj¾‚     è    Œ$0H`lxt‚èrmesh    	   Á  F   F   €€  ÿÿÿÿÿÿ          PÓŠ     è    Œ$0H`lx
-¾‚èµ‚èrmesh    	   J A   A   €€  ÿÿÿÿÿÿ          ÐŠ_Š     è    Œ$0H`lxŠèrmesh    	   +b F   F   €€  ÿÿÿÿÿÿ          `óµ‘     è    Œ$0H`lx
-_ŠèVŠèrmesh    	   j¬ A   A   €€  ÿÿÿÿÿÿ          àª ’     è    Œ$0H`lx¶‘èrmesh    
\ No newline at end of file
+ 	À                              Á  F   F   €€  ÿÿÿÿÿÿ          Ð E     è    Œ$0H`lx
+ 3è3èrmesh       JO A   A   €€  ÿÿÿÿÿÿ            ÊÓ     è    Œ$0H`lx Eèrmesh       o¦       Ô€              6§ b   b   ˆƒ<                       
+      ªª    E  0   @  
+
+À 	                              F§       Ô€              �§ b   b   ˆƒ<                
+              ªª    E  0   @  
+
+ 	À                              v¨       Ô€              |© b   b   ˆƒ<                
+             ªª    E  0   @  
+
+ 	À                              +b F   F   €€  ÿÿÿÿÿÿ          à 3æ&     è    Œ$0H`lx
+ Ô&èÔèrmesh       jð A   A   €€  ÿÿÿÿÿÿ          ° êt'     è    Œ$0H`lx æ&èrmesh       ?       Ô€              � /   /   Ðˆ<                ð „       
+            ­       Ô€              Á  F   F   €€  ÿÿÿÿÿÿ           S‡.     è    Œ$0H`lx
+ u.èu'èrmesh       JO A   A   €€  ÿÿÿÿÿÿ          À 
+/     è    Œ$0H`lx ‡.èrmesh       +b F   F   €€  ÿÿÿÿÿÿ          s(6     è    Œ$0H`lx
+ 6è/èrmesh       jð A   A   €€  ÿÿÿÿÿÿ          Ð *·6     è    Œ$0H`lx (6èrmesh       … E   E   Ð€  ÿÿÿÿÿÿ           ‚%         
+   ˆ  `                  9… ?   ?   Ð€<                à ƒ        
+   ˆ                     â…       Ô€              p† ?   ?   Ð€<                0ƒ      
+   ˆ  Ê                  î‘       Ô€              µ’ b   b   ˆƒ<                0      
+      ªª    E  0   @  
+
+À 	                              Å’       Ô€              “ b   b   ˆƒ<                
+0             ªª    E  0   @  
+
+ 	À                              õ“       Ô€              û” b   b   ˆƒ<                
+0            ªª    E  0   @  
+
+ 	À                              L– b   b   ˆ‹<                
+0            ªª    E  0   @  
+
+ 	À                              _™ b   b   ˆ‹<                
+0            ªª    E  0   @  
+
+ 	À                              �       Ô€              ½Ÿ b   b   ˆ‹<                
+0            ªª    E  0   @  
+
+ 	À                              -¡ b   b   ˆƒ<                @      
+      ªª    E  0   @  
+
+À 	                              =¡       Ô€              ”¡ b   b   ˆƒ<                
+@             ªª    E  0   @  
+
+ 	À                              m¢       Ô€              O£ b   b   ˆƒ<                
+@            ªª    E  0   @  
+
+ 	À                              o¥ b   b   ˆ‹<                
+@            ªª    E  0   @  
+
+ 	À                              �:        Ô€              û:  /   /   Ð€<                @„       
+            ;        Ô€              Á  F   F   €€  ÿÿÿÿÿÿ          P“É=     è    Œ$0H`lx
+ ·=è·6èrmesh       JO A   A   €€  ÿÿÿÿÿÿ          ð JX>     è    Œ$0H`lx Ê=èrmesh       +b F   F   €€  ÿÿÿÿÿÿ          `³jE     è    Œ$0H`lx
+ XEèX>èrmesh       jð A   A   €€  ÿÿÿÿÿÿ           jùE     è    Œ$0H`lx kEèrmesh       Ã	       Ô€              ÔÃ	 b   b   ˆƒ<                P      
+      ªª    E  0   @  
+
+À 	                              äÃ	       Ô€              _Ä	 E   E   Ð€  ÿÿÿÿÿÿ          ‚%              ˆ           
+           —Å	 E   E   Ð€  ÿÿÿÿÿÿ          p‚%            ˆ  ž        
+           ’È	       Ô€              YÉ	 b   b   ˆƒ<                `      
+      ªª    E  0   @  
+
+À 	                              iÉ	       Ô€              Ôã E   E   Ð€  ÿÿÿÿÿÿ           ‚%              ˆ           
+           å E   E   Ð€  ÿÿÿÿÿÿ          €‚%            ˆ  ž        
+           óè       Ô€              �é ?   ?   Ð€<                �ƒ         ½  `       
+          ‘é       Ô€              èé b   b   ˆƒ<                
+P             ªª    E  0   @  
+
+ 	À                              Áê       Ô€              ˆë b   b   ˆƒ<                
+P            ªª    E  0   @  
+
+ 	À                              Iì b   b   ˆƒ<                
+`             ªª    E  0   @  
+
+ 	À                              ˆí b   b   ˆ‹<                
+`             ªª    E  0   @  
+
+ 	À                              éî       Ô€              wï ?   ?   Ð€<                 ƒ         ˆ  ^       
+          ‡ï       Ô€              „ð b   b   ˆ‹<                
+P            ªª    E  0   @  
+
+ 	À                              ºñ b   b   ˆ‹<                
+`             ªª    E  0   @  
+
+ 	À                              “ò       Ô€              ´ó b   b   ˆƒ<                
+`            ªª    E  0   @  
+
+ 	À                              2õ b   b   ˆ‹<                
+`            ªª    E  0   @  
+
+ 	À                              Á  F   F   €€  ÿÿÿÿÿÿ          °ÓM     è    Œ$0H`lx
+ ùLèùEèrmesh       JO A   A   €€  ÿÿÿÿÿÿ          0ŠšM     è    Œ$0H`lx Mèrmesh       +b F   F   €€  ÿÿÿÿÿÿ          Àó¬T     è    Œ$0H`lx
+ ›TèšMèrmesh       jð A   A   €€  ÿÿÿÿÿÿ          @ª;U     è    Œ$0H`lx ­Tèrmesh       *%       Ô€              :' /   /   Ðˆ<                Ð„       
+            J'       Ô€              Á  F   F   €€  ÿÿÿÿÿÿ          àN\     è    Œ$0H`lx
+ <\èšMèrmesh       ÓM /   /   Ð€<                ð„                   †N -   -   Ð€<                 rmeshu  4        –N       Ô€              äN -   -   Ð€<                Prmeshu  7        uO       Ô€              ŽO A   A   €€  ÿÿÿÿÿÿ          `ÊÜ\     è    Œ$0H`lx N\èrmesh       �P >   >   Ð€<                  Œ$0H`lrmeshq  9u        �P       Ô€              ëP -   -   Ð€<                prmeshu  4        |Q       Ô€              
+R >   >   Ðˆ<                  Œ$0H`lrmeshq  9u        R       Ô€              ÏR -   -   Ð€<                 rmeshu  7        ßR       Ô€              #b A   A   €€  ÿÿÿÿÿÿ          03ïc     è    Œ$0H`lx Ýcèrmesh       Eb >   >   Ð€<                €  Œ$0H`lrmeshq   9u        îb       Ô€              xc <   <   Ð€<                @   Œ$0H`lq  9u         ˆc       Ô€              6e >   >   Ðˆ<                P  Œ$0H`lrmeshq  9u        Fe       Ô€              ”e <   <   Ð€<                �   Œ$0H`lq  9u         9f       Ô€              jÐ A   A   €€  ÿÿÿÿÿÿ           ê]d     è    Œ$0H`lxïcèrmesh       Á  F   F   €€  ÿÿÿÿÿÿ          `S�k     è    Œ$0H`lx
+ ~kè^dèrmesh       J/ A   A   €€  ÿÿÿÿÿÿ          °
+ÿk     è    Œ$0H`lx�kèrmesh       +b F   F   €€  ÿÿÿÿÿÿ          ps1s     è    Œ$0H`lx
+ sè^dèrmesh       ïÎ -   -   Ð€<                €rmeshu  4        ÿÎ       Ô€              MÏ -   -   Ð€<                Àrmeshu  7        MÐ -   -   Ðˆ<                Àrmeshu  7        ÞÐ       Ô€              ÷Ð A   A   €€  ÿÿÿÿÿÿ          Ð* s     è    Œ$0H`lx1sèrmesh       öÑ >   >   Ð€<                �  Œ$0H`lrmeshq  9u        Ò       Ô€              fÒ -   -   Ð€<                àrmeshu  4        ÷Ò       Ô€              mÓ -   -   Ð€<                 rmeshu  7        }Ó       Ô€              Á  A   A   €€  ÿÿÿÿÿÿ          °“Òz     è    Œ$0H`lx Àzèrmesh       %Á  >   >   Ð€<                ð  Œ$0H`lrmeshq   9u        ÎÁ        Ô€              XÂ  <   <   Ð€<                À   Œ$0H`lq  9u         hÂ        Ô€              MÄ  >   >   Ðˆ<                Ð  Œ$0H`lrmeshq  9u        ]Ä        Ô€              «Ä  <   <   Ð€<                    Œ$0H`lq  9u         PÅ        Ô€              JW A   A   €€  ÿÿÿÿÿÿ          Ji{     è    Œ$0H`lxÓzèrmesh       |`       Ô€              ò` -   -   Ð€<                àrmeshu  7        +b F   F   €€  ÿÿÿÿÿÿ          ð³s‚     è    Œ$0H`lx
+ a‚èi{èrmesh       öb       Ô€              vd       Ô€              jø A   A   €€  ÿÿÿÿÿÿ           j
+ƒ     è    Œ$0H`lxt‚èrmesh    	   Á  A   A   €€  ÿÿÿÿÿÿ          ÓŠ     è    Œ$0H`lx
+ƒèrmesh    	   ÎÁ        Ô€           	   XÂ  <   <   Ð€<                    Œ$0H`lq  9u      	   >Ã  >   >   Ð€<                0  Œ$0H`lrmeshq  9u     	   AÄ        Ô€           	   JW A   A   €€  ÿÿÿÿÿÿ          0Š«Š     è    Œ$0H`lxŠèrmesh    	   +b F   F   €€  ÿÿÿÿÿÿ          @óµ‘     è    Œ$0H`lx
+«ŠèŠèrmesh    	   jø A   A   €€  ÿÿÿÿÿÿ          @ªL’     è    Œ$0H`lx¶‘èrmesh    
\ No newline at end of file
diff -Naur ns-3.23/src/mesh/test/dot11s/hwmp-reactive-regression-test-1-1.pcap ns-3.24/src/mesh/test/dot11s/hwmp-reactive-regression-test-1-1.pcap
--- ns-3.23/src/mesh/test/dot11s/hwmp-reactive-regression-test-1-1.pcap	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/test/dot11s/hwmp-reactive-regression-test-1-1.pcap	2015-09-15 11:18:44.000000000 -0700
@@ -1,206 +1,199 @@
-ÔÃ²¡          ÿÿ  i       %  >   >   Ð€<                    Œ$0H`lrmeshq   9u         '  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         é'  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ï(  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         õ)  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ˜–  A   A   €€  ÿÿÿÿÿÿ           (–      è    Œ$0H`lx $ èrmesh        º–  >   >   Ð€<                    Œ$0H`lrmeshq   9u         À—  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ½˜  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         Ì™  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         Ûš  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ê›  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         Þœ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         âÄ  >   >   Ð€<                    Œ$0H`lrmeshq   9u         ÖÅ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ÄÈ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         É  A   A   €€  ÿÿÿÿÿÿ           “È      è    Œ$0H`lx – èrmesh        'Ó  >   >   Ðˆ<                0   Œ$0H`lrmeshq   9u         7Ó        Ô€               …Ó  <   <   Ð€<                      Œ$0H`lq   9u          *Ô        Ô€               ©Ô  -   -   Ð€<                @ rmeshu   4         ˜Õ        Ô€               ˜6 >   >   Ð€<                0   Œ$0H`lrmeshq   9u         A7       Ô€               Ë7 <   <   Ð€<                P    Œ$0H`lq  9u          Û7       Ô€               öi >   >   Ð€<                    Œ$0H`lrmeshq   9u         j       Ô€               Tj <   <   Ð€<                @    Œ$0H`lq  9u          ùj       Ô€               6k >   >   Ð€<                P   Œ$0H`lrmeshq  9u         ßk       Ô€               il <   <   Ð€<                0     Œ$0H`lq  9u          yl       Ô€               $– >   >   Ð€<                `   Œ$0H`lrmeshq  9u         $™ >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         3š >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         œ >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         6 >   >   Ð€<                p   Œ$0H`lrmeshq  9u         7 >   >   Ðˆ<                p   Œ$0H`lrmeshq  9u         ó7 >   >   Ðˆ<                p   Œ$0H`lrmeshq  9u         Ì8 >   >   Ðˆ<                p   Œ$0H`lrmeshq  9u         –< -   -   Ð€<                € rmeshu   4         ³a A   A   €€  ÿÿÿÿÿÿ          ` ³a     è    Œ$0H`lx – èrmesh        Àg F   F   €€  ÿÿÿÿÿÿ          � Hg     è    Œ$0H`lx
-bè•èrmesh        ‹h       Ô€               i -   -   Ð€<                  rmeshu  4         j       Ô€               ÛÐ A   A   €€  ÿÿÿÿÿÿ          @ jÐ     è    Œ$0H`lx bèrmesh       -  >   >   Ð€<                °   Œ$0H`lrmeshq  9u        .        Ô€              Ú.        Ô€              /  <   <   Ð€<                À    Œ$0H`lq  9u          ®  F   F   €€  ÿÿÿÿÿÿ          Ð hð     è    Œ$0H`lx
-bènèrmesh       “À  F   F   €€  ÿÿÿÿÿÿ          p Ó     è    Œ$0H`lx
- ðèÐèrmesh       »/ A   A   €€  ÿÿÿÿÿÿ          P Šq     è    Œ$0H`lx èrmesh       ³a F   F   €€  ÿÿÿÿÿÿ          € ó£     è    Œ$0H`lx
- ðèqèrmesh       Àg F   F   €€  ÿÿÿÿÿÿ          à ˆ©     è    Œ$0H`lx
-¤èãèrmesh       ÛÐ A   A   €€  ÿÿÿÿÿÿ          ` ª     è    Œ$0H`lx ¤èrmesh       ¶
-  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿð      
-    ªª           
+ÔÃ²¡          ÿÿ  i       %  >   >   Ð€<                    Œ$0H`lrmeshq   9u         &  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         '  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         é'  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ï(  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         õ)  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         û*  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ˜–  A   A   €€  ÿÿÿÿÿÿ           (–      è    Œ$0H`lx $ èrmesh        º–  >   >   Ð€<                    Œ$0H`lrmeshq   9u         À—  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ½˜  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         Ì™  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         Ûš  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ê›  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         Þœ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         âÄ  >   >   Ð€<                    Œ$0H`lrmeshq   9u         ÖÅ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ÜÆ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ¾Ç  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ÄÈ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         É  A   A   €€  ÿÿÿÿÿÿ           “È      è    Œ$0H`lx – èrmesh        Ñ  >   >   Ðˆ<                0   Œ$0H`lrmeshq   9u         Ñ        Ô€               jÑ  <   <   Ð€<                      Œ$0H`lq   9u          HÒ  <   <   Ðˆ<                      Œ$0H`lq   9u          íÒ        Ô€               DÕ        Ô€               ˜6 >   >   Ð€<                0   Œ$0H`lrmeshq   9u         A7       Ô€               Ë7 <   <   Ð€<                P    Œ$0H`lq  9u          Û7       Ô€               »O A   A   €€  ÿÿÿÿÿÿ           JO     è    Œ$0H`lx É èrmesh        ÝO >   >   Ð€<                @   Œ$0H`lrmeshq  9u         †P       Ô€               Q <   <   Ð€<                      Œ$0H`lq   9u           Q       Ô€               öi >   >   Ð€<                0   Œ$0H`lrmeshq   9u         j       Ô€               Tj <   <   Ð€<                P    Œ$0H`lq  9u          ùj       Ô€               ý– >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         ˜ >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         	™ >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         ý™ >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         › >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         å› >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         èœ       Ô€               Î�       Ô€               Xž <   <   Ð€<                p    Œ$0H`lq  9u          ³a F   F   €€  ÿÿÿÿÿÿ          ` ³a     è    Œ$0H`lx
+ – èOèrmesh        Àg F   F   €€  ÿÿÿÿÿÿ          € Hg     è    Œ$0H`lx
+bè•èrmesh        Ûð A   A   €€  ÿÿÿÿÿÿ          @ jð     è    Œ$0H`lx bèrmesh        ®  F   F   €€  ÿÿÿÿÿÿ          � hð     è    Œ$0H`lx
+bènèrmesh       “À  F   F   €€  ÿÿÿÿÿÿ          p Ó     è    Œ$0H`lx
+ ðèðèrmesh       »O A   A   €€  ÿÿÿÿÿÿ          P Š‘     è    Œ$0H`lx èrmesh       ÀO F   F   €€  ÿÿÿÿÿÿ            ˆ‘     è    Œ$0H`lx
+èèrmesh       ³a F   F   €€  ÿÿÿÿÿÿ          € ó£     è    Œ$0H`lx
+ ’è‘èrmesh       Ûð A   A   €€  ÿÿÿÿÿÿ          ` ª2     è    Œ$0H`lx ¤èrmesh       S
+  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ°      
+     ªª           
 
 ÿÿÿÿÿÿ
-       á
-  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ�      
-    ªª           
+       ~
+  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ�      
+     ªª           
 
 ÿÿÿÿÿÿ
-         L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿp      
-    ªª           
+       ª  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿp      
+     ªª           
 
 ÿÿÿÿÿÿ
-       Ð  E   E   Ð€  ÿÿÿÿÿÿ          € ‚%              ˆ           
-             E   E   Ð€  ÿÿÿÿÿÿ            ‚%            ˆ  –        
-                    Ô€              ®  ?   ?   Ð€<                ƒ         ˆ  ø       
-          ¾        Ô€                ?   ?   Ð€<                ° ƒ         ˆ  ”       
-          µ        Ô€              ø  L   L   ‹<                
-�            ªª           
+       m  E   E   Ð€  ÿÿÿÿÿÿ          € ‚%              ˆ           
+           ¼  E   E   Ð€  ÿÿÿÿÿÿ            ‚%            ˆ  –        
+           ô  E   E   Ð€  ÿÿÿÿÿÿ          À ‚%            ˆ  3       
+           i  ?   ?   Ð€<                Ð ƒ         ˆ         
+          y        Ô€              Ç  ?   ?   Ð€<                ° ƒ         ˆ  °       
+          p        Ô€                N   N   ˆƒ<                
+              ªª           
      
 
-               Ô€              _  L   L   ƒ<                
-À           ªª           
+       +        Ô€              ‚  N   N   ˆƒ<                
+             ªª           
      
 
-               Ô€              Ç  L   L   ƒ<                
-           ªª           
+       ?        Ô€              ê  N   N   ˆƒ<                
+             ªª           
      
 
-       3        Ô€              ö  `   `   ƒ<                0     
-     ªª    E  0    @  
+       $        Ô€              ë  b   b   ˆƒ<                       
+      ªª    E  0    @  
 
-À 	                                       Ô€              ]   `   `   ƒ<                Ð      
-     ªª    E  0    @  
+À 	                              û        Ô€              R  b   b   ˆƒ<                       
+      ªª    E  0    @  
 
-À 	                              2!        Ô€              þ4  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ            ªª           
+À 	                              +        Ô€              ÷0  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ�            ªª           
 ÿÿÿÿÿÿ
-       )5  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà          ªª           
+       "1  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ           ªª           
 ÿÿÿÿÿÿ
-       U6  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ@         ªª           
+       N2  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà           ªª           
 ÿÿÿÿÿÿ
-       l:        Ô€               =  L   L   ‹<                P     
-     ªª           
+       Ú6        Ô€              …7  N   N   ˆƒ<                      
+      ªª           
 
      
-       =        Ô€              g=  L   L   ƒ<                ð      
-     ªª           
+       •7        Ô€              ì7  N   N   ˆƒ<                      
+      ªª           
 
      
-       $>        Ô€              ç>  `   `   ƒ<                
-°            ªª    E  0    @  
+       ©8        Ô€              p9  b   b   ˆƒ<                
+             ªª    E  0    @  
 
- 	À                              ÷>        Ô€              `?  `   `   ƒ<                
-           ªª    E  0    @  
+ 	À                              €9        Ô€              é9  b   b   ˆƒ<                
+            ªª    E  0    @  
 
- 	À                              5@        Ô€              ø@  `   `   ƒ<                
-`          ªª    E  0    @  
-
- 	À                              “À  F   F   €€  ÿÿÿÿÿÿ          E     è    Œ$0H`lx
- ªèèrmesh        î  F   F   €€  ÿÿÿÿÿÿ          p¨r     è    Œ$0H`lx
-Eèãèrmesh       »/ A   A   €€  ÿÿÿÿÿÿ          À Ê³     è    Œ$0H`lx Eèrmesh       ô£       Ô€              ·¤ `   `   ƒ<                €     
-     ªª    E  0   @  
-
-À 	                              Ç¤       Ô€              ¥ `   `   ƒ<                      
-     ªª    E  0   @  
-
-À 	                              ó¥       Ô€              ¶¦ `   `   ƒ<                
-Ð            ªª    E  0   @  
-
- 	À                              Æ¦       Ô€              \§ `   `   ƒ<                
-0          ªª    E  0   @  
-
- 	À                              1¨       Ô€              « `   `   ‹<                
-�          ªª    E  0   @  
-
- 	À                              ¼­ `   `   ‹<                
-�          ªª    E  0   @  
-
- 	À                              ³a F   F   €€  ÿÿÿÿÿÿ          @3æ&     è    Œ$0H`lx
- sè´èrmesh       À� F   F   €€  ÿÿÿÿÿÿ           È'     è    Œ$0H`lx
-æ&è
-&èrmesh       ÛÐ A   A   €€  ÿÿÿÿÿÿ          à êT'     è    Œ$0H`lx æ&èrmesh       4õ       Ô€              ®õ /   /   Ð€<                °„       
-            ¾õ       Ô€              ö /   /   Ð€<                P„       
-            ¡ö       Ô€              “À  F   F   €€  ÿÿÿÿÿÿ          `S‡.     è    Œ$0H`lx
- 'èU'èrmesh        î  F   F   €€  ÿÿÿÿÿÿ          Àè´.     è    Œ$0H`lx
-‡.è«-èrmesh       T$ E   E   Ð€  ÿÿÿÿÿÿ          Ð‚%         
-   ˆ                    £$ E   E   Ð€  ÿÿÿÿÿÿ          p‚%         
-   ˆ  ª                  ˆ& ?   ?   Ðˆ<                 ƒ        
-   ˆ                     ˜&       Ô€              æ& ?   ?   Ð€<                €ƒ      
-   ˆ  –                  ( ?   ?   Ðˆ<                 ƒ        
-   ˆ                     -(       Ô€              Ÿ( ?   ?   Ðˆ<                €ƒ      
-   ˆ  –                  ®) ?   ?   Ðˆ<                €ƒ      
-   ˆ  –                  Æ* ?   ?   Ðˆ<                €ƒ      
-   ˆ  –                  o+       Ô€              ý+ ?   ?   Ð€<                àƒ      
-   ˆ  -                  0       Ô€              Ã0 `   `   ƒ<                ð     
-     ªª    E  0   @  
-
-À 	                              Ó0       Ô€              *1 `   `   ƒ<                �     
-     ªª    E  0   @  
-
-À 	                              ÿ1       Ô€              Â2 `   `   ƒ<                
-           ªª    E  0   @  
-
- 	À                              Ò2       Ô€              h3 `   `   ƒ<                
-           ªª    E  0   @  
-
- 	À                              µ4 `   `   ‹<                
-           ªª    E  0   @  
-
- 	À                              Š5       Ô€              8 `   `   ‹<                
-           ªª    E  0   @  
-
- 	À                              ô£       Ô€              ·¤ `   `   ƒ<                     
-     ªª    E  0   @  
-
-À 	                              Ç¤       Ô€              ¥ `   `   ƒ<                °     
-     ªª    E  0   @  
-
-À 	                              ó¥       Ô€              ¶¦ `   `   ƒ<                
-            ªª    E  0   @  
-
- 	À                              Æ¦       Ô€              ›§ `   `   ƒ<                
-À          ªª    E  0   @  
-
- 	À                              p¨       Ô€              3© `   `   ƒ<                
-           ªª    E  0   @  
-
- 	À                              « `   `   ‹<                
-           ªª    E  0   @  
-
- 	À                              ³a F   F   €€  ÿÿÿÿÿÿ          Ðs(6     è    Œ$0H`lx
- µ.èU'èrmesh       À� F   F   €€  ÿÿÿÿÿÿ          0V6     è    Œ$0H`lx
-(6èp5èrmesh       ›Î /   /   Ð€<                à„                   0Ï       Ô€              ªÏ /   /   Ð€<                @„                   #Ð -   -   Ð€<                ðrmeshu  4        ÑÑ -   -   Ðˆ<                ðrmeshu  4        bÒ       Ô€              ØÒ -   -   Ð€<                @rmeshu  7        èÒ       Ô€              ýÔ -   -   Ðˆ<                @rmeshu  7        Õ       Ô€              ¿‚ E   E   Ð€  ÿÿÿÿÿÿ          P‚%         
-   ˆ                     ƒ E   E   Ð€  ÿÿÿÿÿÿ           ‚%         
-   ˆ  Ì                  “À  A   A   €€  ÿÿÿÿÿÿ          “É=     è    Œ$0H`lx V6èrmesh       ’Á  >   >   Ð€<                P  Œ$0H`lrmeshq   9u        ¢Á        Ô€              ðÁ  <   <   Ð€<                    Œ$0H`lq  9u         àÂ  <   <   Ðˆ<                    Œ$0H`lq  9u         …Ã        Ô€              ÂÃ  >   >   Ð€<                0  Œ$0H`lrmeshq  9u        kÄ        Ô€              õÄ  <   <   Ð€<                `   Œ$0H`lq  9u         Å        Ô€               î  F   F   €€  ÿÿÿÿÿÿ          `(÷=     è    Œ$0H`lx
-Ê=è=èrmesh       »W A   A   €€  ÿÿÿÿÿÿ          pJ`>     è    Œ$0H`lxÊ=èrmesh       ³a F   F   €€  ÿÿÿÿÿÿ          @³jE     è    Œ$0H`lx
- ÷=è`>èrmesh       À� F   F   €€  ÿÿÿÿÿÿ          pH˜E     è    Œ$0H`lx
-kEè¦Dèrmesh       Ûø A   A   €€  ÿÿÿÿÿÿ          €jF     è    Œ$0H`lxkEèrmesh       À	 E   E   Ð€  ÿÿÿÿÿÿ          €‚%         
-   ˆ                     ÎÀ	 E   E   Ð€  ÿÿÿÿÿÿ          P‚%         
-   ˆ  Ì                  ÑÁ	 ?   ?   Ð€<                �ƒ        
-   ˆ                     áÁ	       Ô€              /Â	 ?   ?   Ð€<                `ƒ      
-   ˆ  ¾                  ØÂ	       Ô€              fÃ	 ?   ?   Ð€<                �ƒ      
-   ˆ  T                 ƒÉ	       Ô€              FÊ	 `   `   ƒ<                      
-     ªª    E  0   @  
-
-À 	                              VÊ	       Ô€              ­Ê	 `   `   ƒ<                p     
-     ªª    E  0   @  
-
-À 	                              ñË	 `   `   ‹<                p     
-     ªª    E  0   @  
-
-À 	                              ÆÌ	       Ô€              ‰Í	 `   `   ƒ<                
-            ªª    E  0   @  
-
- 	À                              ™Í	       Ô€              wÎ	 `   `   ƒ<                
-€          ªª    E  0   @  
-
- 	À                              ÖÏ	 `   `   ‹<                
-€          ªª    E  0   @  
-
- 	À                               Ó	 `   `   ‹<                
-€          ªª    E  0   @  
-
- 	À                              @Õ	 `   `   ‹<                
-€          ªª    E  0   @  
-
- 	À                              â×	       Ô€              ¥Ø	 `   `   ƒ<                °     
-     ªª    E  0   @  
-
-À 	                              µØ	       Ô€              ®Ù	 `   `   ‹<                
-€          ªª    E  0   @  
-
- 	À                              ƒÚ	       Ô€              FÛ	 `   `   ƒ<                
-À          ªª    E  0   @  
-
- 	À                              Ü	 `   `   ƒ<                �     
-     ªª    E  0   @  
-
-À 	                              �Ý	 `   `   ‹<                �     
-     ªª    E  0   @  
-
-À 	                              VÞ	       Ô€              œà	 `   `   ‹<                
-°           ªª    E  0   @  
-
- 	À                              ¬à	       Ô€              á	 `   `   ƒ<                
-           ªª    E  0   @  
-
- 	À                              Øá	       Ô€              ›â	 `   `   ƒ<                
-Ð          ªª    E  0   @  
-
- 	À                              “À  F   F   €€  ÿÿÿÿÿÿ          °ÓM     è    Œ$0H`lx
- ˜EèFèrmesh        î  F   F   €€  ÿÿÿÿÿÿ          àh9M     è    Œ$0H`lx
-MèGLèrmesh       »W A   A   €€  ÿÿÿÿÿÿ          ÀŠ¢M     è    Œ$0H`lxkEèrmesh       @` -   -   Ð€<                Ðrmeshu  4        P`       Ô€              ž` -   -   Ð€<                Àrmeshu  7        /a       Ô€              ³a F   F   €€  ÿÿÿÿÿÿ          Ðó¬T     è    Œ$0H`lx
- 9Mè¢Mèrmesh       ®c >   >   Ðˆ<                à  Œ$0H`lrmeshq   9u        ¾c       Ô€              d -   -   Ð€<                àrmeshu  4        �d       Ô€              %e -   -   Ð€<                ðrmeshu  7        5e       Ô€              ÛØ A   A   €€  ÿÿÿÿÿÿ           ª#U     è    Œ$0H`lx­Tèrmesh       ýØ >   >   Ð€<                ð  Œ$0H`lrmeshq  9u        ¦Ù       Ô€              Ú -   -   Ð€<                rmeshu  4        ,Ú       Ô€              zÚ -   -   Ð€<                 rmeshu  7        Û       Ô€              Š	 /   /   Ð€<                „                   °Š	       Ô€              *‹	 /   /   Ð€<                 „                   )�	 /   /   Ðˆ<                 „                    Ž	 /   /   Ðˆ<                 „                   É�	 /   /   Ðˆ<                 „                   ©�	 /   /   Ðˆ<                 „                   î< <   <   Ð€<                „                  
-            þ<       Ô€              ¡= -   -   Ð€<                 rmeshu  4        �> -   -   Ðˆ<                 rmeshu  4        P? -   -   Ðˆ<                 rmeshu  4        @ -   -   Ðˆ<                 rmeshu  4        A -   -   Ðˆ<                 rmeshu  4        öA -   -   Ðˆ<                 rmeshu  4        “À  A   A   €€  ÿÿÿÿÿÿ           N\     è    Œ$0H`lx 9Mèrmesh       ’Á  >   >   Ð€<                   Œ$0H`lrmeshq   9u        ¢Á        Ô€              ðÁ  <   <   Ð€<                0   Œ$0H`lq  9u         •Â        Ô€              ÉÂ  >   >   Ð€<                @  Œ$0H`lrmeshq  9u        rÃ        Ô€              üÃ  <   <   Ð€<                0   Œ$0H`lq  9u         Ä        Ô€              `ì  -   -   Ð€<                Prmeshu  4        ñì        Ô€              gí  -   -   Ð€<                0rmeshu  7        wí        Ô€              »# A   A   €€  ÿÿÿÿÿÿ          @Ê°\     è    Œ$0H`lxN\èrmesh       ³a A   A   €€  ÿÿÿÿÿÿ          `3ïc     è    Œ$0H`lx±\èrmesh       ²b >   >   Ð€<                P  Œ$0H`lrmeshq   9u        Âb       Ô€              c <   <   Ð€<                p   Œ$0H`lq  9u         µc       Ô€              òc >   >   Ð€<                €  Œ$0H`lrmeshq  9u        ›d       Ô€              çe <   <   Ðˆ<                `   Œ$0H`lq  9u         ÷e       Ô€              ÛŒ A   A   €€  ÿÿÿÿÿÿ          Pêd     è    Œ$0H`lxN\èrmesh       ¸¿ A   A   €€  ÿÿÿÿÿÿ          pÈLd     è    Œ$0H`lxïcèrmesh       ¿  -   -   Ð€<                `rmeshu  4        (¿        Ô€              v¿  -   -   Ð€<                �rmeshu  7        À        Ô€              “À  F   F   €€  ÿÿÿÿÿÿ           S�k     è    Œ$0H`lx
-dèMdèrmesh       ³ï  <   <   €€  ÿÿÿÿÿÿ          p
-¿k     è    Œ$0H`lx rmesh       ˜ A   A   €€  ÿÿÿÿÿÿ          €èík     è    Œ$0H`lx�kèrmesh       ³a A   A   €€  ÿÿÿÿÿÿ          °s1s     è    Œ$0H`lxîkèrmesh       ¥c >   >   Ðˆ<                €  Œ$0H`lrmeshq   9u        µc       Ô€              d <   <   Ð€<                À   Œ$0H`lq  9u         ¨d       Ô€              Êd >   >   Ð€<                Ð  Œ$0H`lrmeshq  9u        µe >   >   Ðˆ<                Ð  Œ$0H`lrmeshq  9u        ^f       Ô€              èf <   <   Ð€<                �   Œ$0H`lq  9u         øf       Ô€              Û” A   A   €€  ÿÿÿÿÿÿ           *ds     è    Œ$0H`lx1sèrmesh       “À  F   F   €€  ÿÿÿÿÿÿ          à“Òz     è    Œ$0H`lx
-îkèdsèrmesh       » A   A   €€  ÿÿÿÿÿÿ          °J{     è    Œ$0H`lxÓzèrmesh       X -   -   Ð€<                ðrmeshu  4        é       Ô€              _ -   -   Ð€<                 rmeshu  7        o       Ô€              ˜ A   A   €€  ÿÿÿÿÿÿ          °(0{     è    Œ$0H`lxÓzèrmesh       º >   >   Ð€<                   Œ$0H`lrmeshq  9u        c       Ô€              Ù -   -   Ð€<                Àrmeshu  4        é       Ô€              @  -   -   Ð€<                rmeshu  7        Ñ        Ô€              ³a A   A   €€  ÿÿÿÿÿÿ           ³s‚     è    Œ$0H`lx{èrmesh       ²b >   >   Ð€<                Ð  Œ$0H`lrmeshq   9u        Âb       Ô€              c <   <   Ð€<                0   Œ$0H`lq  9u	         µc       Ô€              àc >   >   Ð€<                @  Œ$0H`lrmeshq  9u	        md       Ô€              ÷d <   <   Ð€<                à   Œ$0H`lq  9u 	        e       Ô€              ¸£ A   A   €€  ÿÿÿÿÿÿ          ðHµ‚     è    Œ$0H`lxt‚èrmesh       Û¬ A   A   €€  ÿÿÿÿÿÿ          Àj¾‚     è    Œ$0H`lxt‚èrmesh    	   “À  F   F   €€  ÿÿÿÿÿÿ          PÓŠ     è    Œ$0H`lx
-¾‚èµ‚èrmesh    	   ˜ A   A   €€  ÿÿÿÿÿÿ           hVŠ     è    Œ$0H`lxŠèrmesh    	   » A   A   €€  ÿÿÿÿÿÿ          ÐŠ_Š     è    Œ$0H`lxŠèrmesh    	   ³a F   F   €€  ÿÿÿÿÿÿ          `óµ‘     è    Œ$0H`lx
-_ŠèVŠèrmesh    	   ¸£ A   A   €€  ÿÿÿÿÿÿ          ˆ÷‘     è    Œ$0H`lx¶‘èrmesh    	   Û¬ A   A   €€  ÿÿÿÿÿÿ          àª ’     è    Œ$0H`lx¶‘èrmesh    
\ No newline at end of file
+ 	À                              Â:        Ô€               ®  F   F   €€  ÿÿÿÿÿÿ          ð ¨2     è    Œ$0H`lx
+¤è±èrmesh       “À  F   F   €€  ÿÿÿÿÿÿ          Ð E     è    Œ$0H`lx
+ 3è3èrmesh       »O A   A   €€  ÿÿÿÿÿÿ            ÊÓ     è    Œ$0H`lx Eèrmesh        ¤       Ô€              3¦ b   b   ˆ‹<                       
+      ªª    E  0   @  
+
+À 	                              C¦       Ô€              š¦ b   b   ˆƒ<                       
+      ªª    E  0   @  
+
+À 	                              s§       Ô€              :¨ b   b   ˆƒ<                
+              ªª    E  0   @  
+
+ 	À                              J¨       Ô€              à¨ b   b   ˆƒ<                
+             ªª    E  0   @  
+
+ 	À                              ¹©       Ô€              €ª b   b   ˆƒ<                
+             ªª    E  0   @  
+
+ 	À                              ÀO F   F   €€  ÿÿÿÿÿÿ           ÈÓ&     è    Œ$0H`lx
+EèR&èrmesh       ³a F   F   €€  ÿÿÿÿÿÿ          à 3æ&     è    Œ$0H`lx
+ Ô&èÔèrmesh       Ûð A   A   €€  ÿÿÿÿÿÿ          ° êt'     è    Œ$0H`lx æ&èrmesh       ‰       Ô€               /   /   Ð€<                „       
+                   Ô€              a /   /   Ð€<                ð „       
+            J /   /   Ðˆ<                ð „       
+            E /   /   Ðˆ<                ð „       
+            Ú       Ô€               ®  F   F   €€  ÿÿÿÿÿÿ           èt.     è    Œ$0H`lx
+æ&èó-èrmesh       “À  F   F   €€  ÿÿÿÿÿÿ           S‡.     è    Œ$0H`lx
+ u.èu'èrmesh       »O A   A   €€  ÿÿÿÿÿÿ          À 
+/     è    Œ$0H`lx ‡.èrmesh       ÀO F   F   €€  ÿÿÿÿÿÿ          06     è    Œ$0H`lx
+‡.èh5èrmesh       ³a F   F   €€  ÿÿÿÿÿÿ          s(6     è    Œ$0H`lx
+ 6è/èrmesh       Ûð A   A   €€  ÿÿÿÿÿÿ          Ð *·6     è    Œ$0H`lx (6èrmesh       T„ E   E   Ð€  ÿÿÿÿÿÿ          @‚%         
+   ˆ  É                  £„ E   E   Ð€  ÿÿÿÿÿÿ           ‚%         
+   ˆ  `                  ¦… ?   ?   Ð€<                à ƒ        
+   ˆ                     ¶…       Ô€              † ?   ?   Ð€<                0ƒ      
+   ˆ  Ê                  ­†       Ô€              ;‡ ?   ?   Ð€<                Pƒ      
+   ˆ  u                 ë�       Ô€              ²‘ b   b   ˆƒ<                0      
+      ªª    E  0   @  
+
+À 	                              Â‘       Ô€              ’ b   b   ˆƒ<                0      
+      ªª    E  0   @  
+
+À 	                              ò’       Ô€              ¹“ b   b   ˆƒ<                
+0             ªª    E  0   @  
+
+ 	À                              É“       Ô€              _” b   b   ˆƒ<                
+0            ªª    E  0   @  
+
+ 	À                              °• b   b   ˆ‹<                
+0            ªª    E  0   @  
+
+ 	À                              Ã˜ b   b   ˆ‹<                
+0            ªª    E  0   @  
+
+ 	À                              œ       Ô€              Ýœ b   b   ˆƒ<                @      
+      ªª    E  0   @  
+
+À 	                              íœ       Ô€              !Ÿ b   b   ˆ‹<                
+0            ªª    E  0   @  
+
+ 	À                              úŸ       Ô€              ‘  b   b   ˆƒ<                @      
+      ªª    E  0   @  
+
+À 	                              j¡       Ô€              1¢ b   b   ˆƒ<                
+@             ªª    E  0   @  
+
+ 	À                              A¢       Ô€              ³¢ b   b   ˆƒ<                
+@            ªª    E  0   @  
+
+ 	À                              Ó¤ b   b   ˆ‹<                
+@            ªª    E  0   @  
+
+ 	À                              ¬¥       Ô€              Ë9        Ô€              E:  /   /   Ð€<                `„       
+            U:        Ô€              £:  /   /   Ð€<                @„       
+            8;        Ô€               ®  F   F   €€  ÿÿÿÿÿÿ          p(·=     è    Œ$0H`lx
+(6èí<èrmesh       “À  F   F   €€  ÿÿÿÿÿÿ          P“É=     è    Œ$0H`lx
+ ·=è·6èrmesh       »O A   A   €€  ÿÿÿÿÿÿ          ð JX>     è    Œ$0H`lx Ê=èrmesh       ÀO F   F   €€  ÿÿÿÿÿÿ          €HXE     è    Œ$0H`lx
+Ê=èŽDèrmesh       ³a F   F   €€  ÿÿÿÿÿÿ          `³jE     è    Œ$0H`lx
+ XEèX>èrmesh       Ûð A   A   €€  ÿÿÿÿÿÿ           jùE     è    Œ$0H`lx kEèrmesh       
+Â	       Ô€              ÑÂ	 b   b   ˆƒ<                P      
+      ªª    E  0   @  
+
+À 	                              áÂ	       Ô€              8Ã	 b   b   ˆƒ<                P      
+      ªª    E  0   @  
+
+À 	                              Ä	       Ô€              ÔÄ	 E   E   Ð€  ÿÿÿÿÿÿ          ‚%              ˆ           
+           #Å	 E   E   Ð€  ÿÿÿÿÿÿ          p‚%            ˆ  ž        
+           �Ç	       Ô€              VÈ	 b   b   ˆƒ<                `      
+      ªª    E  0   @  
+
+À 	                              fÈ	       Ô€              ½È	 b   b   ˆƒ<                `      
+      ªª    E  0   @  
+
+À 	                              –É	       Ô€              Iä E   E   Ð€  ÿÿÿÿÿÿ           ‚%              ˆ           
+           ˜ä E   E   Ð€  ÿÿÿÿÿÿ          €‚%            ˆ  ž        
+           Ðå E   E   Ð€  ÿÿÿÿÿÿ          �‚%            ˆ  8       
+           )è       Ô€              ·è ?   ?   Ð€<                 ƒ         ½  É       
+          Çè       Ô€              é ?   ?   Ð€<                �ƒ         ½  `       
+          ¾é       Ô€              …ê b   b   ˆƒ<                
+P             ªª    E  0   @  
+
+ 	À                              •ê       Ô€              ìê b   b   ˆƒ<                
+P            ªª    E  0   @  
+
+ 	À                              Iì       Ô€              ­î ?   ?   Ðˆ<                °ƒ         ˆ  Ç       
+          ½î       Ô€              ï ?   ?   Ð€<                 ƒ         ˆ  ^       
+          ´ï       Ô€              èï b   b   ˆ‹<                
+P            ªª    E  0   @  
+
+ 	À                              Áð       Ô€              ˆñ b   b   ˆƒ<                
+0            ªª    E  0   @  
+
+ 	À                              Wò b   b   ˆ‹<                
+`             ªª    E  0   @  
+
+ 	À                              gò       Ô€              ó b   b   ˆƒ<                
+`            ªª    E  0   @  
+
+ 	À                              –ô b   b   ˆ‹<                
+`            ªª    E  0   @  
+
+ 	À                              oõ       Ô€              6ö b   b   ˆƒ<                
+@            ªª    E  0   @  
+
+ 	À                               ®  F   F   €€  ÿÿÿÿÿÿ          ÀhùL     è    Œ$0H`lx
+kEè/Lèrmesh       “À  F   F   €€  ÿÿÿÿÿÿ          °ÓM     è    Œ$0H`lx
+ ùLèùEèrmesh       »O A   A   €€  ÿÿÿÿÿÿ          0ŠšM     è    Œ$0H`lx Mèrmesh       ÀO F   F   €€  ÿÿÿÿÿÿ          ÐˆšT     è    Œ$0H`lx
+Mè/Lèrmesh       ³a F   F   €€  ÿÿÿÿÿÿ          Àó¬T     è    Œ$0H`lx
+ ›TèšMèrmesh       î$ <   <   Ð€<                à„                  
+            þ$       Ô€              L% /   /   Ð€<                Ð„       
+            r& -   -   Ð€<                ðrmeshu  4        â& /   /   Ðˆ<                Ð„       
+            w'       Ô€              ,( -   -   Ðˆ<                ðrmeshu  4        ö( -   -   Ðˆ<                ðrmeshu  4        Û) -   -   Ðˆ<                ðrmeshu  4        À* -   -   Ðˆ<                ðrmeshu  4        ·+ -   -   Ðˆ<                ðrmeshu  4        Š, -   -   Ðˆ<                ðrmeshu  4        ˜®  A   A   €€  ÿÿÿÿÿÿ           ¨;\     è    Œ$0H`lx­Tèrmesh       “À  F   F   €€  ÿÿÿÿÿÿ          àN\     è    Œ$0H`lx
+ <\èšMèrmesh       {M /   /   Ð€<                ð„                   N       Ô€              2N -   -   Ð€<                 rmeshu  4        ÃN       Ô€              9O -   -   Ð€<                Prmeshu  7        IO       Ô€              ÿO A   A   €€  ÿÿÿÿÿÿ          `ÊÜ\     è    Œ$0H`lx N\èrmesh       !P >   >   Ð€<                  Œ$0H`lrmeshq  9u        @Q -   -   Ð€<                prmeshu  4        PQ       Ô€              žQ >   >   Ðˆ<                  Œ$0H`lrmeshq  9u        GR       Ô€              {R -   -   Ð€<                 rmeshu  7        S       Ô€              ¸O A   A   €€  ÿÿÿÿÿÿ          ÈÜc     è    Œ$0H`lxN\èrmesh       ³a A   A   €€  ÿÿÿÿÿÿ          03ïc     è    Œ$0H`lx Ýcèrmesh       ²b >   >   Ð€<                €  Œ$0H`lrmeshq   9u        Âb       Ô€              c <   <   Ð€<                @   Œ$0H`lq  9u         µc       Ô€              éc >   >   Ð€<                P  Œ$0H`lrmeshq  9u        Êd >   >   Ðˆ<                P  Œ$0H`lrmeshq  9u        se       Ô€              ýe <   <   Ð€<                �   Œ$0H`lq  9u         f       Ô€              ÛÐ A   A   €€  ÿÿÿÿÿÿ           ê]d     è    Œ$0H`lxïcèrmesh       ˜®  A   A   €€  ÿÿÿÿÿÿ           è}k     è    Œ$0H`lxïcèrmesh       “À  F   F   €€  ÿÿÿÿÿÿ          `S�k     è    Œ$0H`lx
+ ~kè^dèrmesh       ¸O A   A   €€  ÿÿÿÿÿÿ          0s     è    Œ$0H`lx�kèrmesh       ³a F   F   €€  ÿÿÿÿÿÿ          ps1s     è    Œ$0H`lx
+ sè^dèrmesh       ›Î -   -   Ð€<                €rmeshu  4        ,Ï       Ô€              ¢Ð -   -   Ðˆ<                Àrmeshu  7        ²Ð       Ô€              hÑ A   A   €€  ÿÿÿÿÿÿ          Ð* s     è    Œ$0H`lx1sèrmesh       ŠÑ >   >   Ð€<                �  Œ$0H`lrmeshq  9u        3Ò       Ô€              »Ò -   -   Ð€<                àrmeshu  4        ËÒ       Ô€              Ó -   -   Ð€<                 rmeshu  7        ªÓ       Ô€              ˜®  A   A   €€  ÿÿÿÿÿÿ          @(Àz     è    Œ$0H`lx1sèrmesh       “À  A   A   €€  ÿÿÿÿÿÿ          °“Òz     è    Œ$0H`lx Àzèrmesh       ’Á  >   >   Ð€<                ð  Œ$0H`lrmeshq   9u        ¢Á        Ô€              ðÁ  <   <   Ð€<                À   Œ$0H`lq  9u         •Â        Ô€              ÉÂ  >   >   Ð€<                Ð  Œ$0H`lrmeshq  9u        áÃ  >   >   Ðˆ<                Ð  Œ$0H`lrmeshq  9u        ŠÄ        Ô€              Å  <   <   Ð€<                    Œ$0H`lq  9u         $Å        Ô€              »W A   A   €€  ÿÿÿÿÿÿ          Ji{     è    Œ$0H`lxÓzèrmesh       ¸O A   A   €€  ÿÿÿÿÿÿ          PHa‚     è    Œ$0H`lx1sèrmesh       @` -   -   Ð€<                `rmeshu  4        P`       Ô€              ž` -   -   Ð€<                àrmeshu  7        /a       Ô€              ³a F   F   €€  ÿÿÿÿÿÿ          ð³s‚     è    Œ$0H`lx
+ a‚èi{èrmesh       ºb >   >   Ð€<                p  Œ$0H`lrmeshq   9u        Êb       Ô€              c -   -   Ð€<                 rmeshu  4        ©c       Ô€              :d -   -   Ð€<                €rmeshu  7        Jd       Ô€              Ûø A   A   €€  ÿÿÿÿÿÿ           j
+ƒ     è    Œ$0H`lxt‚èrmesh    	   “À  A   A   €€  ÿÿÿÿÿÿ          ÓŠ     è    Œ$0H`lx
+ƒèrmesh    	   ’Á  >   >   Ð€<                �  Œ$0H`lrmeshq   9u     	   ¢Á        Ô€           	   ðÁ  <   <   Ð€<                    Œ$0H`lq  9u      	   •Â        Ô€           	   ÒÂ  >   >   Ð€<                0  Œ$0H`lrmeshq  9u     	   {Ã        Ô€           	   Ä  <   <   Ð€<                    Œ$0H`lq  9u      	   Ä        Ô€           	   ˜Æ  A   A   €€  ÿÿÿÿÿÿ          °hŠ     è    Œ$0H`lxŠèrmesh    	   »W A   A   €€  ÿÿÿÿÿÿ          0Š«Š     è    Œ$0H`lxŠèrmesh    	   ³a F   F   €€  ÿÿÿÿÿÿ          @óµ‘     è    Œ$0H`lx
+«ŠèŠèrmesh    	   ¸� A   A   €€  ÿÿÿÿÿÿ          Àˆã‘     è    Œ$0H`lx¶‘èrmesh    	   Ûø A   A   €€  ÿÿÿÿÿÿ          @ªL’     è    Œ$0H`lx¶‘èrmesh    
\ No newline at end of file
diff -Naur ns-3.23/src/mesh/test/dot11s/hwmp-reactive-regression-test-2-1.pcap ns-3.24/src/mesh/test/dot11s/hwmp-reactive-regression-test-2-1.pcap
--- ns-3.23/src/mesh/test/dot11s/hwmp-reactive-regression-test-2-1.pcap	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/test/dot11s/hwmp-reactive-regression-test-2-1.pcap	2015-09-15 11:18:44.000000000 -0700
@@ -1,222 +1,208 @@
-ÔÃ²¡          ÿÿ  i       u$  <   <   €€  ÿÿÿÿÿÿ            $      è    Œ$0H`lx rmesh        —$  >   >   Ð€<                    Œ$0H`lrmeshq   9u         ¯%  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         £&  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         |'  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ‚(  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ˆ)  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         Ž*  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         j@  >   >   Ð€<      	             Œ$0H`lrmeshq   9u         RB  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         (–  A   A   €€  ÿÿÿÿÿÿ           (–      è    Œ$0H`lx $ èrmesh        uÄ  >   >   Ð€<                    Œ$0H`lrmeshq   9u         iÅ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         oÆ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         QÇ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         WÈ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ‰É  A   A   €€  ÿÿÿÿÿÿ           “È      è    Œ$0H`lx – èrmesh        ØÉ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ±Ê  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         œË  >   >   Ð€<                0   Œ$0H`lrmeshq   9u         �Ì  >   >   Ðˆ<                0   Œ$0H`lrmeshq   9u         ŸÍ  >   >   Ðˆ<                0   Œ$0H`lrmeshq   9u         “Î  >   >   Ðˆ<                0   Œ$0H`lrmeshq   9u         ™Ï  >   >   Ðˆ<                0   Œ$0H`lrmeshq   9u         ŸÐ  >   >   Ðˆ<                0   Œ$0H`lrmeshq   9u         ÂÑ        Ô€       	        8Ò  -   -   Ð€<      	          0 rmeshu  7         ºÒ  >   >   Ðˆ<                0   Œ$0H`lrmeshq   9u         cÓ        Ô€               íÓ  <   <   Ð€<                      Œ$0H`lq   9u          ýÓ        Ô€               TÔ  -   -   Ð€<                @ rmeshu   4         åÔ        Ô€               [Õ  -   -   Ð€<                @ rmeshu  7         kÕ        Ô€               7 >   >   Ð€<                0   Œ$0H`lrmeshq   9u         7       Ô€               c7 <   <   Ð€<                P    Œ$0H`lq  9u          8       Ô€               2j       Ô€               ¼j <   <   Ð€<                @    Œ$0H`lq  9u          ¢k >   >   Ð€<                P   Œ$0H`lrmeshq  9u         ¥l       Ô€               •• <   <   €€  ÿÿÿÿÿÿ          P -•     è    Œ$0H`lx rmesh        ·• >   >   Ð€<                `   Œ$0H`lrmeshq  9u         Æ– >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         Ã— >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         ·˜ >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         Æ™ >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         Ÿš >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         ®› >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         ’© >   >   Ð€<      	          `   Œ$0H`lrmeshq   9u         •ª       Ô€       	        •5 >   >   Ð€<                p   Œ$0H`lrmeshq  9u         ›6 >   >   Ðˆ<                p   Œ$0H`lrmeshq  9u         †7 >   >   Ðˆ<                p   Œ$0H`lrmeshq  9u         _8 >   >   Ðˆ<                p   Œ$0H`lrmeshq  9u         S9 >   >   Ðˆ<                p   Œ$0H`lrmeshq  9u         k: >   >   Ðˆ<                p   Œ$0H`lrmeshq  9u         h; >   >   Ðˆ<                p   Œ$0H`lrmeshq  9u         A< -   -   Ð€<                € rmeshu   4         Ò<       Ô€               ­J -   -   Ð€<      	          p rmeshu  9         œK       Ô€       	        #b A   A   €€  ÿÿÿÿÿÿ          ` ³a     è    Œ$0H`lx – èrmesh        Hg F   F   €€  ÿÿÿÿÿÿ          � Hg     è    Œ$0H`lx
-bè•èrmesh        Oh >   >   Ð€<                €   Œ$0H`lrmeshq   9u         _h       Ô€               ­h -   -   Ð€<                  rmeshu  4         >i       Ô€               Æi -   -   Ð€<                � rmeshu  7         Öi       Ô€              j  >   >   Ð€<      	              Œ$0H`lrmeshq   9u        m	        Ô€       	       J
-        Ô€       	       Ô
-  <   <   Ð€<      	          °    Œ$0H`lq  9u         },  A   A   €€  ÿÿÿÿÿÿ          À Mn     è    Œ$0H`lxJèrmesh       Ÿ,  >   >   Ð€<                °   Œ$0H`lrmeshq  9u        H-        Ô€              Ò-  <   <   Ð€<                Ð    Œ$0H`lq  9u         â-        Ô€              �.  >   >   Ð€<                à   Œ$0H`lrmeshq  9u        ­.        Ô€              /  <   <   Ð€<                À    Œ$0H`lq  9u         »/        Ô€              (®  F   F   €€  ÿÿÿÿÿÿ          Ð hð     è    Œ$0H`lx
-bènèrmesh       Á  F   F   €€  ÿÿÿÿÿÿ          p Ó     è    Œ$0H`lx
- ðèÐèrmesh       �¡ A   A   €€  ÿÿÿÿÿÿ          ð mã     è    Œ$0H`lxJèrmesh       +b F   F   €€  ÿÿÿÿÿÿ          € ó£     è    Œ$0H`lx
- ðèqèrmesh       Hg F   F   €€  ÿÿÿÿÿÿ          à ˆ©     è    Œ$0H`lx
-¤èãèrmesh       
-
-  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ     
-    ªª           
+ÔÃ²¡          ÿÿ  i       u$  <   <   €€  ÿÿÿÿÿÿ            $      è    Œ$0H`lx rmesh        —$  >   >   Ð€<                    Œ$0H`lrmeshq   9u         ¯%  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         £&  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         |'  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ‚(  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ˆ)  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         Ž*  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         j@  >   >   Ð€<      	             Œ$0H`lrmeshq   9u         pA  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         RB  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         jC  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         yD  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         RE  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         jF  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         (–  A   A   €€  ÿÿÿÿÿÿ           (–      è    Œ$0H`lx $ èrmesh        uÄ  >   >   Ð€<                    Œ$0H`lrmeshq   9u         iÅ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         oÆ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         QÇ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         WÈ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ‰É  A   A   €€  ÿÿÿÿÿÿ           “È      è    Œ$0H`lx – èrmesh        ØÉ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ±Ê  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         œË  >   >   Ð€<                0   Œ$0H`lrmeshq   9u         �Ì  >   >   Ðˆ<                0   Œ$0H`lrmeshq   9u         ŸÍ  >   >   Ðˆ<                0   Œ$0H`lrmeshq   9u         “Î  >   >   Ðˆ<                0   Œ$0H`lrmeshq   9u         ™Ï  >   >   Ðˆ<                0   Œ$0H`lrmeshq   9u         ŸÐ  >   >   Ðˆ<                0   Œ$0H`lrmeshq   9u         HÑ        Ô€               8Ò  -   -   Ð€<      	          0 rmeshu  7         °Ò  <   <   Ðˆ<                      Œ$0H`lq   9u          ÀÒ        Ô€               )Ó  -   -   Ð€<                @ rmeshu   4         ºÓ        Ô€               BÔ  -   -   Ðˆ<      	          0 rmeshu  7         Õ  -   -   Ð€<                @ rmeshu  7         Õ        Ô€               7 >   >   Ð€<                0   Œ$0H`lrmeshq   9u         7       Ô€               c7 <   <   Ð€<                P    Œ$0H`lq  9u          8       Ô€               IP >   >   Ð€<                @   Œ$0H`lrmeshq  9u         LQ       Ô€               2j       Ô€               ¼j <   <   Ð€<                P    Œ$0H`lq  9u          •• <   <   €€  ÿÿÿÿÿÿ          P -•     è    Œ$0H`lx rmesh        ·• >   >   Ð€<                `   Œ$0H`lrmeshq  9u         �– >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         Ÿ— >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         œ˜ >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         �™ >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         Ÿš >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         x› >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         !œ       Ô€               «œ <   <   Ð€<                `    Œ$0H`lq   9u          »œ       Ô€               ‘� >   >   Ð€<                p   Œ$0H`lrmeshq   9u         ¡�       Ô€               ï� <   <   Ð€<                p    Œ$0H`lq  9u          ”ž       Ô€               ’© >   >   Ð€<      	          €   Œ$0H`lrmeshq  9u         •ª       Ô€       	        >6       Ô€       	        È6 <   <   Ð€<      	          �    Œ$0H`lq  9u          +b F   F   €€  ÿÿÿÿÿÿ          ` ³a     è    Œ$0H`lx
+ – èOèrmesh        Hg F   F   €€  ÿÿÿÿÿÿ          € Hg     è    Œ$0H`lx
+bè•èrmesh       },  A   A   €€  ÿÿÿÿÿÿ            Mn     è    Œ$0H`lxèrmesh       (®  F   F   €€  ÿÿÿÿÿÿ          � hð     è    Œ$0H`lx
+bènèrmesh       Á  F   F   €€  ÿÿÿÿÿÿ          p Ó     è    Œ$0H`lx
+ ðèðèrmesh       ¥Í F   F   €€  ÿÿÿÿÿÿ          ° m     è    Œ$0H`lx
+ðè¿èrmesh       HO F   F   €€  ÿÿÿÿÿÿ            ˆ‘     è    Œ$0H`lx
+èèrmesh       +b F   F   €€  ÿÿÿÿÿÿ          € ó£     è    Œ$0H`lx
+ ’è‘èrmesh       §	  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ      
+     ªª           
 
 ÿÿÿÿÿÿ
-       5
-  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿð      
-    ªª           
+       Ò	  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ°      
+     ªª           
 
 ÿÿÿÿÿÿ
-       a  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ�      
-    ªª           
+       þ
+  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ�      
+     ªª           
 
 ÿÿÿÿÿÿ
-       “  E   E   Ð€  ÿÿÿÿÿÿ            ‚%            ˆ  –        
-           â  E   E   Ð€  ÿÿÿÿÿÿ           ‚%            ˆ  3       
-             E   E   Ð€  ÿÿÿÿÿÿ           ‚%            ˆ  Ë       
-           s        Ô€       	       ã  ?   ?   Ðˆ<                0ƒ         ˆ  -       
-          ó        Ô€              A  ?   ?   Ð€<                ƒ         ˆ  ø       
-          ê        Ô€              x  ?   ?   Ð€<                ° ƒ         ˆ  ”       
-          4        Ô€              ß  L   L   ƒ<                
-À           ªª           
+       0  E   E   Ð€  ÿÿÿÿÿÿ            ‚%            ˆ  –        
+             E   E   Ð€  ÿÿÿÿÿÿ          À ‚%            ˆ  3       
+           ·  E   E   Ð€  ÿÿÿÿÿÿ          Ð ‚%            ˆ  Í       
+           ž  ?   ?   Ð€<                à ƒ         ˆ  /       
+          ®        Ô€              ü  ?   ?   Ð€<                Ð ƒ         ˆ         
+          ¥        Ô€              3  ?   ?   Ð€<                ° ƒ         ˆ  °       
+          W        Ô€                N   N   ˆƒ<                
+             ªª           
      
 
-       ï        Ô€              F  L   L   ƒ<                
-           ªª           
+               Ô€              i  N   N   ˆƒ<                
+             ªª           
      
 
-               Ô€              ®  L   L   ƒ<      	          
-@          ªª           
+       &        Ô€              Ñ  N   N   ˆƒ<      	          
+             ªª           
      
 
-       3        Ô€       	       ö  `   `   ƒ<                P     
-     ªª    E  0    @  
+                Ô€       	       ç  b   b   ˆƒ<                       
+      ªª    E  0    @  
 
-À 	                                      Ô€              ]  `   `   ƒ<                0     
-     ªª    E  0    @  
+À 	                              ÷        Ô€              N  b   b   ˆƒ<                       
+      ªª    E  0    @  
 
-À 	                              2         Ô€              õ   `   `   ƒ<                Ð      
-     ªª    E  0    @  
+À 	                              '        Ô€              î  b   b   ˆƒ<                       
+      ªª    E  0    @  
 
-À 	                              ©5  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà          ªª           
+À 	                              …,  F   F   €€  ÿÿÿÿÿÿ          ð �°     è    Œ$0H`lx
+’è`èrmesh       ¢1  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ           ªª           
 ÿÿÿÿÿÿ
-       Ô5  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ@         ªª           
+       Í1  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà           ªª           
 ÿÿÿÿÿÿ
-        7  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ`         ªª           
+       ù2  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ           ªª           
 ÿÿÿÿÿÿ
-       „9        Ô€       	       /:  L   L   ƒ<                p     
-     ªª           
-
-     
-       ?:        Ô€              –:  L   L   ƒ<                P     
-     ªª           
+       ò5        Ô€       	       �6  N   N   ˆƒ<                      
+      ªª           
 
      
-       <  L   L   ‹<                P     
-     ªª           
+       ­6        Ô€              7  N   N   ˆƒ<                      
+      ªª           
 
      
-       <=        Ô€              ç=  L   L   ƒ<                ð      
-     ªª           
+       Á7        Ô€              l8  N   N   ˆƒ<                      
+      ªª           
 
      
-       #?        Ô€              ø?  `   `   ƒ<                
-           ªª    E  0    @  
+       ¬9        Ô€              …:  b   b   ˆƒ<                
+            ªª    E  0    @  
+
+ 	À                              •:        Ô€              ì:  b   b   ˆƒ<                
+            ªª    E  0    @  
 
- 	À                              @        Ô€              _@  `   `   ƒ<                
-`          ªª    E  0    @  
+ 	À                              Å;        Ô€              Œ<  b   b   ˆƒ<      	          
+            ªª    E  0    @  
 
- 	À                              4A        Ô€              Á  F   F   €€  ÿÿÿÿÿÿ          E     è    Œ$0H`lx
- ªèèrmesh       (î  F   F   €€  ÿÿÿÿÿÿ          p¨r     è    Œ$0H`lx
-Eèãèrmesh       ¥… F   F   €€  ÿÿÿÿÿÿ          �­	&     è    Œ$0H`lx
-Œèsèrmesh       ô¢       Ô€       	       ·£ `   `   ƒ<                      
-     ªª    E  0   @  
-
-À 	                              Ç£       Ô€              ¤ `   `   ƒ<                €     
-     ªª    E  0   @  
-
-À 	                              ó¤       Ô€              ¶¥ `   `   ƒ<                      
-     ªª    E  0   @  
-
-À 	                              ò¦       Ô€              ô§ `   `   ƒ<                
-0          ªª    E  0   @  
-
- 	À                              ¨       Ô€              [¨ `   `   ƒ<                
-�          ªª    E  0   @  
-
- 	À                              nª `   `   ‹<                
-�          ªª    E  0   @  
-
- 	À                              #­ `   `   ‹<                
-�          ªª    E  0   @  
-
- 	À                              ø­       Ô€              +b F   F   €€  ÿÿÿÿÿÿ          @3æ&     è    Œ$0H`lx
- sè´èrmesh       H� F   F   €€  ÿÿÿÿÿÿ           È'     è    Œ$0H`lx
-æ&è
-&èrmesh       }ô       Ô€       	       ÷ô /   /   Ð€<                À„       
-            õ       Ô€              Uõ /   /   Ð€<                °„       
-            êõ       Ô€              dö /   /   Ð€<                P„       
-            Å& F   F   €€  ÿÿÿÿÿÿ          ÐÍª-     è    Œ$0H`lx
-Œè'èrmesh       ø  -   -   Ð€<      	          àrmeshu  4        ç        Ô€       	       d
-  >   >   Ðˆ<      	          ð  Œ$0H`lrmeshq  9u        H¨  >   >   Ð€<      	             Œ$0H`lrmeshq  9u        K©        Ô€       	       «        Ô€       	       ¥«  <   <   Ð€<      	             Œ$0H`lq  9u 	        Á  F   F   €€  ÿÿÿÿÿÿ          `S‡.     è    Œ$0H`lx
- 'èU'èrmesh       (î  F   F   €€  ÿÿÿÿÿÿ          Àè´.     è    Œ$0H`lx
-‡.è«-èrmesh       Æ! ?   ?   Ð€<      	           ƒ        
-   ò  Ë                 �# E   E   Ð€  ÿÿÿÿÿÿ          0‚%         
-   ˆ  8                  ß# E   E   Ð€  ÿÿÿÿÿÿ          Ð‚%         
-   ˆ                    % E   E   Ð€  ÿÿÿÿÿÿ          p‚%         
-   ˆ  ª                  Ä&       Ô€              2+ ?   ?   Ðˆ<                €ƒ      
-   ˆ  –                  B+       Ô€              �+ ?   ?   Ð€<                àƒ      
-   ˆ  -                 9,       Ô€              Ç, ?   ?   Ð€<      	          Pƒ      
-   ˆ  ä                 Ã/ `   `   ‹<                @     
-     ªª    E  0   @  
-
-À 	                              Ó/       Ô€              *0 `   `   ƒ<                ð     
-     ªª    E  0   @  
-
-À 	                              ÿ0       Ô€              Â1 `   `   ƒ<                �     
-     ªª    E  0   @  
-
-À 	                              þ2       Ô€              M5 `   `   ‹<                
-           ªª    E  0   @  
-
- 	À                              ]5       Ô€              ´5 `   `   ƒ<                
-           ªª    E  0   @  
-
- 	À                              7 `   `   ‹<                
-           ªª    E  0   @  
-
- 	À                              T8       Ô€              9 `   `   ƒ<      	          
-`          ªª    E  0   @  
-
- 	À                              ô¢       Ô€       	       ·£ `   `   ƒ<                p     
-     ªª    E  0   @  
-
-À 	                              Ç£       Ô€              ¤ `   `   ƒ<                     
-     ªª    E  0   @  
-
-À 	                              ó¤       Ô€              ¶¥ `   `   ƒ<                °     
-     ªª    E  0   @  
-
-À 	                              ò¦       Ô€              3¨ `   `   ƒ<                
-À          ªª    E  0   @  
-
- 	À                              C¨       Ô€              š¨ `   `   ƒ<                
-           ªª    E  0   @  
-
- 	À                               ª F   F   €€  ÿÿÿÿÿÿ          €ío5     è    Œ$0H`lx
-µ.èÎ-èrmesh       sª `   `   ‹<                
-           ªª    E  0   @  
-
- 	À                              H«       Ô€              ¬ `   `   ƒ<      	          
-�          ªª    E  0   @  
-
- 	À                              +b F   F   €€  ÿÿÿÿÿÿ          Ðs(6     è    Œ$0H`lx
- µ.èU'èrmesh       H� F   F   €€  ÿÿÿÿÿÿ          0V6     è    Œ$0H`lx
-(6èp5èrmesh       óÎ /   /   Ð€<                à„                   Ï       Ô€              QÏ /   /   Ð€<                @„                   æÏ       Ô€              %Ò -   -   Ðˆ<                ðrmeshu  4        Ó       Ô€              9Õ       Ô€              û� E   E   Ð€  ÿÿÿÿÿÿ          °‚%         
-   ˆ  >                  J‚ E   E   Ð€  ÿÿÿÿÿÿ          P‚%         
-   ˆ                     ‚ƒ E   E   Ð€  ÿÿÿÿÿÿ           ‚%         
-   ˆ  Ì                  Å> F   F   €€  ÿÿÿÿÿÿ          À=     è    Œ$0H`lx
-V6èä<èrmesh       Á  A   A   €€  ÿÿÿÿÿÿ          “É=     è    Œ$0H`lx V6èrmesh       ÎÁ        Ô€              XÂ  <   <   Ð€<                    Œ$0H`lq  9u         HÃ  <   <   Ðˆ<                    Œ$0H`lq  9u         .Ä  >   >   Ð€<                0  Œ$0H`lrmeshq  9u        1Å        Ô€              (î  F   F   €€  ÿÿÿÿÿÿ          `(÷=     è    Œ$0H`lx
-Ê=è=èrmesh       ¥� F   F   €€  ÿÿÿÿÿÿ          Ð-¦D     è    Œ$0H`lx
-÷=è†Dèrmesh       +b F   F   €€  ÿÿÿÿÿÿ          @³jE     è    Œ$0H`lx
- ÷=è`>èrmesh       H� F   F   €€  ÿÿÿÿÿÿ          pH˜E     è    Œ$0H`lx
-kEè¦Dèrmesh       »¿	 E   E   Ð€  ÿÿÿÿÿÿ          à‚%         
-   ˆ  >                  
-À	 E   E   Ð€  ÿÿÿÿÿÿ          €‚%         
-   ˆ                     BÁ	 E   E   Ð€  ÿÿÿÿÿÿ          P‚%         
-   ˆ  Ì                  Â	       Ô€              ›Â	 ?   ?   Ð€<                `ƒ      
-   ˆ  ¾                  «Â	       Ô€              ùÂ	 ?   ?   Ð€<                �ƒ      
-   ˆ  T                 ¢Ã	       Ô€              0Ä	 ?   ?   Ð€<      	          ðƒ      
-   ˆ  +                 ƒÈ	       Ô€       	       FÉ	 `   `   ƒ<                      
-     ªª    E  0   @  
-
-À 	                              VÉ	       Ô€              ­É	 `   `   ƒ<                      
-     ªª    E  0   @  
-
-À 	                              ‚Ê	       Ô€              ‰Ì	 `   `   ‹<                p     
-     ªª    E  0   @  
-
-À 	                              ¥×	 `   `   ‹<                     
-     ªª    E  0   @  
-
-À 	                              µ×	       Ô€              Ø	 `   `   ƒ<                °     
-     ªª    E  0   @  
-
-À 	                              áØ	       Ô€              FÚ	 `   `   ‹<                
-€          ªª    E  0   @  
-
- 	À                              VÚ	       Ô€              ­Ú	 `   `   ƒ<                
-À          ªª    E  0   @  
-
- 	À                              ‚Û	       Ô€              Þ	 `   `   ‹<                �     
-     ªª    E  0   @  
-
-À 	                              Øà	       Ô€              ›á	 `   `   ƒ<                
-           ªª    E  0   @  
-
- 	À                              «á	       Ô€              â	 `   `   ƒ<                
-Ð          ªª    E  0   @  
-
- 	À                              ×â	       Ô€              šã	 `   `   ƒ<      	          
-0          ªª    E  0   @  
-
- 	À                              Å> F   F   €€  ÿÿÿÿÿÿ          @MGL     è    Œ$0H`lx
-˜Eè'Lèrmesh       Á  F   F   €€  ÿÿÿÿÿÿ          °ÓM     è    Œ$0H`lx
- ˜EèFèrmesh       (î  F   F   €€  ÿÿÿÿÿÿ          àh9M     è    Œ$0H`lx
-MèGLèrmesh       |`       Ô€              ò` -   -   Ð€<                Àrmeshu  7        +b F   F   €€  ÿÿÿÿÿÿ          Ðó¬T     è    Œ$0H`lx
- 9Mè¢Mèrmesh       êc       Ô€              `d -   -   Ð€<                àrmeshu  4        ae       Ô€              H� F   F   €€  ÿÿÿÿÿÿ          ðˆÚT     è    Œ$0H`lx
-­TèGLèrmesh       XÚ       Ô€              ÎÚ -   -   Ð€<                 rmeshu  7        sŠ	 /   /   Ð€<                „                   ƒŠ	       Ô€              ÑŠ	 /   /   Ð€<                 „                   Ì‹	 /   /   Ðˆ<                 „                   ÐŒ	 /   /   Ðˆ<                 „                   §�	 /   /   Ðˆ<                 „                   ™Ž	 /   /   Ðˆ<                 „                   p�	 /   /   Ðˆ<                 „                   P�	 /   /   Ðˆ<                 „                   …< <   <   Ð€<                „                  
-            *=       Ô€              L= -   -   Ð€<                 rmeshu  4        :> -   -   Ðˆ<                 rmeshu  4        û> -   -   Ðˆ<                 rmeshu  4        Å? -   -   Ðˆ<                 rmeshu  4        Å@ -   -   Ðˆ<                 rmeshu  4        ¡A -   -   Ðˆ<                 rmeshu  4        O   -   -   Ðˆ<                 rmeshu  4        Á  A   A   €€  ÿÿÿÿÿÿ           N\     è    Œ$0H`lx 9Mèrmesh       ÎÁ        Ô€              XÂ  <   <   Ð€<                0   Œ$0H`lq  9u         5Ã  >   >   Ð€<                @  Œ$0H`lrmeshq  9u        8Ä        Ô€              µì  -   -   Ð€<                Prmeshu  4        Åì        Ô€              í  -   -   Ð€<                0rmeshu  7        ¤í        Ô€              (î  A   A   €€  ÿÿÿÿÿÿ          @¨{\     è    Œ$0H`lxN\èrmesh       #b A   A   €€  ÿÿÿÿÿÿ          `3ïc     è    Œ$0H`lx±\èrmesh       Eb >   >   Ð€<                P  Œ$0H`lrmeshq   9u        îb       Ô€              xc <   <   Ð€<                p   Œ$0H`lq  9u         ˆc       Ô€              ^d >   >   Ð€<                €  Œ$0H`lrmeshq  9u        nd       Ô€              ¼d <   <   Ð€<                `   Œ$0H`lq  9u         ~e <   <   Ðˆ<                `   Œ$0H`lq  9u         #f       Ô€              H¿ A   A   €€  ÿÿÿÿÿÿ          pÈLd     è    Œ$0H`lxïcèrmesh       T¿        Ô€              Ê¿  -   -   Ð€<                �rmeshu  7        Á  F   F   €€  ÿÿÿÿÿÿ           S�k     è    Œ$0H`lx
-dèMdèrmesh       ( A   A   €€  ÿÿÿÿÿÿ          €èík     è    Œ$0H`lx�kèrmesh       #b A   A   €€  ÿÿÿÿÿÿ          °s1s     è    Œ$0H`lxîkèrmesh       ác       Ô€              kd <   <   Ð€<                À   Œ$0H`lq  9u         !f >   >   Ðˆ<                Ð  Œ$0H`lrmeshq  9u        $g       Ô€              H¿ A   A   €€  ÿÿÿÿÿÿ          ��s     è    Œ$0H`lx1sèrmesh       Á  F   F   €€  ÿÿÿÿÿÿ          à“Òz     è    Œ$0H`lx
-îkèdsèrmesh       ­ -   -   Ð€<                ðrmeshu  4        ½       Ô€               -   -   Ð€<                 rmeshu  7        œ       Ô€              ( A   A   €€  ÿÿÿÿÿÿ          °(0{     è    Œ$0H`lxÓzèrmesh       ' >   >   Ð€<                   Œ$0H`lrmeshq  9u        7       Ô€              … -   -   Ð€<                Àrmeshu  4                Ô€              •  -   -   Ð€<                rmeshu  7        ¥        Ô€              #b A   A   €€  ÿÿÿÿÿÿ           ³s‚     è    Œ$0H`lx{èrmesh       Eb >   >   Ð€<                Ð  Œ$0H`lrmeshq   9u        îb       Ô€              xc <   <   Ð€<                0   Œ$0H`lq  9u	         ˆc       Ô€              0d >   >   Ð€<                @  Œ$0H`lrmeshq  9u	        @d       Ô€              Žd <   <   Ð€<                à   Œ$0H`lq  9u 	        3e       Ô€              H£ A   A   €€  ÿÿÿÿÿÿ          ðHµ‚     è    Œ$0H`lxt‚èrmesh    	   Á  F   F   €€  ÿÿÿÿÿÿ          PÓŠ     è    Œ$0H`lx
-¾‚èµ‚èrmesh    	   ( A   A   €€  ÿÿÿÿÿÿ           hVŠ     è    Œ$0H`lxŠèrmesh    	   +b F   F   €€  ÿÿÿÿÿÿ          `óµ‘     è    Œ$0H`lx
-_ŠèVŠèrmesh    	   H£ A   A   €€  ÿÿÿÿÿÿ          ˆ÷‘     è    Œ$0H`lx¶‘èrmesh    
\ No newline at end of file
+ 	À                              (®  F   F   €€  ÿÿÿÿÿÿ          ð ¨2     è    Œ$0H`lx
+¤è±èrmesh       Á  F   F   €€  ÿÿÿÿÿÿ          Ð E     è    Œ$0H`lx
+ 3è3èrmesh       ü¢       Ô€       	       Ã£ b   b   ˆƒ<                       
+      ªª    E  0   @  
+
+À 	                              Ó£       Ô€              *¤ b   b   ˆƒ<                       
+      ªª    E  0   @  
+
+À 	                              –¥ b   b   ˆ‹<                       
+      ªª    E  0   @  
+
+À 	                              o¦       Ô€              6§ b   b   ˆƒ<                       
+      ªª    E  0   @  
+
+À 	                              v¨       Ô€              |© b   b   ˆƒ<                
+             ªª    E  0   @  
+
+ 	À                              Œ©       Ô€              ã© b   b   ˆƒ<                
+             ªª    E  0   @  
+
+ 	À                              ¼ª       Ô€              ¥Í F   F   €€  ÿÿÿÿÿÿ          ­Q&     è    Œ$0H`lx
+3è`èrmesh       HO F   F   €€  ÿÿÿÿÿÿ           ÈÓ&     è    Œ$0H`lx
+EèR&èrmesh       +b F   F   €€  ÿÿÿÿÿÿ          à 3æ&     è    Œ$0H`lx
+ Ô&èÔèrmesh       L <   <   Ð€<                 „       	           
+            \       Ô€              ª /   /   Ð€<                „       
+            ?       Ô€              ¹ /   /   Ð€<                ð „       
+            ¢ /   /   Ðˆ<                ð „       
+            },  A   A   €€  ÿÿÿÿÿÿ          @Íò-     è    Œ$0H`lxÔ&èrmesh       (®  F   F   €€  ÿÿÿÿÿÿ           èt.     è    Œ$0H`lx
+æ&èó-èrmesh       Á  F   F   €€  ÿÿÿÿÿÿ           S‡.     è    Œ$0H`lx
+ u.èu'èrmesh       Š} >   >   Ð€<      	          P  Œ$0H`lrmeshq  9u        �~       Ô€       	       s       Ô€       	       ý <   <   Ð€<      	          `   Œ$0H`lq  9u         ¥¡ F   F   €€  ÿÿÿÿÿÿ          píg5     è    Œ$0H`lx
+u.èC5èrmesh       HO F   F   €€  ÿÿÿÿÿÿ          06     è    Œ$0H`lx
+‡.èh5èrmesh       +b F   F   €€  ÿÿÿÿÿÿ          s(6     è    Œ$0H`lx
+ 6è/èrmesh       Æ� ?   ?   Ð€<      	          €ƒ        
+   š  Í                 �ƒ E   E   Ð€  ÿÿÿÿÿÿ          �‚%         
+   ˆ  ,                  ßƒ E   E   Ð€  ÿÿÿÿÿÿ          @‚%         
+   ˆ  É                  … E   E   Ð€  ÿÿÿÿÿÿ           ‚%         
+   ˆ  `                  â…       Ô€              p† ?   ?   Ð€<                0ƒ      
+   ˆ  Ê                  €†       Ô€              Î† ?   ?   Ð€<                Pƒ      
+   ˆ  u                 w‡       Ô€              í‰ ?   ?   Ðˆ<      	           ƒ      
+   ˆ                   óŠ ?   ?   Ðˆ<      	           ƒ      
+   ˆ                   ç�       Ô€       	       ®� b   b   ˆƒ<                0      
+      ªª    E  0   @  
+
+À 	                              ¾�       Ô€              ‘ b   b   ˆƒ<                0      
+      ªª    E  0   @  
+
+À 	                              î‘       Ô€              µ’ b   b   ˆƒ<                0      
+      ªª    E  0   @  
+
+À 	                              ]—       Ô€       	       Ù› b   b   ˆ‹<                @      
+      ªª    E  0   @  
+
+À 	                              é›       Ô€              @œ b   b   ˆƒ<                @      
+      ªª    E  0   @  
+
+À 	                              �       Ô€              ½Ÿ b   b   ˆ‹<                
+0            ªª    E  0   @  
+
+ 	À                              ÍŸ       Ô€              -¡ b   b   ˆƒ<                @      
+      ªª    E  0   @  
+
+À 	                              m¢       Ô€              o¥ b   b   ˆ‹<                
+@            ªª    E  0   @  
+
+ 	À                              ¥       Ô€              Å& F   F   €€  ÿÿÿÿÿÿ          °í<     è    Œ$0H`lx
+6èä<èrmesh       9        Ô€       	       Ž9  /   /   Ð€<                À„       
+            ž9        Ô€              ì9  /   /   Ð€<                `„       
+            �:        Ô€              û:  /   /   Ð€<                @„       
+            (®  F   F   €€  ÿÿÿÿÿÿ          p(·=     è    Œ$0H`lx
+(6èí<èrmesh       Á  F   F   €€  ÿÿÿÿÿÿ          P“É=     è    Œ$0H`lx
+ ·=è·6èrmesh       ¥… F   F   €€  ÿÿÿÿÿÿ          Ð-ŽD     è    Œ$0H`lx
+·=è^Dèrmesh       HO F   F   €€  ÿÿÿÿÿÿ          €HXE     è    Œ$0H`lx
+Ê=èŽDèrmesh       +b F   F   €€  ÿÿÿÿÿÿ          `³jE     è    Œ$0H`lx
+ XEèX>èrmesh       Á	       Ô€       	       ÍÁ	 b   b   ˆƒ<                P      
+      ªª    E  0   @  
+
+À 	                              ÝÁ	       Ô€              4Â	 b   b   ˆƒ<                P      
+      ªª    E  0   @  
+
+À 	                              Ã	       Ô€              ÔÃ	 b   b   ˆƒ<                P      
+      ªª    E  0   @  
+
+À 	                              RÇ	 b   b   ˆ‹<                `      
+      ªª    E  0   @  
+
+À 	                              bÇ	       Ô€              ¹Ç	 b   b   ˆƒ<                `      
+      ªª    E  0   @  
+
+À 	                              ’È	       Ô€              YÉ	 b   b   ˆƒ<                `      
+      ªª    E  0   @  
+
+À 	                              å E   E   Ð€  ÿÿÿÿÿÿ          €‚%            ˆ  ž        
+           [å E   E   Ð€  ÿÿÿÿÿÿ          �‚%            ˆ  8       
+           “æ E   E   Ð€  ÿÿÿÿÿÿ          à‚%            ˆ  Î       
+           ^ç       Ô€       	       ìç ?   ?   Ð€<                ðƒ         ½  1       
+          üç       Ô€              Jè ?   ?   Ð€<                 ƒ         ½  É       
+          óè       Ô€              �é ?   ?   Ð€<                �ƒ         ½  `       
+          �ê       Ô€       	       ì ?   ?   Ðˆ<                 ƒ         ˆ  /       
+          ì       Ô€              jì ?   ?   Ð€<                °ƒ         ˆ  Ç       
+          gí ?   ?   Ðˆ<                °ƒ         ˆ  Ç       
+          @î ?   ?   Ðˆ<                °ƒ         ˆ  Ç       
+          éî       Ô€              wï ?   ?   Ð€<                 ƒ         ˆ  ^       
+          „ð b   b   ˆ‹<                
+P            ªª    E  0   @  
+
+ 	À                              ”ð       Ô€              ëð b   b   ˆƒ<                
+0            ªª    E  0   @  
+
+ 	À                              Äñ       Ô€              2õ b   b   ˆ‹<                
+`            ªª    E  0   @  
+
+ 	À                              Bõ       Ô€              ™õ b   b   ˆƒ<                
+@            ªª    E  0   @  
+
+ 	À                              rö       Ô€              9÷ b   b   ˆƒ<      	          
+@            ªª    E  0   @  
+
+ 	À                              Å& F   F   €€  ÿÿÿÿÿÿ          M/L     è    Œ$0H`lx
+XEèÿKèrmesh       (®  F   F   €€  ÿÿÿÿÿÿ          ÀhùL     è    Œ$0H`lx
+kEè/Lèrmesh       Á  F   F   €€  ÿÿÿÿÿÿ          °ÓM     è    Œ$0H`lx
+ ùLèùEèrmesh       HO F   F   €€  ÿÿÿÿÿÿ          ÐˆšT     è    Œ$0H`lx
+Mè/Lèrmesh       +b F   F   €€  ÿÿÿÿÿÿ          Àó¬T     è    Œ$0H`lx
+ ›TèšMèrmesh       …$ <   <   Ð€<                à„                  
+            *%       Ô€              ¤% /   /   Ð€<                Ð„       
+            & -   -   Ð€<                ðrmeshu  4        :' /   /   Ðˆ<                Ð„       
+            ×' -   -   Ðˆ<                ðrmeshu  4        ¡( -   -   Ðˆ<                ðrmeshu  4        †) -   -   Ðˆ<                ðrmeshu  4        k* -   -   Ðˆ<                ðrmeshu  4        b+ -   -   Ðˆ<                ðrmeshu  4        5, -   -   Ðˆ<                ðrmeshu  4        (®  A   A   €€  ÿÿÿÿÿÿ           ¨;\     è    Œ$0H`lx­Tèrmesh       Á  F   F   €€  ÿÿÿÿÿÿ          àN\     è    Œ$0H`lx
+ <\èšMèrmesh       ÓM /   /   Ð€<                ð„                   ãM       Ô€              †N -   -   Ð€<                 rmeshu  4        uO       Ô€              �P >   >   Ð€<                  Œ$0H`lrmeshq  9u        |Q       Ô€              
+R >   >   Ðˆ<                  Œ$0H`lrmeshq  9u        ÏR -   -   Ð€<                 rmeshu  7        HO A   A   €€  ÿÿÿÿÿÿ          ÈÜc     è    Œ$0H`lxN\èrmesh       #b A   A   €€  ÿÿÿÿÿÿ          03ïc     è    Œ$0H`lx Ýcèrmesh       îb       Ô€              xc <   <   Ð€<                @   Œ$0H`lq  9u         6e >   >   Ðˆ<                P  Œ$0H`lrmeshq  9u        9f       Ô€              (®  A   A   €€  ÿÿÿÿÿÿ           è}k     è    Œ$0H`lxïcèrmesh       Á  F   F   €€  ÿÿÿÿÿÿ          `S�k     è    Œ$0H`lx
+ ~kè^dèrmesh       HO A   A   €€  ÿÿÿÿÿÿ          0s     è    Œ$0H`lx�kèrmesh       +b F   F   €€  ÿÿÿÿÿÿ          ps1s     è    Œ$0H`lx
+ sè^dèrmesh       ïÎ -   -   Ð€<                €rmeshu  4        ÞÐ       Ô€              öÑ >   >   Ð€<                �  Œ$0H`lrmeshq  9u        ÷Ò       Ô€              mÓ -   -   Ð€<                 rmeshu  7        (®  A   A   €€  ÿÿÿÿÿÿ          @(Àz     è    Œ$0H`lx1sèrmesh       ÎÁ        Ô€              XÂ  <   <   Ð€<                À   Œ$0H`lq  9u         5Ã  >   >   Ð€<                Ð  Œ$0H`lrmeshq  9u        MÄ  >   >   Ðˆ<                Ð  Œ$0H`lrmeshq  9u        PÅ        Ô€              HO A   A   €€  ÿÿÿÿÿÿ          PHa‚     è    Œ$0H`lx1sèrmesh       ë_ -   -   Ð€<                `rmeshu  4        |`       Ô€              ò` -   -   Ð€<                àrmeshu  7        a       Ô€              +b F   F   €€  ÿÿÿÿÿÿ          ð³s‚     è    Œ$0H`lx
+ a‚èi{èrmesh       Mb >   >   Ð€<                p  Œ$0H`lrmeshq   9u        öb       Ô€              lc -   -   Ð€<                 rmeshu  4        |c       Ô€              åc -   -   Ð€<                €rmeshu  7        vd       Ô€           	   Á  A   A   €€  ÿÿÿÿÿÿ          ÓŠ     è    Œ$0H`lx
+ƒèrmesh    	   %Á  >   >   Ð€<                �  Œ$0H`lrmeshq   9u     	   ÎÁ        Ô€           	   XÂ  <   <   Ð€<                    Œ$0H`lq  9u      	   hÂ        Ô€           	   >Ã  >   >   Ð€<                0  Œ$0H`lrmeshq  9u     	   NÃ        Ô€           	   œÃ  <   <   Ð€<                    Œ$0H`lq  9u      	   AÄ        Ô€           	   (Æ  A   A   €€  ÿÿÿÿÿÿ          °hŠ     è    Œ$0H`lxŠèrmesh    	   +b F   F   €€  ÿÿÿÿÿÿ          @óµ‘     è    Œ$0H`lx
+«ŠèŠèrmesh    	   H� A   A   €€  ÿÿÿÿÿÿ          Àˆã‘     è    Œ$0H`lx¶‘èrmesh    
\ No newline at end of file
diff -Naur ns-3.23/src/mesh/test/dot11s/hwmp-reactive-regression-test-3-1.pcap ns-3.24/src/mesh/test/dot11s/hwmp-reactive-regression-test-3-1.pcap
--- ns-3.23/src/mesh/test/dot11s/hwmp-reactive-regression-test-3-1.pcap	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/test/dot11s/hwmp-reactive-regression-test-3-1.pcap	2015-09-15 11:18:44.000000000 -0700
@@ -1,267 +1,226 @@
-ÔÃ²¡          ÿÿ  i       $  <   <   €€  ÿÿÿÿÿÿ            $      è    Œ$0H`lx rmesh        Ü?  A   A   €€  ÿÿÿÿÿÿ     	     	 k?      è    Œ$0H`lx $ èrmesh        þ?  >   >   Ð€<      	             Œ$0H`lrmeshq   9u         A  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         æA  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         þB  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         D  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         æD  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         þE  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         ˜–  A   A   €€  ÿÿÿÿÿÿ           (–      è    Œ$0H`lx $ èrmesh        º–  >   >   Ð€<                    Œ$0H`lrmeshq   9u         É—  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         «˜  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ¨™  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ®š  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         «›  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ¨œ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         †Ñ  -   -   Ðˆ<           	     	@ rmeshu   4         –Ñ        Ô€       	        äÑ  -   -   Ð€<      	          0 rmeshu  7         uÒ        Ô€               'Ó  >   >   Ðˆ<                0   Œ$0H`lrmeshq   9u         *Ô        Ô€               ©Ô  -   -   Ð€<                @ rmeshu   4         ¹Ô        Ô€               Õ  -   -   Ð€<                @ rmeshu  7         ˜Õ        Ô€               …à        Ô€       
+ÔÃ²¡          ÿÿ  i       $  <   <   €€  ÿÿÿÿÿÿ            $      è    Œ$0H`lx rmesh        Ü?  A   A   €€  ÿÿÿÿÿÿ     	     	 k?      è    Œ$0H`lx $ èrmesh        þ?  >   >   Ð€<      	             Œ$0H`lrmeshq   9u         A  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         æA  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         þB  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         D  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         æD  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         þE  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         ˜–  A   A   €€  ÿÿÿÿÿÿ           (–      è    Œ$0H`lx $ èrmesh        º–  >   >   Ð€<                    Œ$0H`lrmeshq   9u         É—  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         «˜  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ¨™  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ®š  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         «›  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ¨œ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         †Ñ  -   -   Ðˆ<           	     	@ rmeshu   4         –Ñ        Ô€       	        äÑ  -   -   Ð€<      	          0 rmeshu  7         íÒ        Ô€               ~Ó  -   -   Ð€<                @ rmeshu   4         ŽÓ        Ô€               îÓ  -   -   Ðˆ<      	          0 rmeshu  7         Ô        Ô€               ³Ô  -   -   Ð€<                @ rmeshu  7         DÕ        Ô€               …à        Ô€       
         á  <   <   Ð€<      
-     	     	P    Œ$0H`lq  9u          A7       Ô€               Ë7 <   <   Ð€<                P    Œ$0H`lq  9u          -• <   <   €€  ÿÿÿÿÿÿ          P -•     è    Œ$0H`lx rmesh        © F   F   €€  ÿÿÿÿÿÿ     	     	p ‹¨     è    Œ$0H`lx
-È è•èrmesh        &© >   >   Ð€<      	          `   Œ$0H`lrmeshq   9u         Ï©       Ô€               Yª <   <   Ð€<           	     	€    Œ$0H`lq  9u          iª       Ô€       	        –< -   -   Ð€<                € rmeshu   4         ¦<       Ô€               YJ -   -   Ð€<      	          p rmeshu  9         êJ       Ô€               `K -   -   Ð€<           	     	  rmeshu  7         pK       Ô€       	        Àg F   F   €€  ÿÿÿÿÿÿ          � Hg     è    Œ$0H`lx
-bè•èrmesh        âg >   >   Ð€<                €   Œ$0H`lrmeshq   9u         ‹h       Ô€               i -   -   Ð€<                  rmeshu  4         i       Ô€               qi -   -   Ð€<                � rmeshu  7         j       Ô€              Ü  A   A   €€  ÿÿÿÿÿÿ     	     	° «I     è    Œ$0H`lxÈ èrmesh       þ  >   >   Ð€<      	              Œ$0H`lrmeshq   9u        §        Ô€              1	  <   <   Ð€<           	     	À    Œ$0H`lq  9u         A	        Ô€       	       
-  >   >   Ð€<           	     	Ð   Œ$0H`lrmeshq  9u        
-        Ô€       	       l
-  <   <   Ð€<      	          °    Œ$0H`lq  9u                 Ô€              ,  A   A   €€  ÿÿÿÿÿÿ          À Mn     è    Œ$0H`lxJèrmesh       -  >   >   Ð€<                °   Œ$0H`lrmeshq  9u        -        Ô€              j-  <   <   Ð€<                Ð    Œ$0H`lq  9u         .        Ô€              1.  >   >   Ð€<                à   Œ$0H`lrmeshq  9u        Ú.        Ô€              /  <   <   Ð€<                À    Œ$0H`lq  9u         �/        Ô€              }Æ  -   -   Ð€<      
-     	     	à rmeshu  4        lÇ        Ô€       
-       ˆÈ  >   >   Ð€<      
-     	     	ð   Œ$0H`lrmeshq  9u        wÉ        Ô€       
-       öÉ  -   -   Ð€<      
-     	     	 rmeshu  7        -¡ A   A   €€  ÿÿÿÿÿÿ          ð mã     è    Œ$0H`lxJèrmesh       ü¨ A   A   €€  ÿÿÿÿÿÿ     	     	Ëê     è    Œ$0H`lxãèrmesh       Ç©       Ô€       
-       .« >   >   Ð€<      
-     	     	0  Œ$0H`lrmeshq  9u        1¬       Ô€       
-       M& A   A   €€  ÿÿÿÿÿÿ           �h     è    Œ$0H`lxëèrmesh       ä  F   F   €€  ÿÿÿÿÿÿ     	     	@ë‹     è    Œ$0H`lx
-hèÏèrmesh       _	  L   L   ƒ  ÿÿÿÿÿÿ     	ÿÿÿÿÿÿP     
-    ªª           
+     	     	P    Œ$0H`lq  9u          A7       Ô€               Ë7 <   <   Ð€<                P    Œ$0H`lq  9u          -• <   <   €€  ÿÿÿÿÿÿ          P -•     è    Œ$0H`lx rmesh        å› >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         õ›       Ô€               Cœ <   <   Ð€<                `    Œ$0H`lq   9u          èœ       Ô€               %� >   >   Ð€<                p   Œ$0H`lrmeshq   9u         Î�       Ô€               Xž <   <   Ð€<                p    Œ$0H`lq  9u          hž       Ô€               © F   F   €€  ÿÿÿÿÿÿ     	     	p ‹¨     è    Œ$0H`lx
+È è•èrmesh        &© >   >   Ð€<      	          €   Œ$0H`lrmeshq  9u         Ï©       Ô€               Yª <   <   Ð€<           	     	€    Œ$0H`lq  9u          iª       Ô€       	        6 >   >   Ð€<           	     	�   Œ$0H`lrmeshq  9u         6       Ô€       	        `6 <   <   Ð€<      	          �    Œ$0H`lq  9u          7       Ô€               $ F   F   €€  ÿÿÿÿÿÿ     	     	  «     è    Œ$0H`lx
+iè•èrmesh       ,  A   A   €€  ÿÿÿÿÿÿ            Mn     è    Œ$0H`lxèrmesh        ®  F   F   €€  ÿÿÿÿÿÿ          � hð     è    Œ$0H`lx
+bènèrmesh       } F   F   €€  ÿÿÿÿÿÿ     	     	° Ë¾     è    Œ$0H`lx
+
+ènèrmesh       -Í F   F   €€  ÿÿÿÿÿÿ          ° m     è    Œ$0H`lx
+ðè¿èrmesh       ÀO F   F   €€  ÿÿÿÿÿÿ            ˆ‘     è    Œ$0H`lx
+èèrmesh       $ F   F   €€  ÿÿÿÿÿÿ     	     	À ë_     è    Œ$0H`lx
+«èèrmesh       ü  N   N   ˆƒ  ÿÿÿÿÿÿ     	ÿÿÿÿÿÿÐ      
+     ªª           
 
 ÿÿÿÿÿÿ
-       Š	  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ     
-    ªª           
+       '	  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ      
+     ªª           
 
 ÿÿÿÿÿÿ
-       ¶
-  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿð      
-    ªª           
+       S
+  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ°      
+     ªª           
 
 ÿÿÿÿÿÿ
-       W  E   E   Ð€  ÿÿÿÿÿÿ           ‚%            ˆ  3       
-           ¦  E   E   Ð€  ÿÿÿÿÿÿ           ‚%            ˆ  Ë       
-           Þ  E   E   Ð€  ÿÿÿÿÿÿ     	     	`‚%            ˆ  –       
-           ©        Ô€       
-       7  ?   ?   Ð€<           	     	pƒ         ˆ  –        
-          G        Ô€       	       •  ?   ?   Ð€<                0ƒ         ˆ  -       
-          w  ?   ?   Ðˆ<                0ƒ         ˆ  -       
-                   Ô€              ®  ?   ?   Ð€<                ƒ         ˆ  ø       
-                  Ô€              Ç  L   L   ƒ<                
-           ªª           
+       ô  E   E   Ð€  ÿÿÿÿÿÿ          À ‚%            ˆ  3       
+           C  E   E   Ð€  ÿÿÿÿÿÿ          Ð ‚%            ˆ  Í       
+           {  E   E   Ð€  ÿÿÿÿÿÿ     	     	à ‚%            ˆ  ¾       
+           F        Ô€       
+       Ô  ?   ?   Ð€<           	     	ð ƒ         ˆ  –        
+          ä        Ô€       	       2  ?   ?   Ð€<                à ƒ         ˆ  /       
+          Û        Ô€              i  ?   ?   Ð€<                Ð ƒ         ˆ         
+          ?        Ô€              ê  N   N   ˆƒ<                
+             ªª           
      
 
-       ×        Ô€              .  L   L   ƒ<      	          
-@          ªª           
+       ú        Ô€              Q  N   N   ˆƒ<      	          
+             ªª           
      
 
-       ë        Ô€              –  L   L   ƒ<      
+               Ô€              ¹  N   N   ˆƒ<      
      	     
-€          ªª           
+             ªª           
      
 
-       Ô  L   L   ‹<      
-     	     
-€          ªª           
-     
-
-               Ô€       
-       ÷  `   `   ƒ<           	     �     
-     ªª    E  0    @  
-
-À 	                                      Ô€       	       ^  `   `   ƒ<                P     
-     ªª    E  0    @  
+       ù        Ô€       
+       ä  b   b   ˆƒ<           	            
+      ªª    E  0    @  
 
-À 	                              3        Ô€              ö  `   `   ƒ<                0     
-     ªª    E  0    @  
+À 	                              ô        Ô€       	       K  b   b   ˆƒ<                       
+      ªª    E  0    @  
 
-À 	                              U6  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ@         ªª           
+À 	                              $        Ô€              ,  F   F   €€  ÿÿÿÿÿÿ          ð �°     è    Œ$0H`lx
+’è`èrmesh       N2  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà           ªª           
 ÿÿÿÿÿÿ
-       €6  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ`         ªª           
+       y2  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ           ªª           
 ÿÿÿÿÿÿ
-       ¬7  L   L   ƒ  ÿÿÿÿÿÿ     	ÿÿÿÿÿÿ          ªª           
+       ¥3  N   N   ˆƒ  ÿÿÿÿÿÿ     	ÿÿÿÿÿÿ           ªª           
 ÿÿÿÿÿÿ
-       ”8        Ô€       
-       H9  L   L   ƒ<           	     °     
-     ªª           
-
-     
-       X9        Ô€       	       ¯9  L   L   ƒ<                p     
-     ªª           
-
-     
-       l:        Ô€              ;  L   L   ƒ<                P     
-     ªª           
+       ¶5  N   N   ˆƒ<           	           
+      ªª           
 
      
-        =  L   L   ‹<                P     
-     ªª           
+       Æ5        Ô€       	       6  N   N   ˆƒ<                      
+      ªª           
 
      
-       5@        Ô€              ø@  `   `   ƒ<                
-`          ªª    E  0    @  
-
- 	À                              A        Ô€              _A  `   `   ƒ<      	          
-€          ªª    E  0    @  
-
- 	À                              ¬B  `   `   ‹<      	          
-€          ªª    E  0    @  
-
- 	À                              �C        Ô€              DD  `   `   ƒ<      
-     	     
-À          ªª    E  0    @  
-
- 	À                              ×K        Ô€       
-        î  F   F   €€  ÿÿÿÿÿÿ          p¨r     è    Œ$0H`lx
-Eèãèrmesh       -… F   F   €€  ÿÿÿÿÿÿ          �­	&     è    Œ$0H`lx
-Œèsèrmesh       õ¡       Ô€       
-       ¸¢ `   `   ƒ<           	     Ð     
-     ªª    E  0   @  
-
-À 	                              È¢       Ô€       	       £ `   `   ƒ<                      
-     ªª    E  0   @  
-
-À 	                              ô£       Ô€              ·¤ `   `   ƒ<                €     
-     ªª    E  0   @  
-
-À 	                              1¨       Ô€              ¼­ `   `   ‹<                
-�          ªª    E  0   @  
-
- 	À                              Ì­       Ô€              #® `   `   ƒ<      	          
-°          ªª    E  0   @  
-
- 	À                              ø®       Ô€              .‹ -   -   Ð€<      
-     	     	 rmeshu  4        Œ       Ô€       
-       ¨� >   >   Ð€<      
-     	     	  Œ$0H`lrmeshq  9u        —Ž       Ô€       
-       � -   -   Ð€<      
-     	     	 rmeshu  7        À� F   F   €€  ÿÿÿÿÿÿ           È'     è    Œ$0H`lx
-æ&è
-&èrmesh       Aô /   /   Ð€<           	     	0„       
-            Qô       Ô€       	       Ÿô /   /   Ð€<                À„       
-            4õ       Ô€              ®õ /   /   Ð€<                °„       
-            M& F   F   €€  ÿÿÿÿÿÿ          ÐÍª-     è    Œ$0H`lx
-Œè'èrmesh       ¤  -   -   Ð€<      	          àrmeshu  4        5        Ô€              «  -   -   Ð€<           	     	@rmeshu  7        »        Ô€       	       Ü  A   A   €€  ÿÿÿÿÿÿ     	     	P+Î-     è    Œ$0H`lx«-èrmesh       þ  >   >   Ð€<      	          ð  Œ$0H`lrmeshq  9u        	  >   >   Ðˆ<      	          ð  Œ$0H`lrmeshq  9u        ø	  >   >   Ðˆ<      	          ð  Œ$0H`lrmeshq  9u          >   >   Ðˆ<      	          ð  Œ$0H`lrmeshq  9u        ò  >   >   Ðˆ<      	          ð  Œ$0H`lrmeshq  9u        ï  >   >   Ðˆ<      	          ð  Œ$0H`lrmeshq  9u        ì  >   >   Ðˆ<      	          ð  Œ$0H`lrmeshq  9u        ã  <   <   Ð€<      
-     	     	`   Œ$0H`lq   9u         ­  >   >   Ð€<      
-     	     	p  Œ$0H`lrmeshq   9u        ¼  >   >   Ðˆ<      
-     	     	p  Œ$0H`lrmeshq   9u        ¿        Ô€       
-       Ü§  >   >   Ð€<      	             Œ$0H`lrmeshq  9u        …¨        Ô€              ©  <   <   Ð€<           	     	€   Œ$0H`lq  9u	         ©        Ô€       	       ßª  >   >   Ðˆ<           	     	�  Œ$0H`lrmeshq  9u	        ïª        Ô€       	       =«  <   <   Ð€<      	             Œ$0H`lq  9u 	        â«        Ô€               î  F   F   €€  ÿÿÿÿÿÿ          Àè´.     è    Œ$0H`lx
-‡.è«-èrmesh       ‚ <   <   Ð€<      
-     	     	 „                              8! E   E   Ð€  ÿÿÿÿÿÿ     	     	°‚%         
-   ˆ  ¡                   Z! ?   ?   Ð€<      	           ƒ        
-   ò  Ë                 "       Ô€              ‘" ?   ?   Ð€<      
-     	     	Àƒ      
-   ò  f                 # E   E   Ð€  ÿÿÿÿÿÿ          0‚%         
-   ˆ  8                  T$ E   E   Ð€  ÿÿÿÿÿÿ          Ð‚%         
-   ˆ                    ( `   `   ƒ<           	     Ð     
-     ªª    E  0   @  
-
-À 	                              -(       Ô€       	       „( `   `   ƒ<                @     
-     ªª    E  0   @  
-
-À 	                              ­) `   `   ‹<                @     
-     ªª    E  0   @  
-
-À 	                              o+       Ô€              ý+ ?   ?   Ð€<                àƒ      
-   ˆ  -                 ,       Ô€              [, ?   ?   Ð€<      	          Pƒ      
-   ˆ  ä                 -       Ô€              ’- ?   ?   Ð€<      
-     	     	àƒ      
-   ˆ                   +/ `   `   ‹<                @     
-     ªª    E  0   @  
-
-À 	                               0       Ô€              Ã0 `   `   ƒ<                ð     
-     ªª    E  0   @  
-
-À 	                              Š5       Ô€              �6       Ô€       
-       8 `   `   ‹<                
-           ªª    E  0   @  
-
- 	À                              (8       Ô€              8 `   `   ƒ<      	          
-`          ªª    E  0   @  
-
- 	À                              T9       Ô€              : `   `   ƒ<      
-     	     
-ð          ªª    E  0   @  
+       Ú6        Ô€              Â:        Ô€              ‰;  b   b   ˆƒ<                
+            ªª    E  0    @  
 
- 	À                              < `   `   ‹<      
-     	     
-ð          ªª    E  0   @  
-
- 	À                              õ¡       Ô€       
-       ¸¢ `   `   ƒ<           	          
-     ªª    E  0   @  
-
-À 	                              È¢       Ô€       	       £ `   `   ƒ<                p     
-     ªª    E  0   @  
-
-À 	                              ô£       Ô€              ·¤ `   `   ƒ<                     
-     ªª    E  0   @  
-
-À 	                              p¨       Ô€              ˆ© F   F   €€  ÿÿÿÿÿÿ          €ío5     è    Œ$0H`lx
-µ.èÎ-èrmesh       « `   `   ‹<                
-           ªª    E  0   @  
-
- 	À                              «       Ô€              s« `   `   ƒ<      	          
-�          ªª    E  0   @  
-
- 	À                              H¬       Ô€              ­ `   `   ƒ<      
-     	     
-           ªª    E  0   @  
+ 	À                              ™;        Ô€              ð;  b   b   ˆƒ<      	          
+            ªª    E  0    @  
 
- 	À                              À� F   F   €€  ÿÿÿÿÿÿ          0V6     è    Œ$0H`lx
-(6èp5èrmesh       0Ï       Ô€              ªÏ /   /   Ð€<                @„                   ºÏ       Ô€              Ð /   /   Ð€<      	           „                   �Ð       Ô€              Ñ /   /   Ð€<      
-     	     	0„                   ÓÓ /   /   Ðˆ<      
-     	     	0„                   üÔ /   /   Ðˆ<      
-     	     	0„                   8� E   E   Ð€  ÿÿÿÿÿÿ     	     	@‚%         
-   ˆ  §                   ‡� E   E   Ð€  ÿÿÿÿÿÿ          °‚%         
-   ˆ  >                  $ F   F   €€  ÿÿÿÿÿÿ     	     	Pkä<     è    Œ$0H`lx
-W6èp5èrmesh       M> F   F   €€  ÿÿÿÿÿÿ          À=     è    Œ$0H`lx
-V6èä<èrmesh        î  F   F   €€  ÿÿÿÿÿÿ          `(÷=     è    Œ$0H`lx
-Ê=è=èrmesh       } F   F   €€  ÿÿÿÿÿÿ     	     	`‹…D     è    Œ$0H`lx
-ø=è=èrmesh       -� F   F   €€  ÿÿÿÿÿÿ          Ð-¦D     è    Œ$0H`lx
-÷=è†Dèrmesh       À� F   F   €€  ÿÿÿÿÿÿ          pH˜E     è    Œ$0H`lx
-kEè¦Dèrmesh       ø¾	 E   E   Ð€  ÿÿÿÿÿÿ     	     	p‚%         
-   ˆ  §                   G¿	 E   E   Ð€  ÿÿÿÿÿÿ          à‚%         
-   ˆ  >                  À	 E   E   Ð€  ÿÿÿÿÿÿ          €‚%         
-   ˆ                     ØÂ	       Ô€              fÃ	 ?   ?   Ð€<                �ƒ      
-   ˆ  T                 vÃ	       Ô€              ÄÃ	 ?   ?   Ð€<      	          ðƒ      
-   ˆ  +                 mÄ	       Ô€              ûÄ	 ?   ?   Ð€<      
-     	     	€ƒ      
-   ˆ  Ä                 7Æ	       Ô€       
-       GÈ	 `   `   ‹<           	     �     
-     ªª    E  0   @  
-
-À 	                              WÈ	       Ô€       	       ®È	 `   `   ƒ<                      
-     ªª    E  0   @  
-
-À 	                              ƒÉ	       Ô€              FÊ	 `   `   ƒ<                      
-     ªª    E  0   @  
-
-À 	                              ÄÍ	       Ô€       
-       ‡Î	 `   `   ƒ<           	           
-     ªª    E  0   @  
-
-À 	                              —Î	       Ô€       	       îÎ	 `   `   ƒ<                     
-     ªª    E  0   @  
-
-À 	                              VÐ	 `   `   ‹<                     
-     ªª    E  0   @  
-
-À 	                              çÒ	 `   `   ‹<                     
-     ªª    E  0   @  
-
-À 	                              ×	 `   `   ‹<                     
-     ªª    E  0   @  
-
-À 	                              â×	       Ô€              ƒÚ	       Ô€              FÛ	 `   `   ƒ<                
-À          ªª    E  0   @  
-
- 	À                              VÛ	       Ô€              ­Û	 `   `   ƒ<      	          
-           ªª    E  0   @  
-
- 	À                              ‚Ü	       Ô€              EÝ	 `   `   ƒ<      
-     	     
-°          ªª    E  0   @  
-
- 	À                              ¤Þ	 `   `   ‹<      
+ 	À                              É<        Ô€              �=  b   b   ˆƒ<      
      	     
-°          ªª    E  0   @  
-
- 	À                              Øá	       Ô€              ›â	 `   `   ƒ<                
-Ð          ªª    E  0   @  
-
- 	À                              «â	       Ô€              ã	 `   `   ƒ<      	          
-0          ªª    E  0   @  
-
- 	À                              ×ã	       Ô€              $ F   F   €€  ÿÿÿÿÿÿ     	     	Ð«&L     è    Œ$0H`lx
-šEè¦Dèrmesh       M> F   F   €€  ÿÿÿÿÿÿ          @MGL     è    Œ$0H`lx
-˜Eè'Lèrmesh       -� F   F   €€  ÿÿÿÿÿÿ          PmèS     è    Œ$0H`lx
-˜Eè'Lèrmesh       €� -   -   Ð€<                `rmeshu  4        AŽ -   -   Ðˆ<                `rmeshu  4        8� -   -   Ðˆ<                `rmeshu  4        /� -   -   Ðˆ<                `rmeshu  4        ‘ -   -   Ðˆ<                `rmeshu  4        Õ‘ -   -   Ðˆ<                `rmeshu  4        ±’ -   -   Ðˆ<                `rmeshu  4        {“ <   <   Ð€<      	          p„                              s” <   <   Ðˆ<      	          p„                              Q• <   <   Ðˆ<      	          p„                              A– <   <   Ðˆ<      	          p„                              C— <   <   Ðˆ<      	          p„                              !˜ <   <   Ðˆ<      	          p„                              ™ <   <   Ðˆ<      	          p„                              ä -   -   Ð€<      	          €rmeshu 	 4        Û -   -   Ðˆ<      	          €rmeshu 	 4        À -   -   Ðˆ<      	          €rmeshu 	 4        ® -   -   Ðˆ<      	          €rmeshu 	 4        x -   -   Ðˆ<      	          €rmeshu 	 4        K  -   -   Ðˆ<      	          €rmeshu 	 4        ! -   -   Ðˆ<      	          €rmeshu 	 4        M> A   A   €€  ÿÿÿÿÿÿ          ��‰[     è    Œ$0H`lx'Lèrmesh       -i <   <   €€  ÿÿÿÿÿÿ           ­öb     è    Œ$0H`lx rmesh       M> <   <   €€  ÿÿÿÿÿÿ          °ÍËj     è    Œ$0H`lx rmesh       -… <   <   €€  ÿÿÿÿÿÿ          ÀíTr     è    Œ$0H`lx rmesh       M" <   <   €€  ÿÿÿÿÿÿ          Ðòy     è    Œ$0H`lx rmesh       -… <   <   €€  ÿÿÿÿÿÿ          à-—�     è    Œ$0H`lx rmesh       M* <   <   €€  ÿÿÿÿÿÿ          ðM<‰     è    Œ$0H`lx rmesh    	   -q <   <   €€  ÿÿÿÿÿÿ           mÅ�     è    Œ$0H`lx rmesh    
\ No newline at end of file
+            ªª    E  0    @  
+
+ 	À                               ®  F   F   €€  ÿÿÿÿÿÿ          ð ¨2     è    Œ$0H`lx
+¤è±èrmesh       ù¡       Ô€       
+       À¢ b   b   ˆƒ<           	            
+      ªª    E  0   @  
+
+À 	                              Ð¢       Ô€       	       '£ b   b   ˆƒ<                       
+      ªª    E  0   @  
+
+À 	                               ¤       Ô€              Ç¤ b   b   ˆƒ<                       
+      ªª    E  0   @  
+
+À 	                              3¦ b   b   ˆ‹<                       
+      ªª    E  0   @  
+
+À 	                              ¹©       Ô€              €ª b   b   ˆƒ<                
+             ªª    E  0   @  
+
+ 	À                              �ª       Ô€              çª b   b   ˆƒ<      	          
+             ªª    E  0   @  
+
+ 	À                              À«       Ô€              ‡¬ b   b   ˆƒ<      
+     	     
+             ªª    E  0   @  
+
+ 	À                              -Í F   F   €€  ÿÿÿÿÿÿ          ­Q&     è    Œ$0H`lx
+3è`èrmesh       ÀO F   F   €€  ÿÿÿÿÿÿ           ÈÓ&     è    Œ$0H`lx
+EèR&èrmesh       ä <   <   Ð€<                 „       	           
+            ‰       Ô€              « -   -   Ð€<      	          0rmeshu  4        <       Ô€              Æ <   <   Ð€<      
+     	     	 „                              ” F   F   €€  ÿÿÿÿÿÿ     	     	0+¢-     è    Œ$0H`lx
+í&èR&èrmesh       
+ -   -   Ð€<           	     	@rmeshu  7               Ô€       	       8  E   E   Ð€  ÿÿÿÿÿÿ     	     	P‚%         
+   ˆ  –                   ,  A   A   €€  ÿÿÿÿÿÿ          @Íò-     è    Œ$0H`lxÔ&èrmesh        ®  F   F   €€  ÿÿÿÿÿÿ           èt.     è    Œ$0H`lx
+æ&èó-èrmesh       8! E   E   Ð€  ÿÿÿÿÿÿ     	     	`‚%         
+   ˆ  –                   ü| A   A   €€  ÿÿÿÿÿÿ     	     	pKC5     è    Œ$0H`lxŽ.èrmesh       } >   >   Ð€<      	          P  Œ$0H`lrmeshq  9u        Ç}       Ô€              Q~ <   <   Ð€<           	     	€   Œ$0H`lq  9u         a~       Ô€       	       7 >   >   Ð€<           	     	�  Œ$0H`lrmeshq  9u        G       Ô€       	       • <   <   Ð€<      	          `   Œ$0H`lq  9u         :€       Ô€              -¡ F   F   €€  ÿÿÿÿÿÿ          píg5     è    Œ$0H`lx
+u.èC5èrmesh       ÀO F   F   €€  ÿÿÿÿÿÿ          06     è    Œ$0H`lx
+‡.èh5èrmesh       8� E   E   Ð€  ÿÿÿÿÿÿ     	     	 ‚%         
+   ˆ  –                   Z� ?   ?   Ð€<      	          €ƒ        
+   š  Í                 ‚       Ô€              ‘‚ ?   ?   Ð€<      
+     	     	°ƒ      
+   š  f                 ƒ E   E   Ð€  ÿÿÿÿÿÿ          �‚%         
+   ˆ  ,                  T„ E   E   Ð€  ÿÿÿÿÿÿ          @‚%         
+   ˆ  É                  Í…       Ô€       
+       ;‡ ?   ?   Ð€<                Pƒ      
+   ˆ  u                 K‡       Ô€              ™‡ ?   ?   Ð€<      	           ƒ      
+   ˆ                   �‰ ?   ?   Ðˆ<      	           ƒ      
+   ˆ                   ‡Š ?   ?   Ðˆ<      	           ƒ      
+   ˆ                   0‹       Ô€              ¾‹ ?   ?   Ð€<      
+     	     	Àƒ      
+   ˆ  ¤                 ß�       Ô€       
+       «� b   b   ˆ‹<           	     0      
+      ªª    E  0   @  
+
+À 	                              »�       Ô€       	       � b   b   ˆƒ<                0      
+      ªª    E  0   @  
+
+À 	                              ë�       Ô€              œ“ b   b   ˆ‹<           	     @      
+      ªª    E  0   @  
+
+À 	                              ¬“       Ô€       	       ” b   b   ˆƒ<                @      
+      ªª    E  0   @  
+
+À 	                              0• b   b   ˆ‹<                @      
+      ªª    E  0   @  
+
+À 	                              !— b   b   ˆ‹<           	     @      
+      ªª    E  0   @  
+
+À 	                              1—       Ô€       	       ™ b   b   ˆ‹<                @      
+      ªª    E  0   @  
+
+À 	                              =› b   b   ˆ‹<                @      
+      ªª    E  0   @  
+
+À 	                              œ       Ô€              Ýœ b   b   ˆƒ<                @      
+      ªª    E  0   @  
+
+À 	                              úŸ       Ô€              ¬¥       Ô€              å       Ô€       
+       [ -   -   Ð€<      
+     	     	Ðrmeshu  7        ) F   F   €€  ÿÿÿÿÿÿ     	     	àkä<     è    Œ$0H`lx
+/6èh5èrmesh              Ô€       
+       … -   -   Ð€<      
+     	     	ðrmeshu  4        †        Ô€       
+       M& F   F   €€  ÿÿÿÿÿÿ          °í<     è    Œ$0H`lx
+6èä<èrmesh       Ø8  /   /   Ð€<           	     	 „       
+            è8        Ô€       	       69  /   /   Ð€<                À„       
+            Ë9        Ô€              E:  /   /   Ð€<                `„       
+             ®  F   F   €€  ÿÿÿÿÿÿ          p(·=     è    Œ$0H`lx
+(6èí<èrmesh       Xí  >   >   Ðˆ<      
+     	     	  Œ$0H`lrmeshq  9u        [î        Ô€       
+       Aï        Ô€       
+       Ëï  <   <   Ð€<      
+     	     	    Œ$0H`lq  9u         U F   F   €€  ÿÿÿÿÿÿ     	     	0‹]D     è    Œ$0H`lx
+í<èô=èrmesh       -… F   F   €€  ÿÿÿÿÿÿ          Ð-ŽD     è    Œ$0H`lx
+·=è^Dèrmesh       ÀO F   F   €€  ÿÿÿÿÿÿ          €HXE     è    Œ$0H`lx
+Ê=èŽDèrmesh       Ã¾	 ?   ?   Ð€<      
+     	     	@ƒ        
+   j  ¤                 À	       Ô€       
+       ÊÀ	 b   b   ˆƒ<           	     P      
+      ªª    E  0   @  
+
+À 	                              ÚÀ	       Ô€       	       1Á	 b   b   ˆƒ<                P      
+      ªª    E  0   @  
+
+À 	                              
+Â	       Ô€              IÄ	       Ô€       
+       Å	 b   b   ˆƒ<           	     `      
+      ªª    E  0   @  
+
+À 	                               Å	       Ô€       	       wÅ	 b   b   ˆƒ<                `      
+      ªª    E  0   @  
+
+À 	                              ¶Æ	 b   b   ˆ‹<                `      
+      ªª    E  0   @  
+
+À 	                              �Ç	       Ô€              VÈ	 b   b   ˆƒ<                `      
+      ªª    E  0   @  
+
+À 	                              Ðå E   E   Ð€  ÿÿÿÿÿÿ          �‚%            ˆ  8       
+           æ E   E   Ð€  ÿÿÿÿÿÿ          à‚%            ˆ  Î       
+           "ç ?   ?   Ð€<           	     	`ƒ           ½  ›        
+          2ç       Ô€       	       €ç ?   ?   Ð€<                ðƒ         ½  1       
+          )è       Ô€              ·é       Ô€       
+       Eê ?   ?   Ð€<           	     	€ƒ         ˆ  ™        
+          Uê       Ô€       	       £ê ?   ?   Ð€<                 ƒ         ˆ  /       
+           ë ?   ?   Ðˆ<                 ƒ         ˆ  /       
+          Iì       Ô€              Ôí ?   ?   Ðˆ<                °ƒ         ˆ  Ç       
+          ­î ?   ?   Ðˆ<                °ƒ         ˆ  Ç       
+          Áð       Ô€              ˆñ b   b   ˆƒ<                
+0            ªª    E  0   @  
+
+ 	À                              ˜ñ       Ô€              ïñ b   b   ˆƒ<      	          
+0            ªª    E  0   @  
+
+ 	À                              Èò       Ô€              �ó b   b   ˆƒ<      
+     	     
+0            ªª    E  0   @  
+
+ 	À                              oõ       Ô€              6ö b   b   ˆƒ<                
+@            ªª    E  0   @  
+
+ 	À                              Fö       Ô€              �ö b   b   ˆƒ<      	          
+@            ªª    E  0   @  
+
+ 	À                              v÷       Ô€              =ø b   b   ˆƒ<      
+     	     
+@            ªª    E  0   @  
+
+ 	À                              $ö F   F   €€  ÿÿÿÿÿÿ     	     	�«þK     è    Œ$0H`lx
+ŽDè–Eèrmesh       M& F   F   €€  ÿÿÿÿÿÿ          M/L     è    Œ$0H`lx
+XEèÿKèrmesh       -… F   F   €€  ÿÿÿÿÿÿ           mÐS     è    Œ$0H`lx
+XEèÿKèrmesh       €M -   -   Ð€<                0rmeshu  4        eN -   -   Ðˆ<                0rmeshu  4        SO -   -   Ðˆ<                0rmeshu  4        P -   -   Ðˆ<                0rmeshu  4        ðP -   -   Ðˆ<                0rmeshu  4        ðQ -   -   Ðˆ<                0rmeshu  4        ºR -   -   Ðˆ<                0rmeshu  4        $e <   <   Ð€<      	          @„                              ùe <   <   Ðˆ<      	          @„                              g <   <   Ðˆ<      	          @„                              h <   <   Ðˆ<      	          @„                              i <   <   Ðˆ<      	          @„                              Ýi <   <   Ðˆ<      	          @„                              Íj <   <   Ðˆ<      	          @„                              äó -   -   Ð€<      	          Prmeshu  4        äô -   -   Ðˆ<      	          Prmeshu  4        ®õ -   -   Ðˆ<      	          Prmeshu  4        Šö -   -   Ðˆ<      	          Prmeshu  4        x÷ -   -   Ðˆ<      	          Prmeshu  4        Bø -   -   Ðˆ<      	          Prmeshu  4        ù -   -   Ðˆ<      	          Prmeshu  4        M& A   A   €€  ÿÿÿÿÿÿ          `�q[     è    Œ$0H`lxÿKèrmesh       -© <   <   €€  ÿÿÿÿÿÿ          p­6c     è    Œ$0H`lx rmesh       M> <   <   €€  ÿÿÿÿÿÿ          €ÍËj     è    Œ$0H`lx rmesh       -i <   <   €€  ÿÿÿÿÿÿ          �í8r     è    Œ$0H`lx rmesh       M> <   <   €€  ÿÿÿÿÿÿ           z     è    Œ$0H`lx rmesh       -… <   <   €€  ÿÿÿÿÿÿ          °-—�     è    Œ$0H`lx rmesh       M" <   <   €€  ÿÿÿÿÿÿ          ÀM4‰     è    Œ$0H`lx rmesh    	   -… <   <   €€  ÿÿÿÿÿÿ          ÐmÙ�     è    Œ$0H`lx rmesh    	   M* <   <   €€  ÿÿÿÿÿÿ          à�~˜     è    Œ$0H`lx rmesh    
\ No newline at end of file
diff -Naur ns-3.23/src/mesh/test/dot11s/hwmp-reactive-regression-test-4-1.pcap ns-3.24/src/mesh/test/dot11s/hwmp-reactive-regression-test-4-1.pcap
--- ns-3.23/src/mesh/test/dot11s/hwmp-reactive-regression-test-4-1.pcap	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/test/dot11s/hwmp-reactive-regression-test-4-1.pcap	2015-09-15 11:18:44.000000000 -0700
@@ -1,439 +1,370 @@
-ÔÃ²¡          ÿÿ  i       u$  <   <   €€  ÿÿÿÿÿÿ            $      è    Œ$0H`lx rmesh        —$  >   >   Ð€<           	     	    Œ$0H`lrmeshq   9u         �%  >   >   Ðˆ<           	     	    Œ$0H`lrmeshq   9u         µ&  >   >   Ðˆ<           	     	    Œ$0H`lrmeshq   9u         ²'  >   >   Ðˆ<           	     	    Œ$0H`lrmeshq   9u         ¸(  >   >   Ðˆ<           	     	    Œ$0H`lrmeshq   9u         ‘)  >   >   Ðˆ<           	     	    Œ$0H`lrmeshq   9u         —*  >   >   Ðˆ<           	     	    Œ$0H`lrmeshq   9u         k?  A   A   €€  ÿÿÿÿÿÿ     	     	 k?      è    Œ$0H`lx $ èrmesh        '—  >   >   Ð€<                    Œ$0H`lrmeshq   9u         ™  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         š  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ›  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         œ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         �  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         uÄ  >   >   Ð€<           	     	    Œ$0H`lrmeshq   9u         rÅ  >   >   Ðˆ<           	     	    Œ$0H`lrmeshq   9u         ]Æ  >   >   Ðˆ<           	     	    Œ$0H`lrmeshq   9u         6Ç  >   >   Ðˆ<           	     	    Œ$0H`lrmeshq   9u         hÈ  A   A   €€  ÿÿÿÿÿÿ     
+ÔÃ²¡          ÿÿ  i       u$  <   <   €€  ÿÿÿÿÿÿ            $      è    Œ$0H`lx rmesh        —$  >   >   Ð€<           	     	    Œ$0H`lrmeshq   9u         �%  >   >   Ðˆ<           	     	    Œ$0H`lrmeshq   9u         µ&  >   >   Ðˆ<           	     	    Œ$0H`lrmeshq   9u         ²'  >   >   Ðˆ<           	     	    Œ$0H`lrmeshq   9u         ¸(  >   >   Ðˆ<           	     	    Œ$0H`lrmeshq   9u         ‘)  >   >   Ðˆ<           	     	    Œ$0H`lrmeshq   9u         —*  >   >   Ðˆ<           	     	    Œ$0H`lrmeshq   9u         k?  A   A   €€  ÿÿÿÿÿÿ     	     	 k?      è    Œ$0H`lx $ èrmesh        '—  >   >   Ð€<                    Œ$0H`lrmeshq   9u         6˜  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ™  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         š  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ›  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         œ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         �  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         uÄ  >   >   Ð€<           	     	    Œ$0H`lrmeshq   9u         rÅ  >   >   Ðˆ<           	     	    Œ$0H`lrmeshq   9u         ]Æ  >   >   Ðˆ<           	     	    Œ$0H`lrmeshq   9u         6Ç  >   >   Ðˆ<           	     	    Œ$0H`lrmeshq   9u         hÈ  A   A   €€  ÿÿÿÿÿÿ     
      
  ‰Ç      è    Œ$0H`lx ? èrmesh        œÈ  >   >   Ðˆ<           	     	    Œ$0H`lrmeshq   9u         uÉ  >   >   Ðˆ<           	     	    Œ$0H`lrmeshq   9u         {Ê  >   >   Ðˆ<           	     	    Œ$0H`lrmeshq   9u         TË  >   >   Ð€<      
      	     	0   Œ$0H`lrmeshq   9u         ýË        Ô€       	        ‡Ì  <   <   Ð€<      	     
      
       Œ$0H`lq   9u          —Ì        Ô€       
-        ÷Ì  -   -   Ð€<           	     	@ rmeshu   4         ÓÍ  -   -   Ðˆ<           	     	@ rmeshu   4         ÁÎ  -   -   Ðˆ<           	     	@ rmeshu   4         ‹Ï  -   -   Ðˆ<           	     	@ rmeshu   4         pÐ  -   -   Ðˆ<           	     	@ rmeshu   4         1Ñ  -   -   Ðˆ<           	     	@ rmeshu   4         ÂÑ        Ô€       	        8Ò  -   -   Ð€<      	          0 rmeshu  7         HÒ        Ô€               åÔ        Ô€               [Õ  -   -   Ð€<                @ rmeshu  7         Hà  >   >   Ð€<      	     
+        ÷Ì  -   -   Ð€<           	     	@ rmeshu   4         ÓÍ  -   -   Ðˆ<           	     	@ rmeshu   4         ÁÎ  -   -   Ðˆ<           	     	@ rmeshu   4         ‹Ï  -   -   Ðˆ<           	     	@ rmeshu   4         pÐ  -   -   Ðˆ<           	     	@ rmeshu   4         1Ñ  -   -   Ðˆ<           	     	@ rmeshu   4         ÂÑ        Ô€       	        8Ò  -   -   Ð€<      	          0 rmeshu  7         HÒ        Ô€               ºÓ        Ô€               BÔ  -   -   Ðˆ<      	          0 rmeshu  7         RÔ        Ô€               Õ  -   -   Ð€<                @ rmeshu  7         Hà  >   >   Ð€<      	     
      
 0   Œ$0H`lrmeshq   9u         Xà        Ô€       
         ¦à  <   <   Ð€<      
-     	     	P    Œ$0H`lq  9u          Ká        Ô€       	        •• <   <   €€  ÿÿÿÿÿÿ          P -•     è    Œ$0H`lx rmesh        ·• >   >   Ð€<           	     	`   Œ$0H`lrmeshq  9u         ½– >   >   Ðˆ<           	     	`   Œ$0H`lrmeshq  9u         º— >   >   Ðˆ<           	     	`   Œ$0H`lrmeshq  9u         É˜ >   >   Ðˆ<           	     	`   Œ$0H`lrmeshq  9u         Ø™ >   >   Ðˆ<           	     	`   Œ$0H`lrmeshq  9u         Ìš >   >   Ðˆ<           	     	`   Œ$0H`lrmeshq  9u         ä› >   >   Ðˆ<           	     	`   Œ$0H`lrmeshq  9u         ‹¨ F   F   €€  ÿÿÿÿÿÿ     	     	p ‹¨     è    Œ$0H`lx
-È è•èrmesh        ’© >   >   Ð€<      	          `   Œ$0H`lrmeshq   9u         ¢©       Ô€               ð© <   <   Ð€<           	     	€    Œ$0H`lq  9u          •ª       Ô€       	        •5 >   >   Ð€<           	     	�   Œ$0H`lrmeshq  9u         ¤6 >   >   Ðˆ<           	     	�   Œ$0H`lrmeshq  9u         †7 >   >   Ðˆ<           	     	�   Œ$0H`lrmeshq  9u         h8 >   >   Ðˆ<           	     	�   Œ$0H`lrmeshq  9u         J9 >   >   Ðˆ<           	     	�   Œ$0H`lrmeshq  9u         b: >   >   Ðˆ<           	     	�   Œ$0H`lrmeshq  9u         D; >   >   Ðˆ<           	     	�   Œ$0H`lrmeshq  9u         Ò<       Ô€               ­J -   -   Ð€<      	          p rmeshu  9         ½J       Ô€               K -   -   Ð€<           	     	  rmeshu  7         œK       Ô€       	        Oh >   >   Ð€<                €   Œ$0H`lrmeshq   9u         Æi -   -   Ð€<                � rmeshu  7        k  A   A   €€  ÿÿÿÿÿÿ     	     	° «I     è    Œ$0H`lxÈ èrmesh       j  >   >   Ð€<      	              Œ$0H`lrmeshq   9u        z        Ô€              È  <   <   Ð€<           	     	À    Œ$0H`lq  9u         m	        Ô€       	       ¡	  >   >   Ð€<           	     	Ð   Œ$0H`lrmeshq  9u        J
-        Ô€       	       Ô
-  <   <   Ð€<      	          °    Œ$0H`lq  9u         ä
-        Ô€              },  A   A   €€  ÿÿÿÿÿÿ          À Mn     è    Œ$0H`lxJèrmesh       H-        Ô€              Ò-  <   <   Ð€<                Ð    Œ$0H`lq  9u         �.  >   >   Ð€<                à   Œ$0H`lrmeshq  9u        »/        Ô€              (Æ  -   -   Ð€<      
-     	     	à rmeshu  4        ¹Æ        Ô€       	       /Ç  -   -   Ð€<      	     
-     
-P rmeshu  7        ?Ç        Ô€       
-       ùÇ  A   A   €€  ÿÿÿÿÿÿ     
-     
-` É	     è    Œ$0H`lx Jèrmesh       È  >   >   Ð€<      
-     	     	ð   Œ$0H`lrmeshq  9u        ÄÈ        Ô€       	       :É  -   -   Ð€<      	     
-     
-p rmeshu  4        JÉ        Ô€       
-       ¡É  -   -   Ð€<      
-     	     	 rmeshu  7        2Ê        Ô€       	       �¡ A   A   €€  ÿÿÿÿÿÿ          ð mã     è    Œ$0H`lxJèrmesh       ‹¨ A   A   €€  ÿÿÿÿÿÿ     	     	Ëê     è    Œ$0H`lxãèrmesh       Š© >   >   Ð€<      	     
-     
-€   Œ$0H`lrmeshq   9u        š©       Ô€       
-       è© <   <   Ð€<      
-     	     	    Œ$0H`lq  9u         �ª       Ô€       	       Áª >   >   Ð€<      
-     	     	0  Œ$0H`lrmeshq  9u        j«       Ô€       	       ô« <   <   Ð€<      	     
-     
-�    Œ$0H`lq  9u         ¬       Ô€       
-       � A   A   €€  ÿÿÿÿÿÿ     
-     
-  éÎ     è    Œ$0H`lxëèrmesh       ½& A   A   €€  ÿÿÿÿÿÿ           �h     è    Œ$0H`lxëèrmesh       k  F   F   €€  ÿÿÿÿÿÿ     	     	@ë‹     è    Œ$0H`lx
-hèÏèrmesh       ³  L   L   ƒ  ÿÿÿÿÿÿ     
-ÿÿÿÿÿÿ°      
-     ªª           
+     	     	P    Œ$0H`lq  9u          Ká        Ô€       	        •• <   <   €€  ÿÿÿÿÿÿ          P -•     è    Œ$0H`lx rmesh        ·• >   >   Ð€<           	     	`   Œ$0H`lrmeshq  9u         ½– >   >   Ðˆ<           	     	`   Œ$0H`lrmeshq  9u         º— >   >   Ðˆ<           	     	`   Œ$0H`lrmeshq  9u         É˜ >   >   Ðˆ<           	     	`   Œ$0H`lrmeshq  9u         Ø™ >   >   Ðˆ<           	     	`   Œ$0H`lrmeshq  9u         Ìš >   >   Ðˆ<           	     	`   Œ$0H`lrmeshq  9u         ä› >   >   Ðˆ<           	     	`   Œ$0H`lrmeshq  9u         ”ž       Ô€               ‹¨ F   F   €€  ÿÿÿÿÿÿ     	     	p ‹¨     è    Œ$0H`lx
+È è•èrmesh        ’© >   >   Ð€<      	          €   Œ$0H`lrmeshq  9u         ¢©       Ô€               ð© <   <   Ð€<           	     	€    Œ$0H`lq  9u          •ª       Ô€       	        •5 >   >   Ð€<           	     	�   Œ$0H`lrmeshq  9u         >6       Ô€       	        È6 <   <   Ð€<      	          �    Œ$0H`lq  9u          Ø6       Ô€               i A   A   €€  ÿÿÿÿÿÿ     
+     
+@ ©h     è    Œ$0H`lx ©èrmesh        « F   F   €€  ÿÿÿÿÿÿ     	     	  «     è    Œ$0H`lx
+iè•èrmesh       },  A   A   €€  ÿÿÿÿÿÿ            Mn     è    Œ$0H`lxèrmesh       ùÇ  A   A   €€  ÿÿÿÿÿÿ     
+     
+P É	     è    Œ$0H`lx èrmesh       ‹| F   F   €€  ÿÿÿÿÿÿ     	     	° Ë¾     è    Œ$0H`lx
+
+ènèrmesh       ¥Í F   F   €€  ÿÿÿÿÿÿ          ° m     è    Œ$0H`lx
+ðè¿èrmesh       i A   A   €€  ÿÿÿÿÿÿ     
+     
+` éª     è    Œ$0H`lx ¿èrmesh       « F   F   €€  ÿÿÿÿÿÿ     	     	À ë_     è    Œ$0H`lx
+«èèrmesh       P  N   N   ˆƒ  ÿÿÿÿÿÿ     
+ÿÿÿÿÿÿp      
+      ªª           
 
 ÿÿÿÿÿÿ
-       Þ  L   L   ƒ  ÿÿÿÿÿÿ     	ÿÿÿÿÿÿP     
-    ªª           
+       {  N   N   ˆƒ  ÿÿÿÿÿÿ     	ÿÿÿÿÿÿÐ      
+     ªª           
 
 ÿÿÿÿÿÿ
-       
-
-  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ     
-    ªª           
+       §	  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ      
+     ªª           
 
 ÿÿÿÿÿÿ
-         E   E   Ð€  ÿÿÿÿÿÿ           ‚%            ˆ  Ë       
-           i  E   E   Ð€  ÿÿÿÿÿÿ     	     	`‚%            ˆ  –       
-           l  ?   ?   Ð€<      	     
-     
-À ƒ           ˆ           
-          |        Ô€       
-       Ê  ?   ?   Ð€<           	     	pƒ         ˆ  –        
-          s        Ô€       	         ?   ?   Ð€<                0ƒ         ˆ  -       
-                  Ô€              ®  L   L   ƒ<      	          
-@          ªª           
+       ·  E   E   Ð€  ÿÿÿÿÿÿ          Ð ‚%            ˆ  Í       
+             E   E   Ð€  ÿÿÿÿÿÿ     	     	à ‚%            ˆ  ¾       
+           	  ?   ?   Ð€<      	     
+     
+€ ƒ           ˆ           
+                  Ô€       
+       g  ?   ?   Ð€<           	     	ð ƒ         ˆ  –        
+                  Ô€       	       ž  ?   ?   Ð€<                à ƒ         ˆ  /       
+          &        Ô€              Ñ  N   N   ˆƒ<      	          
+             ªª           
      
 
-       ¾        Ô€                L   L   ƒ<      
+       á        Ô€              8  N   N   ˆƒ<      
      	     
-€          ªª           
+             ªª           
      
 
-       S  L   L   ‹<      
-     	     
-€          ªª           
-     
-
-               Ô€       	       Ó  `   `   ƒ<      	     
-     Ð      
-      ªª    E  0    @  
-
-À 	                              ã        Ô€       
-       ^  `   `   ƒ<           	     �     
-     ªª    E  0    @  
+       õ        Ô€       	       ¼  b   b   ˆƒ<      	     
+            
+       ªª    E  0    @  
+
+À 	                              Ì        Ô€       
+       G  b   b   ˆƒ<           	            
+      ªª    E  0    @  
 
-À 	                              3        Ô€       	       ö  `   `   ƒ<                P     
-     ªª    E  0    @  
+À 	                                       Ô€       	       ç  b   b   ˆƒ<                       
+      ªª    E  0    @  
 
-À 	                               7  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ`         ªª           
+À 	                              …,  F   F   €€  ÿÿÿÿÿÿ          ð �°     è    Œ$0H`lx
+’è`èrmesh       ù2  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ           ªª           
 ÿÿÿÿÿÿ
-       +7  L   L   ƒ  ÿÿÿÿÿÿ     	ÿÿÿÿÿÿ          ªª           
+       $3  N   N   ˆƒ  ÿÿÿÿÿÿ     	ÿÿÿÿÿÿ           ªª           
 ÿÿÿÿÿÿ
-       W8  L   L   ƒ<      	     
-     à      
-      ªª           
-
-     
-       g8        Ô€       
-       Ç8  L   L   ƒ<           	     °     
-     ªª           
+       P4  N   N   ˆƒ<      	     
+           
+       ªª           
 
      
-       „9        Ô€       	       4A        Ô€              DC  `   `   ‹<      	          
-€          ªª    E  0    @  
-
- 	À                              TC        Ô€              «C  `   `   ƒ<      
-     	     
-À          ªª    E  0    @  
-
- 	À                              €D        Ô€       	       šK  L   L   ‹<      	     
-     à      
-      ªª           
+       `4        Ô€       
+       55  N   N   ˆƒ<           	           
+      ªª           
 
      
-       ªK        Ô€       
-       ¦L  L   L   ƒ  ÿÿÿÿÿÿ     
-ÿÿÿÿÿÿð          ªª           
-ÿÿÿÿÿÿ
-       ¥… F   F   €€  ÿÿÿÿÿÿ          �­	&     è    Œ$0H`lx
-Œèsèrmesh       ¸¡ `   `   ƒ<      	     
-          
-      ªª    E  0   @  
-
-À 	                              È¡       Ô€       
-       ¢ `   `   ƒ<           	     Ð     
-     ªª    E  0   @  
-
-À 	                              ô¢       Ô€       	       ·£ `   `   ƒ<                      
-     ªª    E  0   @  
-
-À 	                              ‹¨ F   F   €€  ÿÿÿÿÿÿ     	     	à-&     è    Œ$0H`lx
-
-&èÏèrmesh       ø­       Ô€              »® `   `   ƒ<      	          
-°          ªª    E  0   @  
-
- 	À                              Ë®       Ô€              "¯ `   `   ƒ<      
-     	     
-ð          ªª    E  0   @  
-
- 	À                              ÷¯       Ô€       	       ÙŠ -   -   Ð€<      
-     	     	 rmeshu  4        j‹       Ô€       	       à‹ -   -   Ð€<      	     
-     
- rmeshu  7        ð‹       Ô€       
-       � A   A   €€  ÿÿÿÿÿÿ     
-     
-0)'     è    Œ$0H`lxŒèrmesh       ;� >   >   Ð€<      
-     	     	  Œ$0H`lrmeshq  9u        ä�       Ô€       	       ZŽ -   -   Ð€<      	     
-     
-@rmeshu  4        jŽ       Ô€       
-       ¸Ž -   -   Ð€<      
-     	     	 rmeshu  7        I�       Ô€       	       èó /   /   Ð€<           	     	0„       
-            }ô       Ô€       	       ÷ô /   /   Ð€<                À„       
-            Å& F   F   €€  ÿÿÿÿÿÿ          ÐÍª-     è    Œ$0H`lx
-Œè'èrmesh       t   E   E   Ð€  ÿÿÿÿÿÿ     
-     
-P‚%           
-   ˆ                      ø  -   -   Ð€<      	          àrmeshu  4                Ô€              V  -   -   Ð€<           	     	@rmeshu  7        ç        Ô€       	       k  A   A   €€  ÿÿÿÿÿÿ     	     	P+Î-     è    Œ$0H`lx«-èrmesh         >   >   Ðˆ<      	     
-     
-`  Œ$0H`lrmeshq   9u                Ô€       
-       z  <   <   Ð€<      
-     	     	`   Œ$0H`lq   9u                 Ô€       	       \  >   >   Ð€<      
-     	     	p  Œ$0H`lrmeshq   9u        O  >   >   Ðˆ<      
-     	     	p  Œ$0H`lrmeshq   9u        ø        Ô€       	       ‚  <   <   Ð€<      	     
-     
-p   Œ$0H`lq  9u         ’        Ô€       
-       H¨  >   >   Ð€<      	             Œ$0H`lrmeshq  9u        X¨        Ô€              ¦¨  <   <   Ð€<           	     	€   Œ$0H`lq  9u	         K©        Ô€       	       ˆ©  >   >   Ð€<           	     	�  Œ$0H`lrmeshq  9u	        rª  >   >   Ðˆ<           	     	�  Œ$0H`lrmeshq  9u	        «        Ô€       	       ¥«  <   <   Ð€<      	             Œ$0H`lq  9u 	        µ«        Ô€              ùï  A   A   €€  ÿÿÿÿÿÿ     
-     
-€I¶.     è    Œ$0H`lxÎ-èrmesh       ¨� <   <   Ð€<      
-     	     	 „                              M‚       Ô€       	       t  E   E   Ð€  ÿÿÿÿÿÿ     
-     
-�‚%           
-   ˆ                      Ã  E   E   Ð€  ÿÿÿÿÿÿ     	     	°‚%         
-   ˆ  ¡                   Æ! ?   ?   Ð€<      	           ƒ        
-   ò  Ë                 Ö!       Ô€              $" ?   ?   Ð€<      
-     	     	Àƒ      
-   ò  f                 Í"       Ô€       	       ' `   `   ‹<      	     
-           
-      ªª    E  0   @  
-
-À 	                              -'       Ô€       
-       „' `   `   ƒ<           	     Ð     
-     ªª    E  0   @  
-
-À 	                              Y(       Ô€       	       ) `   `   ƒ<                @     
-     ªª    E  0   @  
-
-À 	                              9,       Ô€              Ç, ?   ?   Ð€<      	          Pƒ      
-   ˆ  ä                 ×,       Ô€              %- ?   ?   Ð€<      
-     	     	àƒ      
-   ˆ                   Î-       Ô€       	       Ã/ `   `   ‹<                @     
-     ªª    E  0   @  
-
-À 	                              D6 `   `   ‹<      	     
-           
-      ªª    E  0   @  
-
-À 	                              T6       Ô€       
-       T8       Ô€              9 `   `   ƒ<      	          
-`          ªª    E  0   @  
+       ò5        Ô€       	       Å;        Ô€              Œ<  b   b   ˆƒ<      	          
+            ªª    E  0    @  
 
- 	À                              '9       Ô€              ~9 `   `   ƒ<      
+ 	À                              œ<        Ô€              ó<  b   b   ˆƒ<      
      	     
-ð          ªª    E  0   @  
+            ªª    E  0    @  
 
- 	À                              v; `   `   ‹<      
-     	     
-ð          ªª    E  0   @  
-
- 	À                              K<       Ô€       	       ‹| A   A   €€  ÿÿÿÿÿÿ     	     	 KC5     è    Œ$0H`lx¶.èrmesh       ¸¡ `   `   ƒ<      	     
-     °     
-      ªª    E  0   @  
-
-À 	                              È¡       Ô€       
-       ¢ `   `   ƒ<           	          
-     ªª    E  0   @  
-
-À 	                              ô¢       Ô€       	       ·£ `   `   ƒ<                p     
-     ªª    E  0   @  
-
-À 	                               ª F   F   €€  ÿÿÿÿÿÿ          €ío5     è    Œ$0H`lx
-µ.èÎ-èrmesh       H«       Ô€              ¬ `   `   ƒ<      	          
-�          ªª    E  0   @  
-
- 	À                              ¬       Ô€              r¬ `   `   ƒ<      
-     	     
-           ªª    E  0   @  
-
- 	À                              G­       Ô€       	       ‘ A   A   €€  ÿÿÿÿÿÿ     
+ 	À                              Ì=        Ô€       	       ùÇ  A   A   €€  ÿÿÿÿÿÿ     
      
-ÀiW6     è    Œ$0H`lxC5èrmesh       æÏ       Ô€              `Ð /   /   Ð€<      	           „                   pÐ       Ô€              ¾Ð /   /   Ð€<      
-     	     	0„                   ÕÑ /   /   Ðˆ<      
-     	     	0„                   £Ò /   /   Ðˆ<      
-     	     	0„                   zÓ /   /   Ðˆ<      
-     	     	0„                   £Ô /   /   Ðˆ<      
-     	     	0„                   8Õ       Ô€       	       t€ E   E   Ð€  ÿÿÿÿÿÿ     
-     
-Ð‚%           
-   ˆ                      Ã€ E   E   Ð€  ÿÿÿÿÿÿ     	     	@‚%         
-   ˆ  §                   û� E   E   Ð€  ÿÿÿÿÿÿ          °‚%         
-   ˆ  >                  « F   F   €€  ÿÿÿÿÿÿ     	     	Pkä<     è    Œ$0H`lx
-W6èp5èrmesh       Å> F   F   €€  ÿÿÿÿÿÿ          À=     è    Œ$0H`lx
-V6èä<èrmesh       ùï  A   A   €€  ÿÿÿÿÿÿ     
-     
-à‰ø=     è    Œ$0H`lxä<èrmesh       ‹| F   F   €€  ÿÿÿÿÿÿ     	     	`‹…D     è    Œ$0H`lx
-ø=è=èrmesh       ¥� F   F   €€  ÿÿÿÿÿÿ          Ð-¦D     è    Œ$0H`lx
-÷=è†Dèrmesh       ‘ A   A   €€  ÿÿÿÿÿÿ     
-     
-ð©™E     è    Œ$0H`lx†Dèrmesh       4¾	 E   E   Ð€  ÿÿÿÿÿÿ     
-     
- ‚%           
-   ˆ                      ƒ¾	 E   E   Ð€  ÿÿÿÿÿÿ     	     	p‚%         
-   ˆ  §                   »¿	 E   E   Ð€  ÿÿÿÿÿÿ          à‚%         
-   ˆ  >                  ¢Ã	       Ô€              0Ä	 ?   ?   Ð€<      	          ðƒ      
-   ˆ  +                 @Ä	       Ô€              ŽÄ	 ?   ?   Ð€<      
-     	     	€ƒ      
-   ˆ  Ä                 7Å	       Ô€       	       úÅ	 `   `   ƒ<      	     
-          
-      ªª    E  0   @  
-
-À 	                              
-Æ	       Ô€       
-       aÆ	 `   `   ƒ<           	     �     
-     ªª    E  0   @  
-
-À 	                              ®Ç	 `   `   ‹<           	     �     
-     ªª    E  0   @  
-
-À 	                              ƒÈ	       Ô€       	       ‡Í	 `   `   ‹<      	     
-           
-      ªª    E  0   @  
-
-À 	                              —Í	       Ô€       
-       îÍ	 `   `   ƒ<           	           
-     ªª    E  0   @  
+  	L     è    Œ$0H`lx `èrmesh       ‹| F   F   €€  ÿÿÿÿÿÿ     	     	&     è    Œ$0H`lx
+Lè±èrmesh       ¼¡ b   b   ˆƒ<      	     
+            
+       ªª    E  0   @  
 
-À 	                              ÃÎ	       Ô€       	       ¥×	 `   `   ‹<                     
-     ªª    E  0   @  
+À 	                              Ì¡       Ô€       
+       #¢ b   b   ˆƒ<           	            
+      ªª    E  0   @  
 
-À 	                              ‚Û	       Ô€              EÜ	 `   `   ƒ<      	          
-           ªª    E  0   @  
+À 	                              ü¢       Ô€       	       Ã£ b   b   ˆƒ<                       
+      ªª    E  0   @  
+
+À 	                              ¼ª       Ô€              ƒ« b   b   ˆƒ<      	          
+             ªª    E  0   @  
 
- 	À                              UÜ	       Ô€              ¬Ü	 `   `   ƒ<      
+ 	À                              “«       Ô€              ê« b   b   ˆƒ<      
      	     
-°          ªª    E  0   @  
+             ªª    E  0   @  
+
+ 	À                              Ã¬       Ô€       	       ¥Í F   F   €€  ÿÿÿÿÿÿ          ­Q&     è    Œ$0H`lx
+3è`èrmesh       i A   A   €€  ÿÿÿÿÿÿ     
+     
+° )í&     è    Œ$0H`lx &èrmesh       L <   <   Ð€<                 „       	           
+            ÿ -   -   Ð€<      	          0rmeshu  4               Ô€              ] <   <   Ð€<      
+     	     	 „                                     Ô€       	        F   F   €€  ÿÿÿÿÿÿ     	     	0+¢-     è    Œ$0H`lx
+í&èR&èrmesh       µ -   -   Ð€<           	     	@rmeshu  7        F       Ô€       	       t   E   E   Ð€  ÿÿÿÿÿÿ     
+     
+À ‚%           
+   ˆ                      Ã   E   E   Ð€  ÿÿÿÿÿÿ     	     	P‚%         
+   ˆ  –                   },  A   A   €€  ÿÿÿÿÿÿ          @Íò-     è    Œ$0H`lxÔ&èrmesh       ùÇ  A   A   €€  ÿÿÿÿÿÿ     
+     
+Ð IŽ.     è    Œ$0H`lx £-èrmesh       t  E   E   Ð€  ÿÿÿÿÿÿ     
+     
+à ‚%           
+   ˆ                      Ã  E   E   Ð€  ÿÿÿÿÿÿ     	     	`‚%         
+   ˆ  –                   ‹| A   A   €€  ÿÿÿÿÿÿ     	     	pKC5     è    Œ$0H`lxŽ.èrmesh       Š} >   >   Ð€<      	          P  Œ$0H`lrmeshq  9u        š}       Ô€              è} <   <   Ð€<           	     	€   Œ$0H`lq  9u         �~       Ô€       	       Ê~ >   >   Ð€<           	     	�  Œ$0H`lrmeshq  9u        s       Ô€       	       ý <   <   Ð€<      	          `   Œ$0H`lq  9u         €       Ô€              ¥¡ F   F   €€  ÿÿÿÿÿÿ          píg5     è    Œ$0H`lx
+u.èC5èrmesh       i A   A   €€  ÿÿÿÿÿÿ     
+     
+ð i/6     è    Œ$0H`lx £-èrmesh       t€ E   E   Ð€  ÿÿÿÿÿÿ     
+     
+ ‚%           
+   ˆ                      Ã€ E   E   Ð€  ÿÿÿÿÿÿ     	     	 ‚%         
+   ˆ  –                   Æ� ?   ?   Ð€<      	          €ƒ        
+   š  Í                 Ö�       Ô€              $‚ ?   ?   Ð€<      
+     	     	°ƒ      
+   š  f                 Í‚       Ô€       	       �… b   b   ˆ‹<      	     
+     0      
+       ªª    E  0   @  
+
+À 	                               …       Ô€       
+       ÷… b   b   ˆƒ<           	     0      
+      ªª    E  0   @  
+
+À 	                              w‡       Ô€              tˆ b   b   ˆ‹<           	     0      
+      ªª    E  0   @  
+
+À 	                              óŠ ?   ?   Ðˆ<      	           ƒ      
+   ˆ                   ‹       Ô€              Q‹ ?   ?   Ð€<      
+     	     	Àƒ      
+   ˆ  ¤                 ú‹       Ô€       	       ¢� b   b   ˆ‹<      	     
+     @      
+       ªª    E  0   @  
+
+À 	                              ²�       Ô€       
+       � b   b   ˆ‹<           	     0      
+      ªª    E  0   @  
+
+À 	                              ç�       Ô€       	       ®� b   b   ˆƒ<                0      
+      ªª    E  0   @  
+
+À 	                              Š‘ b   b   ˆƒ<           	     @      
+      ªª    E  0   @  
+
+À 	                              ÿ’ b   b   ˆ‹<           	     @      
+      ªª    E  0   @  
+
+À 	                              Ÿ” b   b   ˆƒ<                @      
+      ªª    E  0   @  
+
+À 	                              Ì• b   b   ˆ‹<                @      
+      ªª    E  0   @  
+
+À 	                              „– b   b   ˆ‹<           	     @      
+      ªª    E  0   @  
+
+À 	                              ]—       Ô€       	       ž™ b   b   ˆ‹<                @      
+      ªª    E  0   @  
+
+À 	                              Ù› b   b   ˆ‹<                @      
+      ªª    E  0   @  
+
+À 	                              ¨ -   -   Ð€<      	     
+     
+rmeshu  4        ¸       Ô€       
+        -   -   Ð€<      
+     	     	Ðrmeshu  7        —       Ô€       	       ° F   F   €€  ÿÿÿÿÿÿ     	     	àkä<     è    Œ$0H`lx
+/6èh5èrmesh       Ò >   >   Ð€<      	     
+     
+   Œ$0H`lrmeshq   9u        â       Ô€       
+       0 -   -   Ð€<      
+     	     	ðrmeshu  4        Á       Ô€       	       I  -   -   Ð€<      	     
+     
+0rmeshu  7        Y        Ô€       
+       Å& F   F   €€  ÿÿÿÿÿÿ          °í<     è    Œ$0H`lx
+6èä<èrmesh       8  /   /   Ð€<           	     	 „       
+            9        Ô€       	       Ž9  /   /   Ð€<                À„       
+            ñë  <   <   €€  ÿÿÿÿÿÿ     
+     
+@‰ô=     è    Œ$0H`lx rmesh       ì  >   >   Ð€<      
+     	     	  Œ$0H`lrmeshq  9u        ëì  >   >   Ðˆ<      
+     	     	  Œ$0H`lrmeshq  9u        ”í        Ô€       	       î  <   <   Ð€<      	     
+     
+P   Œ$0H`lq   9u         .î        Ô€       
+       ï  >   >   Ð€<      	     
+     
+`  Œ$0H`lrmeshq   9u        ï        Ô€       
+       bï  <   <   Ð€<      
+     	     	    Œ$0H`lq  9u         ð        Ô€       	       ‹T F   F   €€  ÿÿÿÿÿÿ     	     	0‹]D     è    Œ$0H`lx
+í<èô=èrmesh       ¥… F   F   €€  ÿÿÿÿÿÿ          Ð-ŽD     è    Œ$0H`lx
+·=è^Dèrmesh       � A   A   €€  ÿÿÿÿÿÿ     
+     
+p©•E     è    Œ$0H`lx^Dèrmesh       4¾	 E   E   Ð€  ÿÿÿÿÿÿ     
+     
+€‚%           
+   ˆ                      V¾	 ?   ?   Ð€<      
+     	     	@ƒ        
+   j  ¤                 ÿ¾	       Ô€       	       Æ¿	 b   b   ˆƒ<      	     
+     P      
+       ªª    E  0   @  
+
+À 	                              Ö¿	       Ô€       
+       -À	 b   b   ˆƒ<           	     P      
+      ªª    E  0   @  
+
+À 	                              Á	       Ô€       	       vÂ	 E   E   Ð€  ÿÿÿÿÿÿ     	     	P‚%         
+   ˆ  ›                   Ä	 b   b   ˆ‹<      	     
+     `      
+       ªª    E  0   @  
+
+À 	                              Ä	       Ô€       
+       sÄ	 b   b   ˆƒ<           	     `      
+      ªª    E  0   @  
+
+À 	                              LÅ	       Ô€       	       Æ	 b   b   ˆƒ<                `      
+      ªª    E  0   @  
+
+À 	                              RÇ	 b   b   ˆ‹<                `      
+      ªª    E  0   @  
+
+À 	                              “æ E   E   Ð€  ÿÿÿÿÿÿ          à‚%            ˆ  Î       
+           µæ ?   ?   Ð€<           	     	`ƒ           ½  ›        
+          ^ç       Ô€       	       ìç ?   ?   Ð€<                ðƒ         ½  1       
+          wè E   E   Ð€  ÿÿÿÿÿÿ     	     	p‚%            ˆ  s       
+           zé ?   ?   Ð€<      	     
+     
+�ƒ           ˆ           
+          Šé       Ô€       
+       Øé ?   ?   Ð€<           	     	€ƒ         ˆ  ™        
+          �ê       Ô€       	       ë ?   ?   Ð€<                 ƒ         ˆ  /       
+          ì ?   ?   Ðˆ<                 ƒ         ˆ  /       
+          Äñ       Ô€              ‹ò b   b   ˆƒ<      	          
+0            ªª    E  0   @  
 
- 	À                              Þ	 `   `   ‹<      
+ 	À                              ›ò       Ô€              òò b   b   ˆƒ<      
      	     
-°          ªª    E  0   @  
+0            ªª    E  0   @  
 
- 	À                              àÞ	       Ô€       	       ×â	       Ô€              šã	 `   `   ƒ<      	          
-0          ªª    E  0   @  
+ 	À                              Ëó       Ô€       	       rö       Ô€              9÷ b   b   ˆƒ<      	          
+@            ªª    E  0   @  
 
- 	À                              ªã	       Ô€              ä	 `   `   ƒ<      
+ 	À                              I÷       Ô€               ÷ b   b   ˆƒ<      
      	     
-À          ªª    E  0   @  
+@            ªª    E  0   @  
 
- 	À                              Öä	       Ô€       	       « F   F   €€  ÿÿÿÿÿÿ     	     	Ð«&L     è    Œ$0H`lx
-šEè¦Dèrmesh       Å> F   F   €€  ÿÿÿÿÿÿ          @MGL     è    Œ$0H`lx
-˜Eè'Lèrmesh       ˜   `   `   ƒ<      	     
-     0     
-      ªª    E  0   @  
+ 	À                              yø       Ô€       	       «õ F   F   €€  ÿÿÿÿÿÿ     	     	�«þK     è    Œ$0H`lx
+ŽDè–Eèrmesh       Å& F   F   €€  ÿÿÿÿÿÿ          M/L     è    Œ$0H`lx
+XEèÿKèrmesh       œ   b   b   ˆƒ<      	     
+     p      
+       ªª    E  0   @  
 
-À 	                              ¨         Ô€       
-       ÿ   `   `   ƒ<           	     à     
-     ªª    E  0   @  
+À 	                              ¬         Ô€       
+         b   b   ˆƒ<           	     p      
+      ªª    E  0   @  
 
-À 	                              p  `   `   ‹<           	     à     
-     ªª    E  0   @  
+À 	                              Ò  b   b   ˆ‹<           	     p      
+      ªª    E  0   @  
 
-À 	                              Æ  `   `   ‹<           	     à     
-     ªª    E  0   @  
+À 	                              ª  b   b   ˆ‹<           	     p      
+      ªª    E  0   @  
 
-À 	                              ð  `   `   ‹<           	     à     
-     ªª    E  0   @  
+À 	                              H  b   b   ˆ‹<           	     p      
+      ªª    E  0   @  
 
-À 	                              -  `   `   ‹<           	     à     
-     ªª    E  0   @  
+À 	                              •	  b   b   ˆ‹<           	     p      
+      ªª    E  0   @  
 
-À 	                              ¨  `   `   ‹<           	     à     
-     ªª    E  0   @  
+À 	                              2  b   b   ˆ‹<           	     p      
+      ªª    E  0   @  
 
-À 	                              P  `   `   ‹<           	     à     
-     ªª    E  0   @  
+À 	                              %  b   b   ˆ‹<           	     p      
+      ªª    E  0   @  
 
-À 	                              ùï  A   A   €€  ÿÿÿÿÿÿ     
+À 	                              ùë  A   A   €€  ÿÿÿÿÿÿ     
      
-@É:M     è    Œ$0H`lx'Lèrmesh       ‹| F   F   €€  ÿÿÿÿÿÿ     	     	ðËÇS     è    Œ$0H`lx
-;MèGLèrmesh       ¸¡ `   `   ƒ<      	     
-     P     
-      ªª    E  0   @  
+ É6M     è    Œ$0H`lxÿKèrmesh       ‹T F   F   €€  ÿÿÿÿÿÿ     	     	 ËŸS     è    Œ$0H`lx
+/Lè7Mèrmesh       ¼¡ b   b   ˆƒ<      	     
+     €      
+       ªª    E  0   @  
 
-À 	                              È¡       Ô€       
-       ¢ `   `   ƒ<           	           
-     ªª    E  0   @  
+À 	                              Ì¡       Ô€       
+       #¢ b   b   ˆƒ<           	     €      
+      ªª    E  0   @  
 
-À 	                              ¤ `   `   ‹<           	           
-     ªª    E  0   @  
+À 	                              G£ b   b   ˆ‹<           	     €      
+      ªª    E  0   @  
 
-À 	                              J§ `   `   ‹<           	           
-     ªª    E  0   @  
+À 	                              Î¤ b   b   ˆ‹<           	     €      
+      ªª    E  0   @  
 
-À 	                              ]© `   `   ‹<           	           
-     ªª    E  0   @  
+À 	                              @© b   b   ˆ‹<           	     €      
+      ªª    E  0   @  
 
-À 	                              †ª `   `   ‹<           	           
-     ªª    E  0   @  
+À 	                              @³ b   b   ˆ‹<           	     €      
+      ªª    E  0   @  
 
-À 	                              ­ `   `   ‹<           	           
-     ªª    E  0   @  
+À 	                              �¸ b   b   ˆ‹<           	     €      
+      ªª    E  0   @  
 
-À 	                              Ý¶ `   `   ‹<           	           
-     ªª    E  0   @  
+À 	                              º b   b   ˆ‹<           	     €      
+      ªª    E  0   @  
 
-À 	                              â· -   -   Ð€<           	     	rmeshu	  4        ¬¸ -   -   Ðˆ<           	     	rmeshu	  4        ˆ¹ -   -   Ðˆ<           	     	rmeshu	  4        Rº -   -   Ðˆ<           	     	rmeshu	  4        7» -   -   Ðˆ<           	     	rmeshu	  4        ø» -   -   Ðˆ<           	     	rmeshu	  4        ø¼ -   -   Ðˆ<           	     	rmeshu	  4        (} <   <   Ð€<      
-     	     	 „                              3~ <   <   Ðˆ<      
-     	     	 „                              Ø~       Ô€       	       « A   A   €€  ÿÿÿÿÿÿ     	     	0ëh[     è    Œ$0H`lx;Mèrmesh       t   E   E   Ð€  ÿÿÿÿÿÿ     
-     
-p‚%           
-   ˆ                      Ã   E   E   Ð€  ÿÿÿÿÿÿ     	     	@‚%         
-   ˆ  Û                   ¹í  -   -   Ð€<      
-     	     	Prmeshu  4        Jî        Ô€       	       Àï  -   -   Ðˆ<      	     
+À 	                              » -   -   Ð€<           	     	°rmeshu  4        Û» -   -   Ðˆ<           	     	°rmeshu  4        É¼ -   -   Ðˆ<           	     	°rmeshu  4        ·½ -   -   Ðˆ<           	     	°rmeshu  4        x¾ -   -   Ðˆ<           	     	°rmeshu  4        x¿ -   -   Ðˆ<           	     	°rmeshu  4        oÀ -   -   Ðˆ<           	     	°rmeshu  4        ?f <   <   Ð€<      
+     	     	À„                              äf       Ô€       	       � A   A   €€  ÿÿÿÿÿÿ     
      
-€rmeshu  7        Ðï        Ô€       
-       †ð  A   A   €€  ÿÿÿÿÿÿ     
+°é×T     è    Œ$0H`lx Sèrmesh       «õ A   A   €€  ÿÿÿÿÿÿ     	     	Ðë@[     è    Œ$0H`lxØTèrmesh       t   E   E   Ð€  ÿÿÿÿÿÿ     
      
-�	}\     è    Œ$0H`lxi[èrmesh       ¨ð  >   >   Ð€<      
-     	     	`  Œ$0H`lrmeshq   9u
-        Qñ        Ô€       	       Ùñ  -   -   Ð€<      	     
+À‚%           
+   ˆ                      Ã   E   E   Ð€  ÿÿÿÿÿÿ     	     	à‚%         
+   ˆ  —                   ùë  A   A   €€  ÿÿÿÿÿÿ     
      
- rmeshu 
- 4        éñ        Ô€       
-       7ò  -   -   Ð€<      
-     	     	prmeshu
-  7        Èò        Ô€       	       t  E   E   Ð€  ÿÿÿÿÿÿ     
+Ð	y\     è    Œ$0H`lxA[èrmesh       t  E   E   Ð€  ÿÿÿÿÿÿ     
      
-°‚%           
-   ˆ                      ‹T <   <   €€  ÿÿÿÿÿÿ     	     	€âb     è    Œ$0H`lx rmesh       ‚U >   >   Ð€<      	     
+à‚%           
+	   ˆ                      Ã  E   E   Ð€  ÿÿÿÿÿÿ     	     	ð‚%         
+	   ˆ  —                   ‹T A   A   €€  ÿÿÿÿÿÿ     	     	 âb     è    Œ$0H`lxy\èrmesh       � A   A   €€  ÿÿÿÿÿÿ     
      
-À  Œ$0H`lrmeshq   9u        ’U       Ô€       
-       àU <   <   Ð€<      
-     	     	�  
- Œ$0H`lq   9u         …V       Ô€       	       §V >   >   Ð€<      
-     	     	   Œ$0H`lrmeshq   9u        PW       Ô€       	       ÚW <   <   Ð€<      	     
+ð)d     è    Œ$0H`lxâbèrmesh       t€ E   E   Ð€  ÿÿÿÿÿÿ     
      
-Ð   Œ$0H`lq  9u         êW       Ô€       
-       e A   A   €€  ÿÿÿÿÿÿ     
-     
-à)òc     è    Œ$0H`lxâbèrmesh       t€ E   E   Ð€  ÿÿÿÿÿÿ     
-     
-ð‚%           
-	   ˆ                      Ã€ E   E   Ð€  ÿÿÿÿÿÿ     	     	°‚%         
-	   ˆ  «                   «õ A   A   €€  ÿÿÿÿÿÿ     	     	À+ƒj     è    Œ$0H`lx
-òcèrmesh       ùÃ  A   A   €€  ÿÿÿÿÿÿ     
-     
- I“k     è    Œ$0H`lxƒjèrmesh       ‹T A   A   €€  ÿÿÿÿÿÿ     	     	ÐK$r     è    Œ$0H`lx
-“kèrmesh       e A   A   €€  ÿÿÿÿÿÿ     
-     
-i4s     è    Œ$0H`lx$rèrmesh       4¾	 E   E   Ð€  ÿÿÿÿÿÿ     
-     
- ‚%           
+ ‚%           
 
-   ˆ                      ƒ¾	 E   E   Ð€  ÿÿÿÿÿÿ     	     	à‚%         
+   ˆ                      Ã€ E   E   Ð€  ÿÿÿÿÿÿ     	     	‚%         
 
-   ˆ  «                   «õ A   A   €€  ÿÿÿÿÿÿ     	     	ðkÅy     è    Œ$0H`lx
-4sèrmesh       ùÃ  A   A   €€  ÿÿÿÿÿÿ     
+   ˆ  —                   «õ A   A   €€  ÿÿÿÿÿÿ     	     	 +ƒj     è    Œ$0H`lxdèrmesh       ùë  A   A   €€  ÿÿÿÿÿÿ     
      
-0‰Õz     è    Œ$0H`lxÅyèrmesh       ‹T A   A   €€  ÿÿÿÿÿÿ     	     	 ‹f�     è    Œ$0H`lx
-Õzèrmesh       «õ A   A   €€  ÿÿÿÿÿÿ     	     	«‰     è    Œ$0H`lx
-Õzèrmesh    	   t   E   E   Ð€  ÿÿÿÿÿÿ     
+I»k     è    Œ$0H`lxƒjèrmesh       ‹T A   A   €€  ÿÿÿÿÿÿ     	     	0K$r     è    Œ$0H`lx»kèrmesh       � A   A   €€  ÿÿÿÿÿÿ     
      
-P‚%   	        
-   ˆ                   	   Ã   E   E   Ð€  ÿÿÿÿÿÿ     	     	 ‚% 	        
-   ˆ  «                	   ¹Á  -   -   Ð€<      
-     	     	0rmeshu  4     	   JÂ        Ô€       	    	   ÀÂ  -   -   Ð€<      	     
+ i\s     è    Œ$0H`lx$rèrmesh       4¾	 E   E   Ð€  ÿÿÿÿÿÿ     
      
-`rmeshu  7     	   ÐÂ        Ô€       
-    	   ùÃ  A   A   €€  ÿÿÿÿÿÿ     
+0‚%           
+   ˆ                      ƒ¾	 E   E   Ð€  ÿÿÿÿÿÿ     	     	@‚%         
+   ˆ  —                   «õ A   A   €€  ÿÿÿÿÿÿ     	     	PkÅy     è    Œ$0H`lx\sèrmesh       ùë  A   A   €€  ÿÿÿÿÿÿ     
      
-pÉŠ     è    Œ$0H`lx‰èrmesh    	   Ä  >   >   Ð€<      
-     	     	@  Œ$0H`lrmeshq   9u     	   ÄÄ        Ô€       	    	   :Å  -   -   Ð€<      	     
+@‰ýz     è    Œ$0H`lxÅyèrmesh       ‹T A   A   €€  ÿÿÿÿÿÿ     	     	`‹f�     è    Œ$0H`lxýzèrmesh       � A   A   €€  ÿÿÿÿÿÿ     
      
-€rmeshu  4     	   JÅ        Ô€       
-    	   ³Å  -   -   Ð€<      
-     	     	Prmeshu  7     	   DÆ        Ô€       	    	   t  E   E   Ð€  ÿÿÿÿÿÿ     
+P©ž‚     è    Œ$0H`lxf�èrmesh       «õ A   A   €€  ÿÿÿÿÿÿ     	     	p«‰     è    Œ$0H`lxŸ‚èrmesh    	   t   E   E   Ð€  ÿÿÿÿÿÿ     
      
-�‚%   
+`‚%   	        
+   ˆ                   	   Ã   E   E   Ð€  ÿÿÿÿÿÿ     	     	€‚% 	        
+   ˆ  —                	   ùë  A   A   €€  ÿÿÿÿÿÿ     
+     
+pÉ?Š     è    Œ$0H`lx‰èrmesh    	   t  E   E   Ð€  ÿÿÿÿÿÿ     
+     
+€‚%   
         
-   ˆ                   	   ‹L <   <   €€  ÿÿÿÿÿÿ     	     	`Ë �     è    Œ$0H`lx rmesh    	   ‚M >   >   Ð€<      	     
+   ˆ                   	   Ã  E   E   Ð€  ÿÿÿÿÿÿ     	     	�‚% 
+        
+   ˆ  —                	   ‹T A   A   €€  ÿÿÿÿÿÿ     	     	 Ë¨�     è    Œ$0H`lx@Šèrmesh    	   � A   A   €€  ÿÿÿÿÿÿ     
+     
+�éà‘     è    Œ$0H`lx©�èrmesh    	   t€ E   E   Ð€  ÿÿÿÿÿÿ     
      
-   Œ$0H`lrmeshq   9u     	   ’M       Ô€       
-    	   àM <   <   Ð€<      
-     	     	p   Œ$0H`lq   9u      	   «N <   <   Ðˆ<      
-     	     	p   Œ$0H`lq   9u      	   PO       Ô€       	    	   �O >   >   Ð€<      
-     	     	€  Œ$0H`lrmeshq   9u     	   6P       Ô€       	    	   ÀP <   <   Ð€<      	     
-     
-°   Œ$0H`lq  9u      	   ÐP       Ô€       
-    	   � A   A   €€  ÿÿÿÿÿÿ     
-     
-Àéð‘     è    Œ$0H`lx¡�èrmesh    	   t€ E   E   Ð€  ÿÿÿÿÿÿ     
-     
-Ð‚%           
-   ˆ                   	   Ã€ E   E   Ð€  ÿÿÿÿÿÿ     	     	�‚%         
-   ˆ  ·                	   «í A   A   €€  ÿÿÿÿÿÿ     	     	 ëA˜     è    Œ$0H`lxñ‘èrmesh    
\ No newline at end of file
+ ‚%           
+   ˆ                   	   Ã€ E   E   Ð€  ÿÿÿÿÿÿ     	     	°‚%         
+   ˆ  —                	   «õ A   A   €€  ÿÿÿÿÿÿ     	     	ÀëI˜     è    Œ$0H`lxá‘èrmesh    
\ No newline at end of file
diff -Naur ns-3.23/src/mesh/test/dot11s/hwmp-reactive-regression-test-5-1.pcap ns-3.24/src/mesh/test/dot11s/hwmp-reactive-regression-test-5-1.pcap
--- ns-3.23/src/mesh/test/dot11s/hwmp-reactive-regression-test-5-1.pcap	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/test/dot11s/hwmp-reactive-regression-test-5-1.pcap	2015-09-15 11:18:44.000000000 -0700
@@ -1,5 +1,5 @@
 ÔÃ²¡          ÿÿ  i       
-&  >   >   Ðˆ<           	     	    Œ$0H`lrmeshq   9u         Ü?  A   A   €€  ÿÿÿÿÿÿ     	     	 k?      è    Œ$0H`lx $ èrmesh        þ?  >   >   Ð€<      	     
+&  >   >   Ðˆ<           	     	    Œ$0H`lrmeshq   9u         "'  >   >   Ðˆ<           	     	    Œ$0H`lrmeshq   9u         (  >   >   Ðˆ<           	     	    Œ$0H`lrmeshq   9u         %)  >   >   Ðˆ<           	     	    Œ$0H`lrmeshq   9u         þ)  >   >   Ðˆ<           	     	    Œ$0H`lrmeshq   9u         +  >   >   Ðˆ<           	     	    Œ$0H`lrmeshq   9u         Ü?  A   A   €€  ÿÿÿÿÿÿ     	     	 k?      è    Œ$0H`lx $ èrmesh        þ?  >   >   Ð€<      	     
      
     Œ$0H`lrmeshq   9u         ×@  >   >   Ðˆ<      	     
      
@@ -13,406 +13,320 @@
      
     Œ$0H`lrmeshq   9u         ¿E  >   >   Ðˆ<      	     
      
-    Œ$0H`lrmeshq   9u         âÄ  >   >   Ð€<           	     	    Œ$0H`lrmeshq   9u         ÊÆ  >   >   Ðˆ<           	     	    Œ$0H`lrmeshq   9u         £Ç  >   >   Ðˆ<           	     	    Œ$0H`lrmeshq   9u         øÇ  A   A   €€  ÿÿÿÿÿÿ     
+    Œ$0H`lrmeshq   9u         âÄ  >   >   Ð€<           	     	    Œ$0H`lrmeshq   9u         ßÅ  >   >   Ðˆ<           	     	    Œ$0H`lrmeshq   9u         ÊÆ  >   >   Ðˆ<           	     	    Œ$0H`lrmeshq   9u         £Ç  >   >   Ðˆ<           	     	    Œ$0H`lrmeshq   9u         øÇ  A   A   €€  ÿÿÿÿÿÿ     
      
- ‰Ç      è    Œ$0H`lx ? èrmesh        èÊ  >   >   Ðˆ<           	     	    Œ$0H`lrmeshq   9u         ÁË  >   >   Ð€<      
+ ‰Ç      è    Œ$0H`lx ? èrmesh        	É  >   >   Ðˆ<           	     	    Œ$0H`lrmeshq   9u         èÊ  >   >   Ðˆ<           	     	    Œ$0H`lrmeshq   9u         ÁË  >   >   Ð€<      
      	     	0   Œ$0H`lrmeshq   9u         ÑË        Ô€       	        Ì  <   <   Ð€<      	     
      
       Œ$0H`lq   9u          ÄÌ        Ô€       
-        àÏ  -   -   Ðˆ<           	     	@ rmeshu   4         ÅÐ  -   -   Ðˆ<           	     	@ rmeshu   4         †Ñ  -   -   Ðˆ<           	     	@ rmeshu   4         uÒ        Ô€               Üß  >   >   Ð€<      	     
+        LÍ  -   -   Ð€<           	     	@ rmeshu   4         (Î  -   -   Ðˆ<           	     	@ rmeshu   4         Ï  -   -   Ðˆ<           	     	@ rmeshu   4         àÏ  -   -   Ðˆ<           	     	@ rmeshu   4         ÅÐ  -   -   Ðˆ<           	     	@ rmeshu   4         †Ñ  -   -   Ðˆ<           	     	@ rmeshu   4         uÒ        Ô€               Ô        Ô€               Üß  >   >   Ð€<      	     
      
 0   Œ$0H`lrmeshq   9u         …à        Ô€       
         á  <   <   Ð€<      
-     	     	P    Œ$0H`lq  9u          á        Ô€       	        $– >   >   Ð€<           	     	`   Œ$0H`lrmeshq  9u         *— >   >   Ðˆ<           	     	`   Œ$0H`lrmeshq  9u         '˜ >   >   Ðˆ<           	     	`   Œ$0H`lrmeshq  9u         © F   F   €€  ÿÿÿÿÿÿ     	     	p ‹¨     è    Œ$0H`lx
-È è•èrmesh        Ï©       Ô€               Yª <   <   Ð€<           	     	€    Œ$0H`lq  9u          6 >   >   Ð€<           	     	�   Œ$0H`lrmeshq  9u         ó7 >   >   Ðˆ<           	     	�   Œ$0H`lrmeshq  9u         ·9 >   >   Ðˆ<           	     	�   Œ$0H`lrmeshq  9u         Ï: >   >   Ðˆ<           	     	�   Œ$0H`lrmeshq  9u         ±; >   >   Ðˆ<           	     	�   Œ$0H`lrmeshq  9u         êJ       Ô€               `K -   -   Ð€<           	     	  rmeshu  7         ©h A   A   €€  ÿÿÿÿÿÿ     
+     	     	P    Œ$0H`lq  9u          á        Ô€       	        $– >   >   Ð€<           	     	`   Œ$0H`lrmeshq  9u         '˜ >   >   Ðˆ<           	     	`   Œ$0H`lrmeshq  9u         6™ >   >   Ðˆ<           	     	`   Œ$0H`lrmeshq  9u         Eš >   >   Ðˆ<           	     	`   Œ$0H`lrmeshq  9u         9› >   >   Ðˆ<           	     	`   Œ$0H`lrmeshq  9u         Qœ >   >   Ðˆ<           	     	`   Œ$0H`lrmeshq  9u         © F   F   €€  ÿÿÿÿÿÿ     	     	p ‹¨     è    Œ$0H`lx
+È è•èrmesh        Ï©       Ô€               Yª <   <   Ð€<           	     	€    Œ$0H`lq  9u          7       Ô€               ©h A   A   €€  ÿÿÿÿÿÿ     
      
-@ ©h     è    Œ$0H`lx ©èrmesh       Ü  A   A   €€  ÿÿÿÿÿÿ     	     	° «I     è    Œ$0H`lxÈ èrmesh       §        Ô€              1	  <   <   Ð€<           	     	À    Œ$0H`lq  9u         
-  >   >   Ð€<           	     	Ð   Œ$0H`lrmeshq  9u                Ô€              }Æ  -   -   Ð€<      
-     	     	à rmeshu  4        �Æ        Ô€       	       ÛÆ  -   -   Ð€<      	     
-     
-P rmeshu  7        lÇ        Ô€       
-       ‰Ç  A   A   €€  ÿÿÿÿÿÿ     
-     
-` É	     è    Œ$0H`lx Jèrmesh       ˆÈ  >   >   Ð€<      
-     	     	ð   Œ$0H`lrmeshq  9u        ˜È        Ô€       	       æÈ  -   -   Ð€<      	     
-     
-p rmeshu  4        wÉ        Ô€       
-       öÉ  -   -   Ð€<      
-     	     	 rmeshu  7        Ê        Ô€       	       ü¨ A   A   €€  ÿÿÿÿÿÿ     	     	Ëê     è    Œ$0H`lxãèrmesh       © >   >   Ð€<      	     
-     
-€   Œ$0H`lrmeshq   9u        Ç©       Ô€       
-       Qª <   <   Ð€<      
-     	     	    Œ$0H`lq  9u         aª       Ô€       	       .« >   >   Ð€<      
-     	     	0  Œ$0H`lrmeshq  9u        >«       Ô€       	       Œ« <   <   Ð€<      	     
-     
-�    Œ$0H`lq  9u         1¬       Ô€       
-       ©Œ A   A   €€  ÿÿÿÿÿÿ     
-     
-  éÎ     è    Œ$0H`lxëèrmesh       ä  F   F   €€  ÿÿÿÿÿÿ     	     	@ë‹     è    Œ$0H`lx
-hèÏèrmesh       3  L   L   ƒ  ÿÿÿÿÿÿ     
-ÿÿÿÿÿÿ°      
-     ªª           
+@ ©h     è    Œ$0H`lx ©èrmesh        $ F   F   €€  ÿÿÿÿÿÿ     	     	  «     è    Œ$0H`lx
+iè•èrmesh       ‰Ç  A   A   €€  ÿÿÿÿÿÿ     
+     
+P É	     è    Œ$0H`lx èrmesh       } F   F   €€  ÿÿÿÿÿÿ     	     	° Ë¾     è    Œ$0H`lx
+
+ènèrmesh       ©h A   A   €€  ÿÿÿÿÿÿ     
+     
+` éª     è    Œ$0H`lx ¿èrmesh       $ F   F   €€  ÿÿÿÿÿÿ     	     	À ë_     è    Œ$0H`lx
+«èèrmesh       Ð  N   N   ˆƒ  ÿÿÿÿÿÿ     
+ÿÿÿÿÿÿp      
+      ªª           
 
 ÿÿÿÿÿÿ
-       _	  L   L   ƒ  ÿÿÿÿÿÿ     	ÿÿÿÿÿÿP     
-    ªª           
+       ü  N   N   ˆƒ  ÿÿÿÿÿÿ     	ÿÿÿÿÿÿÐ      
+     ªª           
 
 ÿÿÿÿÿÿ
-       Þ  E   E   Ð€  ÿÿÿÿÿÿ     	     	`‚%            ˆ  –       
-              ?   ?   Ð€<      	     
+       {  E   E   Ð€  ÿÿÿÿÿÿ     	     	à ‚%            ˆ  ¾       
+           �  ?   ?   Ð€<      	     
      
-À ƒ           ˆ           
-          ©        Ô€       
-       7  ?   ?   Ð€<           	     	pƒ         ˆ  –        
-          ë        Ô€              Ô  L   L   ‹<      
+€ ƒ           ˆ           
+          F        Ô€       
+       Ô  ?   ?   Ð€<           	     	ð ƒ         ˆ  –        
+                  Ô€              ¹  N   N   ˆƒ<      
      	     
-€          ªª           
+             ªª           
      
 
-       ä        Ô€       	       ;  `   `   ƒ<      	     
-     Ð      
-      ªª    E  0    @  
-
-À 	                                      Ô€       
-       ÷  `   `   ƒ<           	     �     
-     ªª    E  0    @  
+       É        Ô€       	          b   b   ˆƒ<      	     
+            
+       ªª    E  0    @  
+
+À 	                              ù        Ô€       
+       ä  b   b   ˆƒ<           	            
+      ªª    E  0    @  
 
-À 	                              ¬7  L   L   ƒ  ÿÿÿÿÿÿ     	ÿÿÿÿÿÿ          ªª           
+À 	                              ¥3  N   N   ˆƒ  ÿÿÿÿÿÿ     	ÿÿÿÿÿÿ           ªª           
 ÿÿÿÿÿÿ
-       ×7  L   L   ƒ<      	     
-     à      
-      ªª           
-
-     
-       H9  L   L   ƒ<           	     °     
-     ªª           
-
-     
-        :  L   L   ‹<      	     
-     à      
-      ªª           
-
-     
-       ‹<  L   L   ‹<      	     
-     à      
-      ªª           
+       Ð3  N   N   ˆƒ<      	     
+           
+       ªª           
 
      
-       2A  L   L   ‹<      	     
-     à      
-      ªª           
+       �4        Ô€       
+       ¶5  N   N   ˆƒ<           	           
+      ªª           
 
      
-       �C        Ô€              DD  `   `   ƒ<      
-     	     
-À          ªª    E  0    @  
-
- 	À                              TD        Ô€       	       K  L   L   ‹<      	     
-     à      
-      ªª           
-
-     
-       ×K        Ô€       
-       &L  L   L   ƒ  ÿÿÿÿÿÿ     
-ÿÿÿÿÿÿð          ªª           
+       &6  N   N   ˆƒ  ÿÿÿÿÿÿ     
+ÿÿÿÿÿÿ�           ªª           
 ÿÿÿÿÿÿ
-       ‰ë  A   A   €€  ÿÿÿÿÿÿ     
-     
- 	p     è    Œ$0H`lxŒèrmesh        ¡ `   `   ƒ<      	     
-          
-      ªª    E  0   @  
-
-À 	                              õ¡       Ô€       
-       ¸¢ `   `   ƒ<           	     Ð     
-     ªª    E  0   @  
-
-À 	                              ø®       Ô€              »¯ `   `   ƒ<      
+       É<        Ô€              �=  b   b   ˆƒ<      
      	     
-ð          ªª    E  0   @  
+            ªª    E  0    @  
 
- 	À                              Ë¯       Ô€       	       .‹ -   -   Ð€<      
-     	     	 rmeshu  4        >‹       Ô€       	       Œ‹ -   -   Ð€<      	     
-     
- rmeshu  7        Œ       Ô€       
-       ©Œ A   A   €€  ÿÿÿÿÿÿ     
-     
-0)'     è    Œ$0H`lxŒèrmesh       ¨� >   >   Ð€<      
-     	     	  Œ$0H`lrmeshq  9u        ¸�       Ô€       	       Ž -   -   Ð€<      	     
-     
-@rmeshu  4        —Ž       Ô€       
-       � -   -   Ð€<      
-     	     	 rmeshu  7        �       Ô€       	       Aô /   /   Ð€<           	     	0„       
-                E   E   Ð€  ÿÿÿÿÿÿ     
-     
-P‚%           
-   ˆ                      5        Ô€              «  -   -   Ð€<           	     	@rmeshu  7        Ü  A   A   €€  ÿÿÿÿÿÿ     	     	P+Î-     è    Œ$0H`lx«-èrmesh       þ  >   >   Ð€<      	     
-     
-`  Œ$0H`lrmeshq   9u        	  >   >   Ðˆ<      	     
-     
-`  Œ$0H`lrmeshq   9u        ø	  >   >   Ðˆ<      	     
-     
-`  Œ$0H`lrmeshq   9u        Ñ
-  >   >   Ðˆ<      	     
-     
-`  Œ$0H`lrmeshq   9u        ¼  >   >   Ðˆ<      	     
-     
-`  Œ$0H`lrmeshq   9u        §  >   >   Ðˆ<      	     
-     
-`  Œ$0H`lrmeshq   9u        ›  >   >   Ðˆ<      	     
-     
-`  Œ$0H`lrmeshq   9u        D        Ô€       
-       ã  <   <   Ð€<      
-     	     	`   Œ$0H`lq   9u         ó        Ô€       	       ¼  >   >   Ðˆ<      
-     	     	p  Œ$0H`lrmeshq   9u        Ì        Ô€       	         <   <   Ð€<      	     
+ 	À                               =        Ô€       	       ‰Ç  A   A   €€  ÿÿÿÿÿÿ     
      
-p   Œ$0H`lq  9u         ¿        Ô€       
-       …¨        Ô€              ©  <   <   Ð€<           	     	€   Œ$0H`lq  9u	         â«        Ô€              ‰ï  A   A   €€  ÿÿÿÿÿÿ     
-     
-€I¶.     è    Œ$0H`lxÎ-èrmesh       ‚ <   <   Ð€<      
-     	     	 „                              !‚       Ô€       	          E   E   Ð€  ÿÿÿÿÿÿ     
-     
-�‚%           
-   ˆ                      8! E   E   Ð€  ÿÿÿÿÿÿ     	     	°‚%         
-   ˆ  ¡                   "       Ô€              ‘" ?   ?   Ð€<      
-     	     	Àƒ      
-   ò  f                 ¡"       Ô€       	       ø" `   `   ƒ<      	     
-           
-      ªª    E  0   @  
-
-À 	                              Ã$ `   `   ‹<      	     
-           
-      ªª    E  0   @  
-
-À 	                              …& `   `   ‹<      	     
-           
-      ªª    E  0   @  
-
-À 	                              ( `   `   ƒ<           	     Ð     
-     ªª    E  0   @  
-
-À 	                              ú* `   `   ‹<      	     
-           
-      ªª    E  0   @  
-
-À 	                              -       Ô€              ’- ?   ?   Ð€<      
-     	     	àƒ      
-   ˆ                   ¢-       Ô€       	       ¬5 `   `   ‹<      	     
-           
-      ªª    E  0   @  
+  	L     è    Œ$0H`lx `èrmesh       } F   F   €€  ÿÿÿÿÿÿ     	     	&     è    Œ$0H`lx
+Lè±èrmesh        ¡ b   b   ˆƒ<      	     
+            
+       ªª    E  0   @  
+
+À 	                              ù¡       Ô€       
+       À¢ b   b   ˆƒ<           	            
+      ªª    E  0   @  
 
-À 	                              �6       Ô€       
-       T9       Ô€              < `   `   ‹<      
+À 	                              À«       Ô€              ‡¬ b   b   ˆƒ<      
      	     
-ð          ªª    E  0   @  
+             ªª    E  0   @  
 
- 	À                              <       Ô€       	       ü| A   A   €€  ÿÿÿÿÿÿ     	     	 KC5     è    Œ$0H`lx¶.èrmesh        ¡ `   `   ƒ<      	     
-     °     
-      ªª    E  0   @  
-
-À 	                              õ¡       Ô€       
-       ¸¢ `   `   ƒ<           	          
-     ªª    E  0   @  
-
-À 	                              H¬       Ô€              ­ `   `   ƒ<      
-     	     
-           ªª    E  0   @  
-
- 	À                              ­       Ô€       	       ©� A   A   €€  ÿÿÿÿÿÿ     
+ 	À                              —¬       Ô€       	       ©h A   A   €€  ÿÿÿÿÿÿ     
      
-ÀiW6     è    Œ$0H`lxC5èrmesh       �Ð       Ô€              Ñ /   /   Ð€<      
-     	     	0„                   'Ñ       Ô€       	       ÓÓ /   /   Ðˆ<      
-     	     	0„                   ãÓ       Ô€       	       üÔ /   /   Ðˆ<      
-     	     	0„                   Õ       Ô€       	        € E   E   Ð€  ÿÿÿÿÿÿ     
-     
-Ð‚%           
-   ˆ                      8� E   E   Ð€  ÿÿÿÿÿÿ     	     	@‚%         
-   ˆ  §                   $ F   F   €€  ÿÿÿÿÿÿ     	     	Pkä<     è    Œ$0H`lx
-W6èp5èrmesh       ‰ï  A   A   €€  ÿÿÿÿÿÿ     
-     
-à‰ø=     è    Œ$0H`lxä<èrmesh       } F   F   €€  ÿÿÿÿÿÿ     	     	`‹…D     è    Œ$0H`lx
-ø=è=èrmesh       ©� A   A   €€  ÿÿÿÿÿÿ     
-     
-ð©™E     è    Œ$0H`lx†Dèrmesh       À½	 E   E   Ð€  ÿÿÿÿÿÿ     
-     
- ‚%           
-   ˆ                      ø¾	 E   E   Ð€  ÿÿÿÿÿÿ     	     	p‚%         
-   ˆ  §                   mÄ	       Ô€              ûÄ	 ?   ?   Ð€<      
-     	     	€ƒ      
-   ˆ  Ä                 Å	       Ô€       	       bÅ	 `   `   ƒ<      	     
-          
-      ªª    E  0   @  
-
-À 	                              7Æ	       Ô€       
-       úÆ	 `   `   ƒ<           	     �     
-     ªª    E  0   @  
-
-À 	                              GÈ	 `   `   ‹<           	     �     
-     ªª    E  0   @  
-
-À 	                              ÉÈ	 `   `   ƒ<      	     
-           
-      ªª    E  0   @  
-
-À 	                              LÊ	 `   `   ‹<      	     
-           
-      ªª    E  0   @  
-
-À 	                              ïÌ	 `   `   ‹<      	     
-           
-      ªª    E  0   @  
-
-À 	                              ÄÍ	       Ô€       
-       ‡Î	 `   `   ƒ<           	           
-     ªª    E  0   @  
-
-À 	                              ‚Ü	       Ô€              ¤Þ	 `   `   ‹<      
+° )í&     è    Œ$0H`lx &èrmesh       <       Ô€              Æ <   <   Ð€<      
+     	     	 „                              Ö       Ô€       	       ” F   F   €€  ÿÿÿÿÿÿ     	     	0+¢-     è    Œ$0H`lx
+í&èR&èrmesh       
+ -   -   Ð€<           	     	@rmeshu  7            E   E   Ð€  ÿÿÿÿÿÿ     
+     
+À ‚%           
+   ˆ                      8  E   E   Ð€  ÿÿÿÿÿÿ     	     	P‚%         
+   ˆ  –                   ‰Ç  A   A   €€  ÿÿÿÿÿÿ     
+     
+Ð IŽ.     è    Œ$0H`lx £-èrmesh          E   E   Ð€  ÿÿÿÿÿÿ     
+     
+à ‚%           
+   ˆ                      8! E   E   Ð€  ÿÿÿÿÿÿ     	     	`‚%         
+   ˆ  –                   Ç}       Ô€              Q~ <   <   Ð€<           	     	€   Œ$0H`lq  9u         7 >   >   Ð€<           	     	�  Œ$0H`lrmeshq  9u        :€       Ô€              ©h A   A   €€  ÿÿÿÿÿÿ     
+     
+ð i/6     è    Œ$0H`lx £-èrmesh        € E   E   Ð€  ÿÿÿÿÿÿ     
+     
+ ‚%           
+   ˆ                      8� E   E   Ð€  ÿÿÿÿÿÿ     	     	 ‚%         
+   ˆ  –                   ‚       Ô€              ‘‚ ?   ?   Ð€<      
+     	     	°ƒ      
+   š  f                 ¡‚       Ô€       	       ø‚ b   b   ˆƒ<      	     
+     0      
+       ªª    E  0   @  
+
+À 	                              ô„ b   b   ˆ‹<      	     
+     0      
+       ªª    E  0   @  
+
+À 	                              Í…       Ô€       
+       ”† b   b   ˆƒ<           	     0      
+      ªª    E  0   @  
+
+À 	                              p‡ b   b   ˆƒ<      	     
+     @      
+       ªª    E  0   @  
+
+À 	                              ‰ b   b   ˆ‹<           	     0      
+      ªª    E  0   @  
+
+À 	                              É‰ b   b   ˆ‹<      	     
+     @      
+       ªª    E  0   @  
+
+À 	                              0‹       Ô€              ¾‹ ?   ?   Ð€<      
+     	     	Àƒ      
+   ˆ  ¤                 Î‹       Ô€       	       � b   b   ˆ‹<      	     
+     @      
+       ªª    E  0   @  
+
+À 	                              ß�       Ô€       
+       «� b   b   ˆ‹<           	     0      
+      ªª    E  0   @  
+
+À 	                              '’ b   b   ˆƒ<           	     @      
+      ªª    E  0   @  
+
+À 	                              œ“ b   b   ˆ‹<           	     @      
+      ªª    E  0   @  
+
+À 	                              !— b   b   ˆ‹<           	     @      
+      ªª    E  0   @  
+
+À 	                              T -   -   Ð€<      	     
+     
+rmeshu  4        å       Ô€       
+       [ -   -   Ð€<      
+     	     	Ðrmeshu  7        k       Ô€       	       ) F   F   €€  ÿÿÿÿÿÿ     	     	àkä<     è    Œ$0H`lx
+/6èh5èrmesh       f >   >   Ð€<      	     
+     
+   Œ$0H`lrmeshq   9u               Ô€       
+       … -   -   Ð€<      
+     	     	ðrmeshu  4        •       Ô€       	       õ -   -   Ð€<      	     
+     
+0rmeshu  7        †        Ô€       
+       Ø8  /   /   Ð€<           	     	 „       
+            ‰ë  <   <   €€  ÿÿÿÿÿÿ     
+     
+@‰ô=     è    Œ$0H`lx rmesh       Xí  >   >   Ðˆ<      
+     	     	  Œ$0H`lrmeshq  9u        hí        Ô€       	       ¶í  <   <   Ð€<      	     
+     
+P   Œ$0H`lq   9u         [î        Ô€       
+       ˜î  >   >   Ð€<      	     
+     
+`  Œ$0H`lrmeshq   9u        Aï        Ô€       
+       Ëï  <   <   Ð€<      
+     	     	    Œ$0H`lq  9u         Ûï        Ô€       	       U F   F   €€  ÿÿÿÿÿÿ     	     	0‹]D     è    Œ$0H`lx
+í<èô=èrmesh       ©Œ A   A   €€  ÿÿÿÿÿÿ     
+     
+p©•E     è    Œ$0H`lx^Dèrmesh       À½	 E   E   Ð€  ÿÿÿÿÿÿ     
+     
+€‚%           
+   ˆ                      Ã¾	 ?   ?   Ð€<      
+     	     	@ƒ        
+   j  ¤                 Ó¾	       Ô€       	       *¿	 b   b   ˆƒ<      	     
+     P      
+       ªª    E  0   @  
+
+À 	                              À	       Ô€       
+       ÊÀ	 b   b   ˆƒ<           	     P      
+      ªª    E  0   @  
+
+À 	                              ‹Á	 b   b   ˆƒ<      	     
+     `      
+       ªª    E  0   @  
+
+À 	                              ëÂ	 E   E   Ð€  ÿÿÿÿÿÿ     	     	P‚%         
+   ˆ  ›                   pÃ	 b   b   ˆ‹<      	     
+     `      
+       ªª    E  0   @  
+
+À 	                              IÄ	       Ô€       
+       Å	 b   b   ˆƒ<           	     `      
+      ªª    E  0   @  
+
+À 	                              "ç ?   ?   Ð€<           	     	`ƒ           ½  ›        
+          ìè E   E   Ð€  ÿÿÿÿÿÿ     	     	p‚%            ˆ  s       
+           é ?   ?   Ð€<      	     
+     
+�ƒ           ˆ           
+          ·é       Ô€       
+       Eê ?   ?   Ð€<           	     	€ƒ         ˆ  ™        
+          Èò       Ô€              �ó b   b   ˆƒ<      
      	     
-°          ªª    E  0   @  
+0            ªª    E  0   @  
 
- 	À                              ´Þ	       Ô€       	       ×ã	       Ô€              šä	 `   `   ƒ<      
+ 	À                              Ÿó       Ô€       	       v÷       Ô€              =ø b   b   ˆƒ<      
      	     
-À          ªª    E  0   @  
+@            ªª    E  0   @  
 
- 	À                              ªä	       Ô€       	       $ F   F   €€  ÿÿÿÿÿÿ     	     	Ð«&L     è    Œ$0H`lx
-šEè¦Dèrmesh           `   `   ƒ<      	     
-     0     
-      ªª    E  0   @  
+ 	À                              Mø       Ô€       	       $ö F   F   €€  ÿÿÿÿÿÿ     	     	�«þK     è    Œ$0H`lx
+ŽDè–Eèrmesh           b   b   ˆƒ<      	     
+     p      
+       ªª    E  0   @  
 
-À 	                              Õ         Ô€       
-       ˜  `   `   ƒ<           	     à     
-     ªª    E  0   @  
+À 	                              Ù         Ô€       
+          b   b   ˆƒ<           	     p      
+      ªª    E  0   @  
 
-À 	                              	  `   `   ‹<           	     à     
-     ªª    E  0   @  
+À 	                              o  b   b   ˆ‹<           	     p      
+      ªª    E  0   @  
 
-À 	                              ‰  `   `   ‹<           	     à     
-     ªª    E  0   @  
+À 	                              G  b   b   ˆ‹<           	     p      
+      ªª    E  0   @  
 
-À 	                              Æ  `   `   ‹<           	     à     
-     ªª    E  0   @  
+À 	                              å  b   b   ˆ‹<           	     p      
+      ªª    E  0   @  
 
-À 	                              é  `   `   ‹<           	     à     
-     ªª    E  0   @  
+À 	                              Ï  b   b   ˆ‹<           	     p      
+      ªª    E  0   @  
 
-À 	                              ‰ï  A   A   €€  ÿÿÿÿÿÿ     
-     
-@É:M     è    Œ$0H`lx'Lèrmesh       } F   F   €€  ÿÿÿÿÿÿ     	     	ðËÇS     è    Œ$0H`lx
-;MèGLèrmesh        ¡ `   `   ƒ<      	     
-     P     
-      ªª    E  0   @  
+À 	                              ¯%  b   b   ˆ‹<           	     p      
+      ªª    E  0   @  
 
-À 	                              õ¡       Ô€       
-       ¸¢ `   `   ƒ<           	           
-     ªª    E  0   @  
+À 	                              ‰ë  A   A   €€  ÿÿÿÿÿÿ     
+     
+ É6M     è    Œ$0H`lxÿKèrmesh       U F   F   €€  ÿÿÿÿÿÿ     	     	 ËŸS     è    Œ$0H`lx
+/Lè7Mèrmesh        ¡ b   b   ˆƒ<      	     
+     €      
+       ªª    E  0   @  
 
-À 	                              ž¤ `   `   ‹<           	           
-     ªª    E  0   @  
+À 	                              ù¡       Ô€       
+       ä£ b   b   ˆ‹<           	     €      
+      ªª    E  0   @  
 
-À 	                              ã§ `   `   ‹<           	           
-     ªª    E  0   @  
+À 	                              k¥ b   b   ˆ‹<           	     €      
+      ªª    E  0   @  
 
-À 	                              ö© `   `   ‹<           	           
-     ªª    E  0   @  
+À 	                              Ý© b   b   ˆ‹<           	     €      
+      ªª    E  0   @  
 
-À 	                              « `   `   ‹<           	           
-     ªª    E  0   @  
+À 	                              Ý³ b   b   ˆ‹<           	     €      
+      ªª    E  0   @  
 
-À 	                              °­ `   `   ‹<           	           
-     ªª    E  0   @  
+À 	                              ¹ b   b   ˆ‹<           	     €      
+      ªª    E  0   @  
 
-À 	                              v· `   `   ‹<           	           
-     ªª    E  0   @  
+À 	                              ¥º b   b   ˆ‹<           	     €      
+      ªª    E  0   @  
 
-À 	                              7¸ -   -   Ð€<           	     	rmeshu	  4        ¹ -   -   Ðˆ<           	     	rmeshu	  4        Ý¹ -   -   Ðˆ<           	     	rmeshu	  4        §º -   -   Ðˆ<           	     	rmeshu	  4        Œ» -   -   Ðˆ<           	     	rmeshu	  4        M¼ -   -   Ðˆ<           	     	rmeshu	  4        M½ -   -   Ðˆ<           	     	rmeshu	  4        œ~ <   <   Ðˆ<      
-     	     	 „                              ¬~       Ô€       	       ©� A   A   €€  ÿÿÿÿÿÿ     
+À 	                              f» -   -   Ð€<           	     	°rmeshu  4        0¼ -   -   Ðˆ<           	     	°rmeshu  4        ½ -   -   Ðˆ<           	     	°rmeshu  4        ¾ -   -   Ðˆ<           	     	°rmeshu  4        Í¾ -   -   Ðˆ<           	     	°rmeshu  4        Í¿ -   -   Ðˆ<           	     	°rmeshu  4        ÄÀ -   -   Ðˆ<           	     	°rmeshu  4        ¨f <   <   Ð€<      
+     	     	À„                              ¸f       Ô€       	       ©Œ A   A   €€  ÿÿÿÿÿÿ     
      
-`éÛT     è    Œ$0H`lxÈSèrmesh        A   A   €€  ÿÿÿÿÿÿ     	     	0ëh[     è    Œ$0H`lx;Mèrmesh           E   E   Ð€  ÿÿÿÿÿÿ     
+°é×T     è    Œ$0H`lx Sèrmesh       ö A   A   €€  ÿÿÿÿÿÿ     	     	Ðë@[     è    Œ$0H`lxØTèrmesh           E   E   Ð€  ÿÿÿÿÿÿ     
      
-p‚%           
-   ˆ                      8  E   E   Ð€  ÿÿÿÿÿÿ     	     	@‚%         
-   ˆ  Û                   î  -   -   Ð€<      
-     	     	Prmeshu  4        î        Ô€       	       lî  -   -   Ð€<      	     
+À‚%           
+   ˆ                      8  E   E   Ð€  ÿÿÿÿÿÿ     	     	à‚%         
+   ˆ  —                   ‰ë  A   A   €€  ÿÿÿÿÿÿ     
      
-€rmeshu  7        lï  -   -   Ðˆ<      	     
+Ð	y\     è    Œ$0H`lxA[èrmesh          E   E   Ð€  ÿÿÿÿÿÿ     
      
-€rmeshu  7        ýï        Ô€       
-       ð  A   A   €€  ÿÿÿÿÿÿ     
+à‚%           
+	   ˆ                      8! E   E   Ð€  ÿÿÿÿÿÿ     	     	ð‚%         
+	   ˆ  —                   üT A   A   €€  ÿÿÿÿÿÿ     	     	 âb     è    Œ$0H`lxy\èrmesh       ©Œ A   A   €€  ÿÿÿÿÿÿ     
      
-�	}\     è    Œ$0H`lxi[èrmesh       ñ  >   >   Ð€<      
-     	     	`  Œ$0H`lrmeshq   9u
-        %ñ        Ô€       	       …ñ  -   -   Ð€<      	     
+ð)d     è    Œ$0H`lxâbèrmesh        € E   E   Ð€  ÿÿÿÿÿÿ     
      
- rmeshu 
- 4        ò        Ô€       
-       Œò  -   -   Ð€<      
-     	     	prmeshu
-  7        œò        Ô€       	          E   E   Ð€  ÿÿÿÿÿÿ     
-     
-°‚%           
-   ˆ                      ôT <   <   €€  ÿÿÿÿÿÿ     	     	€âb     è    Œ$0H`lx rmesh       U >   >   Ð€<      	     
-     
-À  Œ$0H`lrmeshq   9u        ¿U       Ô€       
-       IV <   <   Ð€<      
-     	     	�  
- Œ$0H`lq   9u         YV       Ô€       	       W >   >   Ð€<      
-     	     	   Œ$0H`lrmeshq   9u        $W       Ô€       	       rW <   <   Ð€<      	     
-     
-Ð   Œ$0H`lq  9u         X       Ô€       
-       ©d A   A   €€  ÿÿÿÿÿÿ     
-     
-à)òc     è    Œ$0H`lxâbèrmesh        € E   E   Ð€  ÿÿÿÿÿÿ     
-     
-ð‚%           
-	   ˆ                      8� E   E   Ð€  ÿÿÿÿÿÿ     	     	°‚%         
-	   ˆ  «                   ö A   A   €€  ÿÿÿÿÿÿ     	     	À+ƒj     è    Œ$0H`lx
-òcèrmesh       ‰Ã  A   A   €€  ÿÿÿÿÿÿ     
-     
- I“k     è    Œ$0H`lxƒjèrmesh       üT A   A   €€  ÿÿÿÿÿÿ     	     	ÐK$r     è    Œ$0H`lx
-“kèrmesh       ©d A   A   €€  ÿÿÿÿÿÿ     
-     
-i4s     è    Œ$0H`lx$rèrmesh       À½	 E   E   Ð€  ÿÿÿÿÿÿ     
-     
- ‚%           
+ ‚%           
+
+   ˆ                      8� E   E   Ð€  ÿÿÿÿÿÿ     	     	‚%         
 
-   ˆ                      ö A   A   €€  ÿÿÿÿÿÿ     	     	ðkÅy     è    Œ$0H`lx
-4sèrmesh       ‰Ã  A   A   €€  ÿÿÿÿÿÿ     
+   ˆ  —                   ö A   A   €€  ÿÿÿÿÿÿ     	     	 +ƒj     è    Œ$0H`lxdèrmesh       ‰ë  A   A   €€  ÿÿÿÿÿÿ     
      
-0‰Õz     è    Œ$0H`lxÅyèrmesh       üT A   A   €€  ÿÿÿÿÿÿ     	     	 ‹f�     è    Œ$0H`lx
-Õzèrmesh       ©d A   A   €€  ÿÿÿÿÿÿ     
+I»k     è    Œ$0H`lxƒjèrmesh       üT A   A   €€  ÿÿÿÿÿÿ     	     	0K$r     è    Œ$0H`lx»kèrmesh       ©Œ A   A   €€  ÿÿÿÿÿÿ     
      
-@©v‚     è    Œ$0H`lxf�èrmesh       ö A   A   €€  ÿÿÿÿÿÿ     	     	«‰     è    Œ$0H`lx
-Õzèrmesh    	       E   E   Ð€  ÿÿÿÿÿÿ     
+ i\s     è    Œ$0H`lx$rèrmesh       À½	 E   E   Ð€  ÿÿÿÿÿÿ     
      
-P‚%   	        
-   ˆ                   	   8  E   E   Ð€  ÿÿÿÿÿÿ     	     	 ‚% 	        
-   ˆ  «                	   Â  -   -   Ð€<      
-     	     	0rmeshu  4     	   Â        Ô€       	    	   lÂ  -   -   Ð€<      	     
+0‚%           
+   ˆ                      ø¾	 E   E   Ð€  ÿÿÿÿÿÿ     	     	@‚%         
+   ˆ  —                   ö A   A   €€  ÿÿÿÿÿÿ     	     	PkÅy     è    Œ$0H`lx\sèrmesh       ‰ë  A   A   €€  ÿÿÿÿÿÿ     
      
-`rmeshu  7     	   ýÂ        Ô€       
-    	   ‰Ã  A   A   €€  ÿÿÿÿÿÿ     
+@‰ýz     è    Œ$0H`lxÅyèrmesh       üT A   A   €€  ÿÿÿÿÿÿ     	     	`‹f�     è    Œ$0H`lxýzèrmesh       ©Œ A   A   €€  ÿÿÿÿÿÿ     
      
-pÉŠ     è    Œ$0H`lx‰èrmesh    	   ˆÄ  >   >   Ð€<      
-     	     	@  Œ$0H`lrmeshq   9u     	   ˜Ä        Ô€       	    	   æÄ  -   -   Ð€<      	     
+P©ž‚     è    Œ$0H`lxf�èrmesh       ö A   A   €€  ÿÿÿÿÿÿ     	     	p«‰     è    Œ$0H`lxŸ‚èrmesh    	       E   E   Ð€  ÿÿÿÿÿÿ     
      
-€rmeshu  4     	   wÅ        Ô€       
-    	   Æ  -   -   Ð€<      
-     	     	Prmeshu  7     	   Æ        Ô€       	    	      E   E   Ð€  ÿÿÿÿÿÿ     
+`‚%   	        
+   ˆ                   	   8  E   E   Ð€  ÿÿÿÿÿÿ     	     	€‚% 	        
+   ˆ  —                	   ‰ë  A   A   €€  ÿÿÿÿÿÿ     
      
-�‚%   
+pÉ?Š     è    Œ$0H`lx‰èrmesh    	      E   E   Ð€  ÿÿÿÿÿÿ     
+     
+€‚%   
+        
+   ˆ                   	   8! E   E   Ð€  ÿÿÿÿÿÿ     	     	�‚% 
         
-   ˆ                   	   ôL <   <   €€  ÿÿÿÿÿÿ     	     	`Ë �     è    Œ$0H`lx rmesh    	   M >   >   Ð€<      	     
+   ˆ  —                	   üT A   A   €€  ÿÿÿÿÿÿ     	     	 Ë¨�     è    Œ$0H`lx@Šèrmesh    	   ©Œ A   A   €€  ÿÿÿÿÿÿ     
+     
+�éà‘     è    Œ$0H`lx©�èrmesh    	    € E   E   Ð€  ÿÿÿÿÿÿ     
      
-   Œ$0H`lrmeshq   9u     	   ¿M       Ô€       
-    	   O <   <   Ðˆ<      
-     	     	p   Œ$0H`lq   9u      	   $O       Ô€       	    	   úO >   >   Ð€<      
-     	     	€  Œ$0H`lrmeshq   9u     	   
-P       Ô€       	    	   XP <   <   Ð€<      	     
-     
-°   Œ$0H`lq  9u      	   ýP       Ô€       
-    	   ©œ A   A   €€  ÿÿÿÿÿÿ     
-     
-Àéð‘     è    Œ$0H`lx¡�èrmesh    	    € E   E   Ð€  ÿÿÿÿÿÿ     
-     
-Ð‚%           
-   ˆ                   	   8� E   E   Ð€  ÿÿÿÿÿÿ     	     	�‚%         
-   ˆ  ·                	   î A   A   €€  ÿÿÿÿÿÿ     	     	 ëA˜     è    Œ$0H`lxñ‘èrmesh    
\ No newline at end of file
+ ‚%           
+   ˆ                   	   8� E   E   Ð€  ÿÿÿÿÿÿ     	     	°‚%         
+   ˆ  —                	   ö A   A   €€  ÿÿÿÿÿÿ     	     	ÀëI˜     è    Œ$0H`lxá‘èrmesh    
\ No newline at end of file
diff -Naur ns-3.23/src/mesh/test/dot11s/hwmp-simplest-regression.cc ns-3.24/src/mesh/test/dot11s/hwmp-simplest-regression.cc
--- ns-3.23/src/mesh/test/dot11s/hwmp-simplest-regression.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/test/dot11s/hwmp-simplest-regression.cc	2015-09-15 11:18:44.000000000 -0700
@@ -30,7 +30,6 @@
 #include "ns3/internet-stack-helper.h"
 #include "ns3/ipv4-address-helper.h"
 #include "ns3/abort.h"
-#include "ns3/udp-echo-helper.h"
 #include "ns3/mobility-model.h"
 #include "ns3/pcap-test.h"
 #include <sstream>
@@ -44,7 +43,8 @@
 
 HwmpSimplestRegressionTest::HwmpSimplestRegressionTest () : TestCase ("Simplest HWMP regression test"),
                                                             m_nodes (0),
-                                                            m_time (Seconds (15))
+                                                            m_time (Seconds (15)),
+                                                            m_sentPktsCounter (0)
 {
 }
 
@@ -100,17 +100,18 @@
 void
 HwmpSimplestRegressionTest::InstallApplications ()
 {
-  UdpEchoServerHelper echoServer (9);
-  ApplicationContainer serverApps = echoServer.Install (m_nodes->Get (0));
-  serverApps.Start (Seconds (0.0));
-  serverApps.Stop (m_time);
-  UdpEchoClientHelper echoClient (m_interfaces.GetAddress (0), 9);
-  echoClient.SetAttribute ("MaxPackets", UintegerValue (300));
-  echoClient.SetAttribute ("Interval", TimeValue (Seconds (0.05)));
-  echoClient.SetAttribute ("PacketSize", UintegerValue (100));
-  ApplicationContainer clientApps = echoClient.Install (m_nodes->Get (1));
-  clientApps.Start (Seconds (2.0));
-  clientApps.Stop (m_time);
+  // client socket
+  m_clientSocket = Socket::CreateSocket (m_nodes->Get (1), TypeId::LookupByName ("ns3::UdpSocketFactory"));
+  m_clientSocket->Bind ();
+  m_clientSocket->Connect (InetSocketAddress (m_interfaces.GetAddress (0), 9));
+  m_clientSocket->SetRecvCallback (MakeCallback (&HwmpSimplestRegressionTest::HandleReadClient, this));
+  Simulator::ScheduleWithContext (m_clientSocket->GetNode ()->GetId (), Seconds (2.0),
+                                  &HwmpSimplestRegressionTest::SendData, this, m_clientSocket);
+
+  // server socket
+  m_serverSocket = Socket::CreateSocket (m_nodes->Get (0), TypeId::LookupByName ("ns3::UdpSocketFactory"));
+  m_serverSocket->Bind (InetSocketAddress (Ipv4Address::GetAny (), 9));
+  m_serverSocket->SetRecvCallback (MakeCallback (&HwmpSimplestRegressionTest::HandleReadServer, this));
 }
 void
 HwmpSimplestRegressionTest::CreateDevices ()
@@ -153,3 +154,38 @@
     }
 }
 
+void
+HwmpSimplestRegressionTest::SendData (Ptr<Socket> socket)
+{
+  if ((Simulator::Now () < m_time) && (m_sentPktsCounter < 300))
+    {
+      socket->Send (Create<Packet> (100));
+      m_sentPktsCounter ++;
+      Simulator::ScheduleWithContext (socket->GetNode ()->GetId (), Seconds (0.05),
+                                      &HwmpSimplestRegressionTest::SendData, this, socket);
+    }
+}
+
+void
+HwmpSimplestRegressionTest::HandleReadServer (Ptr<Socket> socket)
+{
+  Ptr<Packet> packet;
+  Address from;
+  while ((packet = socket->RecvFrom (from)))
+    {
+      packet->RemoveAllPacketTags ();
+      packet->RemoveAllByteTags ();
+
+      socket->SendTo (packet, 0, from);
+    }
+}
+
+void
+HwmpSimplestRegressionTest::HandleReadClient (Ptr<Socket> socket)
+{
+  Ptr<Packet> packet;
+  Address from;
+  while ((packet = socket->RecvFrom (from)))
+    {
+    }
+}
diff -Naur ns-3.23/src/mesh/test/dot11s/hwmp-simplest-regression.h ns-3.24/src/mesh/test/dot11s/hwmp-simplest-regression.h
--- ns-3.23/src/mesh/test/dot11s/hwmp-simplest-regression.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/test/dot11s/hwmp-simplest-regression.h	2015-09-15 11:18:44.000000000 -0700
@@ -85,5 +85,37 @@
   void CreateDevices ();
   void InstallApplications ();
   void ResetPosition ();
+
+  /// Server-side socket
+  Ptr<Socket> m_serverSocket;
+  /// Client-side socket
+  Ptr<Socket> m_clientSocket;
+
+  // sent packets counter
+  uint32_t m_sentPktsCounter;
+
+  /**
+   * Send data
+   * \param socket the sending socket
+   */
+  void SendData (Ptr<Socket> socket);
+
+  /**
+   * \brief Handle a packet reception.
+   *
+   * This function is called by lower layers.
+   *
+   * \param socket the socket the packet was received to.
+   */
+  void HandleReadServer (Ptr<Socket> socket);
+
+  /**
+   * \brief Handle a packet reception.
+   *
+   * This function is called by lower layers.
+   *
+   * \param socket the socket the packet was received to.
+   */
+  void HandleReadClient (Ptr<Socket> socket);
 };
 
diff -Naur ns-3.23/src/mesh/test/dot11s/hwmp-simplest-regression-test-0-1.pcap ns-3.24/src/mesh/test/dot11s/hwmp-simplest-regression-test-0-1.pcap
--- ns-3.23/src/mesh/test/dot11s/hwmp-simplest-regression-test-0-1.pcap	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/test/dot11s/hwmp-simplest-regression-test-0-1.pcap	2015-09-15 11:18:44.000000000 -0700
@@ -1,732 +1,702 @@
 ÔÃ²¡          ÿÿ  i       ûÈ  <   <   €€  ÿÿÿÿÿÿ            “È      è    Œ$0H`lx rmesh        É  >   >   Ð€<                    Œ$0H`lrmeshq   9u         ÅÉ        Ô€               OÊ  <   <   Ð€<                     Œ$0H`lq   9u          _Ê        Ô€               +Ë  >   >   Ð€<                    Œ$0H`lrmeshq   9u         ;Ë        Ô€               ‰Ë  <   <   Ð€<                     Œ$0H`lq  9u          -Ì        Ô€               JO A   A   €€  ÿÿÿÿÿÿ            JO     è    Œ$0H`lx È èrmesh        #j A   A   €€  ÿÿÿÿÿÿ          0 ³i     è    Œ$0H`lx Oèrmesh        jð A   A   €€  ÿÿÿÿÿÿ          0 jð     è    Œ$0H`lx jèrmesh       É  A   A   €€  ÿÿÿÿÿÿ          @ Ó
-     è    Œ$0H`lx ðèrmesh       JO A   A   €€  ÿÿÿÿÿÿ          @ Š‘     è    Œ$0H`lx èrmesh       #j A   A   €€  ÿÿÿÿÿÿ          P ó«     è    Œ$0H`lx ‘èrmesh       jð A   A   €€  ÿÿÿÿÿÿ          P ª2     è    Œ$0H`lx ¬èrmesh       ¨#  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ`           ªª           
+     è    Œ$0H`lx ðèrmesh       JO A   A   €€  ÿÿÿÿÿÿ          @ Š‘     è    Œ$0H`lx èrmesh       #j A   A   €€  ÿÿÿÿÿÿ          P ó«     è    Œ$0H`lx ‘èrmesh       jð A   A   €€  ÿÿÿÿÿÿ          P ª2     è    Œ$0H`lx ¬èrmesh       ¨#  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ`            ªª           
 ÿÿÿÿÿÿ
-       Ó#  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ`          ªª           
+       Ó#  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ`           ªª           
 ÿÿÿÿÿÿ
-       ¢$  E   E   Ð€  ÿÿÿÿÿÿ          p ‚%              ˆ                      ¤%  ?   ?   Ð€<                p ƒ           ˆ                     ´%        Ô€              &  L   L   ƒ<                €            ªª           
+       ¢$  E   E   Ð€  ÿÿÿÿÿÿ          p ‚%              ˆ                      ¤%  ?   ?   Ð€<                p ƒ           ˆ                     ´%        Ô€              &  N   N   ˆƒ<                              ªª           
      
-       Ç&        Ô€              (  °   °   ƒ<                €            ªª    E  €    @  
+       Ç&        Ô€              (  ²   ²   ˆƒ<                              ªª    E  €    @  
 
-À 	 l                                                                                                             !(        Ô€              9K  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ�           ªª           
+À 	 l                                                                                                             %(        Ô€              =K  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ€            ªª           
 ÿÿÿÿÿÿ
-       dL  L   L   ƒ<                �            ªª           
+       hL  N   N   ˆƒ<                             ªª           
      
-       tL        Ô€              ŠM  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ           ªª           
+       xL        Ô€              ŽM  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ€           ªª           
 ÿÿÿÿÿÿ
-       ýM  °   °   ƒ<                             ªª    E  €    @  
+       N  ²   ²   ˆƒ<                             ªª    E  €    @  
 
- 	À l                                                                                                             =O        Ô€              TÄ  °   °   ƒ<                °            ªª    E  €   @  
+ 	À l                                                                                                             EO        Ô€              XÄ  ²   ²   ˆƒ<                              ªª    E  €   @  
 
-À 	 l                                                                                                             dÄ        Ô€              »Ä  °   °   ƒ<                °            ªª    E  €   @  
+À 	 l                                                                                                             hÄ        Ô€              ¿Ä  ²   ²   ˆƒ<                              ªª    E  €   @  
 
- 	À l                                                                                                             ûÅ        Ô€              É  A   A   €€  ÿÿÿÿÿÿ          À M     è    Œ$0H`lx 3èrmesh       JO A   A   €€  ÿÿÿÿÿÿ          À ÊÓ     è    Œ$0H`lx Mèrmesh       ¤‡ °   °   ƒ<                Ð            ªª    E  €   @  
+ 	À l                                                                                                             Æ        Ô€              É  A   A   €€  ÿÿÿÿÿÿ          � M     è    Œ$0H`lx 3èrmesh       JO A   A   €€  ÿÿÿÿÿÿ          � ÊÓ     è    Œ$0H`lx Mèrmesh       ¨‡ ²   ²   ˆƒ<                0             ªª    E  €   @  
 
-À 	 l                                                                                                             ´‡       Ô€              ˆ °   °   ƒ<                Ð            ªª    E  €   @  
+À 	 l                                                                                                             ¸‡       Ô€              ˆ ²   ²   ˆƒ<                0             ªª    E  €   @  
 
- 	À l                                                                                                             K‰       Ô€              ôJ °   °   ƒ<                à            ªª    E  €   @  
+ 	À l                                                                                                             S‰       Ô€              øJ ²   ²   ˆƒ<                @             ªª    E  €   @  
 
-À 	 l                                                                                                             K       Ô€              [K °   °   ƒ<                à            ªª    E  €   @  
+À 	 l                                                                                                             K       Ô€              _K ²   ²   ˆƒ<                @             ªª    E  €   @  
 
- 	À l                                                                                                             ›L       Ô€              D °   °   ƒ<                ð            ªª    E  €   @  
+ 	À l                                                                                                             £L       Ô€              H ²   ²   ˆƒ<                P             ªª    E  €   @  
 
-À 	 l                                                                                                             T       Ô€              « °   °   ƒ<                ð            ªª    E  €   @  
+À 	 l                                                                                                             X       Ô€              ¯ ²   ²   ˆƒ<                P             ªª    E  €   @  
 
- 	À l                                                                                                             ë       Ô€              ”Ñ °   °   ƒ<                            ªª    E  €   @  
+ 	À l                                                                                                             ó       Ô€              ˜Ñ ²   ²   ˆƒ<                `             ªª    E  €   @  
 
-À 	 l                                                                                                             ¤Ñ       Ô€              ûÑ °   °   ƒ<                            ªª    E  €   @  
+À 	 l                                                                                                             ¨Ñ       Ô€              ÿÑ ²   ²   ˆƒ<                `             ªª    E  €   @  
 
- 	À l                                                                                                             ;Ó       Ô€              ”” °   °   ƒ<                           ªª    E  €   @  
+ 	À l                                                                                                             CÓ       Ô€              ˜” ²   ²   ˆƒ<                p             ªª    E  €   @  
 
-À 	 l                                                                                                             ¤”       Ô€              û” °   °   ƒ<                           ªª    E  €   @  
+À 	 l                                                                                                             ¨”       Ô€              ÿ” ²   ²   ˆƒ<                p             ªª    E  €   @  
 
- 	À l                                                                                                             ;–       Ô€              äW °   °   ƒ<                            ªª    E  €   @  
+ 	À l                                                                                                             C–       Ô€              èW ²   ²   ˆƒ<                €             ªª    E  €   @  
 
-À 	 l                                                                                                             ôW       Ô€              KX °   °   ƒ<                            ªª    E  €   @  
+À 	 l                                                                                                             øW       Ô€              OX ²   ²   ˆƒ<                €             ªª    E  €   @  
 
- 	À l                                                                                                             ;Y       Ô€              4 °   °   ƒ<                0           ªª    E  €   @  
+ 	À l                                                                                                             CY       Ô€              8 ²   ²   ˆƒ<                �             ªª    E  €   @  
 
-À 	 l                                                                                                             D       Ô€              › °   °   ƒ<                0           ªª    E  €   @  
+À 	 l                                                                                                             H       Ô€              Ÿ ²   ²   ˆƒ<                �             ªª    E  €   @  
 
- 	À l                                                                                                             ‹       Ô€              „Þ °   °   ƒ<                @           ªª    E  € 	  @  
+ 	À l                                                                                                             “       Ô€              ˆÞ ²   ²   ˆƒ<                              ªª    E  € 	  @  
 
-À 	 l                                                                                                             ”Þ       Ô€              ëÞ °   °   ƒ<                @           ªª    E  € 	  @  
+À 	 l                                                                                                             ˜Þ       Ô€              ïÞ ²   ²   ˆƒ<                              ªª    E  € 	  @  
 
- 	À l                                                                                                             Ûß       Ô€              Ô¡ °   °   ƒ<                P           ªª    E  € 
+ 	À l                                                                                                             ãß       Ô€              Ø¡ ²   ²   ˆƒ<                °             ªª    E  € 
   @  
 
-À 	 l                                                                                                             ä¡       Ô€              ;¢ °   °   ƒ<                P           ªª    E  € 
+À 	 l                                                                                                             è¡       Ô€              ?¢ ²   ²   ˆƒ<                °             ªª    E  € 
   @  
 
- 	À l                                                                                                             +£       Ô€              $e °   °   ƒ<                `           ªª    E  €   @  
+ 	À l                                                                                                             3£       Ô€              (e ²   ²   ˆƒ<                À             ªª    E  €   @  
 
-À 	 l                                                                                                             4e       Ô€              ‹e °   °   ƒ<                `           ªª    E  €   @  
+À 	 l                                                                                                             8e       Ô€              �e ²   ²   ˆƒ<                À             ªª    E  €   @  
 
- 	À l                                                                                                             {f       Ô€              #j A   A   €€  ÿÿÿÿÿÿ          p3î&     è    Œ$0H`lx Ôèrmesh       jð A   A   €€  ÿÿÿÿÿÿ          pêt'     è    Œ$0H`lx î&èrmesh       t(	 °   °   ƒ<                €           ªª    E  €   @  
+ 	À l                                                                                                             ƒf       Ô€              #j A   A   €€  ÿÿÿÿÿÿ            3î&     è    Œ$0H`lx Ôèrmesh       jð A   A   €€  ÿÿÿÿÿÿ            êt'     è    Œ$0H`lx î&èrmesh       x(	 ²   ²   ˆƒ<                Ð             ªª    E  €   @  
 
-À 	 l                                                                                                             „(	       Ô€              Û(	 °   °   ƒ<                €           ªª    E  €   @  
+À 	 l                                                                                                             ˆ(	       Ô€              ß(	 ²   ²   ˆƒ<                Ð             ªª    E  €   @  
 
- 	À l                                                                                                             Ë)	       Ô€              Äë	 °   °   ƒ<                �           ªª    E  €   @  
+ 	À l                                                                                                             Ó)	       Ô€              Èë	 ²   ²   ˆƒ<                à             ªª    E  €   @  
 
-À 	 l                                                                                                             Ôë	       Ô€              +ì	 °   °   ƒ<                �           ªª    E  €   @  
+À 	 l                                                                                                             Øë	       Ô€              /ì	 ²   ²   ˆƒ<                à             ªª    E  €   @  
 
- 	À l                                                                                                             í	       Ô€              ¯
- °   °   ƒ<                            ªª    E  €   @  
+ 	À l                                                                                                             #í	       Ô€              ¯
+ ²   ²   ˆƒ<                ð             ªª    E  €   @  
 
-À 	 l                                                                                                             $¯
-       Ô€              {¯
- °   °   ƒ<                            ªª    E  €   @  
+À 	 l                                                                                                             (¯
+       Ô€              ¯
+ ²   ²   ˆƒ<                ð             ªª    E  €   @  
 
- 	À l                                                                                                             k°
-       Ô€              dr °   °   ƒ<                °           ªª    E  €   @  
+ 	À l                                                                                                             s°
+       Ô€              hr ²   ²   ˆƒ<                             ªª    E  €   @  
 
-À 	 l                                                                                                             tr       Ô€              Ër °   °   ƒ<                °           ªª    E  €   @  
+À 	 l                                                                                                             xr       Ô€              Ïr ²   ²   ˆƒ<                             ªª    E  €   @  
 
- 	À l                                                                                                             »s       Ô€              Œ5 °   °   ƒ<                À           ªª    E  €   @  
+ 	À l                                                                                                             Ãs       Ô€              �5 ²   ²   ˆƒ<                            ªª    E  €   @  
 
-À 	 l                                                                                                             œ5       Ô€              ó5 °   °   ƒ<                À           ªª    E  €   @  
+À 	 l                                                                                                              5       Ô€              ÷5 ²   ²   ˆƒ<                            ªª    E  €   @  
 
- 	À l                                                                                                             ã6       Ô€              Üø °   °   ƒ<                Ð           ªª    E  €   @  
+ 	À l                                                                                                             ë6       Ô€              àø ²   ²   ˆƒ<                             ªª    E  €   @  
 
-À 	 l                                                                                                             ìø       Ô€              Cù °   °   ƒ<                Ð           ªª    E  €   @  
+À 	 l                                                                                                             ðø       Ô€              Gù ²   ²   ˆƒ<                             ªª    E  €   @  
 
- 	À l                                                                                                             ú       Ô€              ,¼ °   °   ƒ<                à           ªª    E  €   @  
+ 	À l                                                                                                             ú       Ô€              0¼ ²   ²   ˆƒ<                0            ªª    E  €   @  
 
-À 	 l                                                                                                             <¼       Ô€              “¼ °   °   ƒ<                à           ªª    E  €   @  
+À 	 l                                                                                                             @¼       Ô€              —¼ ²   ²   ˆƒ<                0            ªª    E  €   @  
 
- 	À l                                                                                                             [½       Ô€              | °   °   ƒ<                ð           ªª    E  €   @  
+ 	À l                                                                                                             c½       Ô€              € ²   ²   ˆƒ<                @            ªª    E  €   @  
 
-À 	 l                                                                                                             Œ       Ô€              ã °   °   ƒ<                ð           ªª    E  €   @  
+À 	 l                                                                                                             �       Ô€              ç ²   ²   ˆƒ<                @            ªª    E  €   @  
 
- 	À l                                                                                                             «€       Ô€              Œ   °   °   ƒ<                            ªª    E  €   @  
+ 	À l                                                                                                             ³€       Ô€              �   ²   ²   ˆƒ<                P            ªª    E  €   @  
 
-À 	 l                                                                                                             œ         Ô€              ó   °   °   ƒ<                            ªª    E  €   @  
+À 	 l                                                                                                                       Ô€              ÷   ²   ²   ˆƒ<                P            ªª    E  €   @  
 
- 	À l                                                                                                             »        Ô€              ÜÃ  °   °   ƒ<                           ªª    E  €   @  
+ 	À l                                                                                                             Ã        Ô€              àÃ  ²   ²   ˆƒ<                `            ªª    E  €   @  
 
-À 	 l                                                                                                             ìÃ        Ô€              CÄ  °   °   ƒ<                           ªª    E  €   @  
+À 	 l                                                                                                             ðÃ        Ô€              GÄ  ²   ²   ˆƒ<                `            ªª    E  €   @  
 
- 	À l                                                                                                             Å        Ô€              É  A   A   €€  ÿÿÿÿÿÿ           S�.     è    Œ$0H`lx u'èrmesh       JO A   A   €€  ÿÿÿÿÿÿ           
-/     è    Œ$0H`lx �.èrmesh       ,‡ °   °   ƒ<                0           ªª    E  €   @  
+ 	À l                                                                                                             Å        Ô€              É  A   A   €€  ÿÿÿÿÿÿ          ° S�.     è    Œ$0H`lx u'èrmesh       JO A   A   €€  ÿÿÿÿÿÿ          ° 
+/     è    Œ$0H`lx �.èrmesh       0‡ ²   ²   ˆƒ<                p            ªª    E  €   @  
 
-À 	 l                                                                                                             <‡       Ô€              “‡ °   °   ƒ<                0           ªª    E  €   @  
+À 	 l                                                                                                             @‡       Ô€              —‡ ²   ²   ˆƒ<                p            ªª    E  €   @  
 
- 	À l                                                                                                             [ˆ       Ô€              |J °   °   ƒ<                @           ªª    E  €   @  
+ 	À l                                                                                                             cˆ       Ô€              €J ²   ²   ˆƒ<                €            ªª    E  €   @  
 
-À 	 l                                                                                                             ŒJ       Ô€              ãJ °   °   ƒ<                @           ªª    E  €   @  
+À 	 l                                                                                                             �J       Ô€              çJ ²   ²   ˆƒ<                €            ªª    E  €   @  
 
- 	À l                                                                                                             «K       Ô€              Ì °   °   ƒ<                P           ªª    E  €   @  
+ 	À l                                                                                                             ³K       Ô€              Ð ²   ²   ˆƒ<                �            ªª    E  €   @  
 
-À 	 l                                                                                                             Ü       Ô€              3 °   °   ƒ<                P           ªª    E  €   @  
+À 	 l                                                                                                             à       Ô€              7 ²   ²   ˆƒ<                �            ªª    E  €   @  
 
- 	À l                                                                                                             û       Ô€              Ñ °   °   ƒ<                `           ªª    E  €   @  
+ 	À l                                                                                                                    Ô€               Ñ ²   ²   ˆƒ<                             ªª    E  €   @  
 
-À 	 l                                                                                                             ,Ñ       Ô€              ƒÑ °   °   ƒ<                `           ªª    E  €   @  
+À 	 l                                                                                                             0Ñ       Ô€              ‡Ñ ²   ²   ˆƒ<                             ªª    E  €   @  
 
- 	À l                                                                                                             KÒ       Ô€              D” °   °   ƒ<                p           ªª    E  €   @  
+ 	À l                                                                                                             SÒ       Ô€              H” ²   ²   ˆƒ<                °            ªª    E  €   @  
 
-À 	 l                                                                                                             T”       Ô€              «” °   °   ƒ<                p           ªª    E  €   @  
+À 	 l                                                                                                             X”       Ô€              ¯” ²   ²   ˆƒ<                °            ªª    E  €   @  
 
- 	À l                                                                                                             s•       Ô€              ”W °   °   ƒ<                €           ªª    E  €   @  
+ 	À l                                                                                                             {•       Ô€              ˜W ²   ²   ˆƒ<                À            ªª    E  €   @  
 
-À 	 l                                                                                                             ¤W       Ô€              ûW °   °   ƒ<                €           ªª    E  €   @  
+À 	 l                                                                                                             ¨W       Ô€              ÿW ²   ²   ˆƒ<                À            ªª    E  €   @  
 
- 	À l                                                                                                             ›X       Ô€              ä °   °   ƒ<                �           ªª    E  €   @  
+ 	À l                                                                                                             £X       Ô€              è ²   ²   ˆƒ<                Ð            ªª    E  €   @  
 
-À 	 l                                                                                                             ô       Ô€              K °   °   ƒ<                �           ªª    E  €   @  
+À 	 l                                                                                                             ø       Ô€              O ²   ²   ˆƒ<                Ð            ªª    E  €   @  
 
- 	À l                                                                                                             ë       Ô€              4Þ °   °   ƒ<                            ªª    E  €   @  
+ 	À l                                                                                                             ó       Ô€              8Þ ²   ²   ˆƒ<                à            ªª    E  €   @  
 
-À 	 l                                                                                                             DÞ       Ô€              ›Þ °   °   ƒ<                            ªª    E  €   @  
+À 	 l                                                                                                             HÞ       Ô€              ŸÞ ²   ²   ˆƒ<                à            ªª    E  €   @  
 
- 	À l                                                                                                             ;ß       Ô€              „¡ °   °   ƒ<                °           ªª    E  €   @  
+ 	À l                                                                                                             Cß       Ô€              ˆ¡ ²   ²   ˆƒ<                ð            ªª    E  €   @  
 
-À 	 l                                                                                                             ”¡       Ô€              ë¡ °   °   ƒ<                °           ªª    E  €   @  
+À 	 l                                                                                                             ˜¡       Ô€              ï¡ ²   ²   ˆƒ<                ð            ªª    E  €   @  
 
- 	À l                                                                                                             ‹¢       Ô€              Ôd °   °   ƒ<                À           ªª    E  €   @  
+ 	À l                                                                                                             “¢       Ô€              Ød ²   ²   ˆƒ<                             ªª    E  €   @  
 
-À 	 l                                                                                                             äd       Ô€              ;e °   °   ƒ<                À           ªª    E  €   @  
+À 	 l                                                                                                             èd       Ô€              ?e ²   ²   ˆƒ<                             ªª    E  €   @  
 
- 	À l                                                                                                             Ûe       Ô€              #j A   A   €€  ÿÿÿÿÿÿ          Ðs06     è    Œ$0H`lx /èrmesh       jð A   A   €€  ÿÿÿÿÿÿ          Ð*·6     è    Œ$0H`lx 06èrmesh       $(	 °   °   ƒ<                à           ªª    E  €    @  
+ 	À l                                                                                                             ãe       Ô€              #j A   A   €€  ÿÿÿÿÿÿ          À s06     è    Œ$0H`lx /èrmesh       jð A   A   €€  ÿÿÿÿÿÿ          À *·6     è    Œ$0H`lx 06èrmesh       ((	 ²   ²   ˆƒ<                            ªª    E  €    @  
 
-À 	 l                                                                                                             4(	       Ô€              ‹(	 °   °   ƒ<                à           ªª    E  €    @  
+À 	 l                                                                                                             8(	       Ô€              �(	 ²   ²   ˆƒ<                            ªª    E  €    @  
 
- 	À l                                                                                                             +)	       Ô€              të	 °   °   ƒ<                ð           ªª    E  € !  @  
+ 	À l                                                                                                             3)	       Ô€              xë	 ²   ²   ˆƒ<                             ªª    E  € !  @  
 
-À 	 l                                                                                                             „ë	       Ô€              Ûë	 °   °   ƒ<                ð           ªª    E  € !  @  
+À 	 l                                                                                                             ˆë	       Ô€              ßë	 ²   ²   ˆƒ<                             ªª    E  € !  @  
 
- 	À l                                                                                                             {ì	       Ô€              Ä®
- °   °   ƒ<                            ªª    E  € "  @  
+ 	À l                                                                                                             ƒì	       Ô€              È®
+ ²   ²   ˆƒ<                0            ªª    E  € "  @  
 
-À 	 l                                                                                                             Ô®
-       Ô€              +¯
- °   °   ƒ<                            ªª    E  € "  @  
+À 	 l                                                                                                             Ø®
+       Ô€              /¯
+ ²   ²   ˆƒ<                0            ªª    E  € "  @  
 
- 	À l                                                                                                             Ë¯
-       Ô€              r °   °   ƒ<                           ªª    E  € #  @  
+ 	À l                                                                                                             Ó¯
+       Ô€              r ²   ²   ˆƒ<                @            ªª    E  € #  @  
 
-À 	 l                                                                                                             $r       Ô€              {r °   °   ƒ<                           ªª    E  € #  @  
+À 	 l                                                                                                             (r       Ô€              r ²   ²   ˆƒ<                @            ªª    E  € #  @  
 
- 	À l                                                                                                             s       Ô€              P5 °   °   ƒ<                            ªª    E  € $  @  
+ 	À l                                                                                                             #s       Ô€              T5 ²   ²   ˆƒ<                P            ªª    E  € $  @  
 
-À 	 l                                                                                                             `5       Ô€              ·5 °   °   ƒ<                            ªª    E  € $  @  
+À 	 l                                                                                                             d5       Ô€              »5 ²   ²   ˆƒ<                P            ªª    E  € $  @  
 
- 	À l                                                                                                             W6       Ô€               ø °   °   ƒ<                0           ªª    E  € %  @  
+ 	À l                                                                                                             _6       Ô€              ¤ø ²   ²   ˆƒ<                `            ªª    E  € %  @  
 
-À 	 l                                                                                                             °ø       Ô€              ù °   °   ƒ<                0           ªª    E  € %  @  
+À 	 l                                                                                                             ´ø       Ô€              ù ²   ²   ˆƒ<                `            ªª    E  € %  @  
 
- 	À l                                                                                                             “ù       Ô€              ð» °   °   ƒ<                @           ªª    E  € &  @  
+ 	À l                                                                                                             ›ù       Ô€              ô» ²   ²   ˆƒ<                p            ªª    E  € &  @  
 
-À 	 l                                                                                                              ¼       Ô€              W¼ °   °   ƒ<                @           ªª    E  € &  @  
+À 	 l                                                                                                             ¼       Ô€              [¼ ²   ²   ˆƒ<                p            ªª    E  € &  @  
 
- 	À l                                                                                                             ã¼       Ô€              @ °   °   ƒ<                P           ªª    E  € '  @  
+ 	À l                                                                                                             ë¼       Ô€              D ²   ²   ˆƒ<                €            ªª    E  € '  @  
 
-À 	 l                                                                                                             P       Ô€              § °   °   ƒ<                P           ªª    E  € '  @  
+À 	 l                                                                                                             T       Ô€              « ²   ²   ˆƒ<                €            ªª    E  € '  @  
 
- 	À l                                                                                                             3€       Ô€              P   °   °   ƒ<                `           ªª    E  € (  @  
+ 	À l                                                                                                             ;€       Ô€              T   ²   ²   ˆƒ<                �            ªª    E  € (  @  
 
-À 	 l                                                                                                             `         Ô€              ·   °   °   ƒ<                `           ªª    E  € (  @  
+À 	 l                                                                                                             d         Ô€              »   ²   ²   ˆƒ<                �            ªª    E  € (  @  
 
- 	À l                                                                                                             C        Ô€               Ã  °   °   ƒ<                p           ªª    E  € )  @  
+ 	À l                                                                                                             K        Ô€              ¤Ã  ²   ²   ˆƒ<                             ªª    E  € )  @  
 
-À 	 l                                                                                                             °Ã        Ô€              Ä  °   °   ƒ<                p           ªª    E  € )  @  
+À 	 l                                                                                                             ´Ã        Ô€              Ä  ²   ²   ˆƒ<                             ªª    E  € )  @  
 
- 	À l                                                                                                             “Ä        Ô€              É  A   A   €€  ÿÿÿÿÿÿ          €“Ñ=     è    Œ$0H`lx ·6èrmesh       JO A   A   €€  ÿÿÿÿÿÿ          €JX>     è    Œ$0H`lx Ò=èrmesh       ð† °   °   ƒ<                �           ªª    E  € *  @  
+ 	À l                                                                                                             ›Ä        Ô€              É  A   A   €€  ÿÿÿÿÿÿ          Ð “Ñ=     è    Œ$0H`lx ·6èrmesh       JO A   A   €€  ÿÿÿÿÿÿ          Ð JX>     è    Œ$0H`lx Ò=èrmesh       ô† ²   ²   ˆƒ<                °            ªª    E  € *  @  
 
-À 	 l                                                                                                              ‡       Ô€              W‡ °   °   ƒ<                �           ªª    E  € *  @  
+À 	 l                                                                                                             ‡       Ô€              [‡ ²   ²   ˆƒ<                °            ªª    E  € *  @  
 
- 	À l                                                                                                             ã‡       Ô€              @J °   °   ƒ<                            ªª    E  € +  @  
+ 	À l                                                                                                             ë‡       Ô€              DJ ²   ²   ˆƒ<                À            ªª    E  € +  @  
 
-À 	 l                                                                                                             PJ       Ô€              §J °   °   ƒ<                            ªª    E  € +  @  
+À 	 l                                                                                                             TJ       Ô€              «J ²   ²   ˆƒ<                À            ªª    E  € +  @  
 
- 	À l                                                                                                             3K       Ô€              � °   °   ƒ<                °           ªª    E  € ,  @  
+ 	À l                                                                                                             ;K       Ô€              ” ²   ²   ˆƒ<                Ð            ªª    E  € ,  @  
 
-À 	 l                                                                                                                     Ô€              ÷ °   °   ƒ<                °           ªª    E  € ,  @  
+À 	 l                                                                                                             ¤       Ô€              û ²   ²   ˆƒ<                Ð            ªª    E  € ,  @  
 
- 	À l                                                                                                             ƒ       Ô€              àÐ °   °   ƒ<                À           ªª    E  € -  @  
+ 	À l                                                                                                             ‹       Ô€              äÐ ²   ²   ˆƒ<                à            ªª    E  € -  @  
 
-À 	 l                                                                                                             ðÐ       Ô€              GÑ °   °   ƒ<                À           ªª    E  € -  @  
+À 	 l                                                                                                             ôÐ       Ô€              KÑ ²   ²   ˆƒ<                à            ªª    E  € -  @  
 
- 	À l                                                                                                             ÓÑ       Ô€              ” °   °   ƒ<                Ð           ªª    E  € .  @  
+ 	À l                                                                                                             ÛÑ       Ô€               ” ²   ²   ˆƒ<                ð            ªª    E  € .  @  
 
-À 	 l                                                                                                             ,”       Ô€              ƒ” °   °   ƒ<                Ð           ªª    E  € .  @  
+À 	 l                                                                                                             0”       Ô€              ‡” ²   ²   ˆƒ<                ð            ªª    E  € .  @  
 
- 	À l                                                                                                             •       Ô€              lW °   °   ƒ<                à           ªª    E  € /  @  
+ 	À l                                                                                                             •       Ô€              pW ²   ²   ˆƒ<                             ªª    E  € /  @  
 
-À 	 l                                                                                                             |W       Ô€              ÓW °   °   ƒ<                à           ªª    E  € /  @  
+À 	 l                                                                                                             €W       Ô€              ×W ²   ²   ˆƒ<                             ªª    E  € /  @  
 
- 	À l                                                                                                             KX       Ô€              ¼ °   °   ƒ<                ð           ªª    E  € 0  @  
+ 	À l                                                                                                             SX       Ô€              À ²   ²   ˆƒ<                            ªª    E  € 0  @  
 
-À 	 l                                                                                                             Ì       Ô€              # °   °   ƒ<                ð           ªª    E  € 0  @  
+À 	 l                                                                                                             Ð       Ô€              ' ²   ²   ˆƒ<                            ªª    E  € 0  @  
 
- 	À l                                                                                                             ›       Ô€              Þ °   °   ƒ<                            ªª    E  € 1  @  
+ 	À l                                                                                                             £       Ô€              Þ ²   ²   ˆƒ<                             ªª    E  € 1  @  
 
-À 	 l                                                                                                             Þ       Ô€              sÞ °   °   ƒ<                            ªª    E  € 1  @  
+À 	 l                                                                                                              Þ       Ô€              wÞ ²   ²   ˆƒ<                             ªª    E  € 1  @  
 
- 	À l                                                                                                             ëÞ       Ô€              \¡ °   °   ƒ<                           ªª    E  € 2  @  
+ 	À l                                                                                                             óÞ       Ô€              `¡ ²   ²   ˆƒ<                0            ªª    E  € 2  @  
 
-À 	 l                                                                                                             l¡       Ô€              Ã¡ °   °   ƒ<                           ªª    E  € 2  @  
+À 	 l                                                                                                             p¡       Ô€              Ç¡ ²   ²   ˆƒ<                0            ªª    E  € 2  @  
 
- 	À l                                                                                                             ;¢       Ô€              ¬d °   °   ƒ<                            ªª    E  € 3  @  
+ 	À l                                                                                                             C¢       Ô€              °d ²   ²   ˆƒ<                @            ªª    E  € 3  @  
 
-À 	 l                                                                                                             ¼d       Ô€              e °   °   ƒ<                            ªª    E  € 3  @  
+À 	 l                                                                                                             Àd       Ô€              e ²   ²   ˆƒ<                @            ªª    E  € 3  @  
 
- 	À l                                                                                                             ‹e       Ô€              #j A   A   €€  ÿÿÿÿÿÿ          0³rE     è    Œ$0H`lx X>èrmesh       jð A   A   €€  ÿÿÿÿÿÿ          0jùE     è    Œ$0H`lx sEèrmesh       ü'	 °   °   ƒ<                @           ªª    E  € 4  @  
+ 	À l                                                                                                             “e       Ô€              #j A   A   €€  ÿÿÿÿÿÿ          à ³rE     è    Œ$0H`lx X>èrmesh       jð A   A   €€  ÿÿÿÿÿÿ          à jùE     è    Œ$0H`lx sEèrmesh        (	 ²   ²   ˆƒ<                P            ªª    E  € 4  @  
 
-À 	 l                                                                                                             (	       Ô€              c(	 °   °   ƒ<                @           ªª    E  € 4  @  
+À 	 l                                                                                                             (	       Ô€              g(	 ²   ²   ˆƒ<                P            ªª    E  € 4  @  
 
- 	À l                                                                                                             Û(	       Ô€              Lë	 °   °   ƒ<                P           ªª    E  € 5  @  
+ 	À l                                                                                                             ã(	       Ô€              Pë	 ²   ²   ˆƒ<                `            ªª    E  € 5  @  
 
-À 	 l                                                                                                             \ë	       Ô€              ³ë	 °   °   ƒ<                P           ªª    E  € 5  @  
+À 	 l                                                                                                             `ë	       Ô€              ·ë	 ²   ²   ˆƒ<                `            ªª    E  € 5  @  
 
- 	À l                                                                                                             +ì	       Ô€              œ®
- °   °   ƒ<                `           ªª    E  € 6  @  
+ 	À l                                                                                                             3ì	       Ô€               ®
+ ²   ²   ˆƒ<                p            ªª    E  € 6  @  
 
-À 	 l                                                                                                             ¬®
-       Ô€              ¯
- °   °   ƒ<                `           ªª    E  € 6  @  
+À 	 l                                                                                                             °®
+       Ô€              ¯
+ ²   ²   ˆƒ<                p            ªª    E  € 6  @  
 
- 	À l                                                                                                             {¯
-       Ô€              ìq °   °   ƒ<                p           ªª    E  € 7  @  
+ 	À l                                                                                                             ƒ¯
+       Ô€              ðq ²   ²   ˆƒ<                €            ªª    E  € 7  @  
 
-À 	 l                                                                                                             üq       Ô€              Sr °   °   ƒ<                p           ªª    E  € 7  @  
+À 	 l                                                                                                              r       Ô€              Wr ²   ²   ˆƒ<                €            ªª    E  € 7  @  
 
- 	À l                                                                                                             Ër       Ô€              45 °   °   ƒ<                €           ªª    E  € 8  @  
+ 	À l                                                                                                             Ór       Ô€              45 ²   ²   ˆƒ<                �            ªª    E  € 8  @  
 
-À 	 l                                                                                                             D5       Ô€              ›5 °   °   ƒ<                €           ªª    E  € 8  @  
+À 	 l                                                                                                             D5       Ô€              ›5 ²   ²   ˆƒ<                �            ªª    E  € 8  @  
 
- 	À l                                                                                                             6       Ô€              „ø °   °   ƒ<                �           ªª    E  € 9  @  
+ 	À l                                                                                                             6       Ô€              „ø ²   ²   ˆƒ<                             ªª    E  € 9  @  
 
-À 	 l                                                                                                             ”ø       Ô€              ëø °   °   ƒ<                �           ªª    E  € 9  @  
+À 	 l                                                                                                             ”ø       Ô€              ëø ²   ²   ˆƒ<                             ªª    E  € 9  @  
 
- 	À l                                                                                                             [ù       Ô€              Ô» °   °   ƒ<                            ªª    E  € :  @  
+ 	À l                                                                                                             [ù       Ô€              Ô» ²   ²   ˆƒ<                °            ªª    E  € :  @  
 
-À 	 l                                                                                                             ä»       Ô€              ;¼ °   °   ƒ<                            ªª    E  € :  @  
+À 	 l                                                                                                             ä»       Ô€              ;¼ ²   ²   ˆƒ<                °            ªª    E  € :  @  
 
- 	À l                                                                                                             «¼       Ô€              $ °   °   ƒ<                °           ªª    E  € ;  @  
+ 	À l                                                                                                             «¼       Ô€              $ ²   ²   ˆƒ<                À            ªª    E  € ;  @  
 
-À 	 l                                                                                                             4       Ô€              ‹ °   °   ƒ<                °           ªª    E  € ;  @  
+À 	 l                                                                                                             4       Ô€              ‹ ²   ²   ˆƒ<                À            ªª    E  € ;  @  
 
- 	À l                                                                                                             û       Ô€              4   °   °   ƒ<                À           ªª    E  € <  @  
+ 	À l                                                                                                             û       Ô€              4   ²   ²   ˆƒ<                Ð            ªª    E  € <  @  
 
-À 	 l                                                                                                             D         Ô€              ›   °   °   ƒ<                À           ªª    E  € <  @  
+À 	 l                                                                                                             D         Ô€              ›   ²   ²   ˆƒ<                Ð            ªª    E  € <  @  
 
- 	À l                                                                                                                     Ô€              „Ã  °   °   ƒ<                Ð           ªª    E  € =  @  
+ 	À l                                                                                                                     Ô€              „Ã  ²   ²   ˆƒ<                à            ªª    E  € =  @  
 
-À 	 l                                                                                                             ”Ã        Ô€              ëÃ  °   °   ƒ<                Ð           ªª    E  € =  @  
+À 	 l                                                                                                             ”Ã        Ô€              ëÃ  ²   ²   ˆƒ<                à            ªª    E  € =  @  
 
- 	À l                                                                                                             [Ä        Ô€              É  A   A   €€  ÿÿÿÿÿÿ          àÓM     è    Œ$0H`lx ùEèrmesh       JO A   A   €€  ÿÿÿÿÿÿ          àŠšM     è    Œ$0H`lx Mèrmesh       Ô† °   °   ƒ<                ð           ªª    E  € >  @  
+ 	À l                                                                                                             [Ä        Ô€              É  A   A   €€  ÿÿÿÿÿÿ          ð ÓM     è    Œ$0H`lx ùEèrmesh       JO A   A   €€  ÿÿÿÿÿÿ          ð ŠšM     è    Œ$0H`lx Mèrmesh       Ô† ²   ²   ˆƒ<                ð            ªª    E  € >  @  
 
-À 	 l                                                                                                             ä†       Ô€              ;‡ °   °   ƒ<                ð           ªª    E  € >  @  
+À 	 l                                                                                                             ä†       Ô€              ;‡ ²   ²   ˆƒ<                ð            ªª    E  € >  @  
 
- 	À l                                                                                                             «‡       Ô€              $J °   °   ƒ<                            ªª    E  € ?  @  
+ 	À l                                                                                                             «‡       Ô€              $J ²   ²   ˆƒ<                             ªª    E  € ?  @  
 
-À 	 l                                                                                                             4J       Ô€              ‹J °   °   ƒ<                            ªª    E  € ?  @  
+À 	 l                                                                                                             4J       Ô€              ‹J ²   ²   ˆƒ<                             ªª    E  € ?  @  
 
- 	À l                                                                                                             ûJ       Ô€              t °   °   ƒ<                           ªª    E  € @  @  
+ 	À l                                                                                                             ûJ       Ô€              t ²   ²   ˆƒ<                            ªª    E  € @  @  
 
-À 	 l                                                                                                             „       Ô€              Û °   °   ƒ<                           ªª    E  € @  @  
+À 	 l                                                                                                             „       Ô€              Û ²   ²   ˆƒ<                            ªª    E  € @  @  
 
- 	À l                                                                                                             K       Ô€              ÄÐ °   °   ƒ<                            ªª    E  € A  @  
+ 	À l                                                                                                             K       Ô€              ÄÐ ²   ²   ˆƒ<                             ªª    E  € A  @  
 
-À 	 l                                                                                                             ÔÐ       Ô€              +Ñ °   °   ƒ<                            ªª    E  € A  @  
+À 	 l                                                                                                             ÔÐ       Ô€              +Ñ ²   ²   ˆƒ<                             ªª    E  € A  @  
 
- 	À l                                                                                                             ›Ñ       Ô€              ” °   °   ƒ<                0           ªª    E  € B  @  
+ 	À l                                                                                                             ›Ñ       Ô€              ” ²   ²   ˆƒ<                0            ªª    E  € B  @  
 
-À 	 l                                                                                                              ”       Ô€              w” °   °   ƒ<                0           ªª    E  € B  @  
+À 	 l                                                                                                              ”       Ô€              w” ²   ²   ˆƒ<                0            ªª    E  € B  @  
 
- 	À l                                                                                                             ç”       Ô€              `W °   °   ƒ<                @           ªª    E  € C  @  
+ 	À l                                                                                                             ç”       Ô€              `W ²   ²   ˆƒ<                @            ªª    E  € C  @  
 
-À 	 l                                                                                                             pW       Ô€              ÇW °   °   ƒ<                @           ªª    E  € C  @  
+À 	 l                                                                                                             pW       Ô€              ÇW ²   ²   ˆƒ<                @            ªª    E  € C  @  
 
- 	À l                                                                                                             3X       Ô€              ° °   °   ƒ<                P           ªª    E  € D  @  
+ 	À l                                                                                                             3X       Ô€              ° ²   ²   ˆƒ<                P            ªª    E  € D  @  
 
-À 	 l                                                                                                             À       Ô€               °   °   ƒ<                P           ªª    E  € D  @  
+À 	 l                                                                                                             À       Ô€               ²   ²   ˆƒ<                P            ªª    E  € D  @  
 
- 	À l                                                                                                             ƒ       Ô€               Þ °   °   ƒ<                `           ªª    E  € E  @  
+ 	À l                                                                                                             ƒ       Ô€               Þ ²   ²   ˆƒ<                `            ªª    E  € E  @  
 
-À 	 l                                                                                                             Þ       Ô€              gÞ °   °   ƒ<                `           ªª    E  € E  @  
+À 	 l                                                                                                             Þ       Ô€              gÞ ²   ²   ˆƒ<                `            ªª    E  € E  @  
 
- 	À l                                                                                                             ÓÞ       Ô€              P¡ °   °   ƒ<                p           ªª    E  € F  @  
+ 	À l                                                                                                             ÓÞ       Ô€              P¡ ²   ²   ˆƒ<                p            ªª    E  € F  @  
 
-À 	 l                                                                                                             `¡       Ô€              ·¡ °   °   ƒ<                p           ªª    E  € F  @  
+À 	 l                                                                                                             `¡       Ô€              ·¡ ²   ²   ˆƒ<                p            ªª    E  € F  @  
 
- 	À l                                                                                                             #¢       Ô€               d °   °   ƒ<                €           ªª    E  € G  @  
+ 	À l                                                                                                             #¢       Ô€               d ²   ²   ˆƒ<                €            ªª    E  € G  @  
 
-À 	 l                                                                                                             °d       Ô€              e °   °   ƒ<                €           ªª    E  € G  @  
+À 	 l                                                                                                             °d       Ô€              e ²   ²   ˆƒ<                €            ªª    E  € G  @  
 
- 	À l                                                                                                             se       Ô€              #j A   A   €€  ÿÿÿÿÿÿ          �ó´T     è    Œ$0H`lx šMèrmesh       jð A   A   €€  ÿÿÿÿÿÿ          �ª;U     è    Œ$0H`lx µTèrmesh       ð'	 °   °   ƒ<                            ªª    E  € H  @  
+ 	À l                                                                                                             se       Ô€              #j A   A   €€  ÿÿÿÿÿÿ           ó´T     è    Œ$0H`lx šMèrmesh       jð A   A   €€  ÿÿÿÿÿÿ           ª;U     è    Œ$0H`lx µTèrmesh       ð'	 ²   ²   ˆƒ<                �            ªª    E  € H  @  
 
-À 	 l                                                                                                              (	       Ô€              W(	 °   °   ƒ<                            ªª    E  € H  @  
+À 	 l                                                                                                              (	       Ô€              W(	 ²   ²   ˆƒ<                �            ªª    E  € H  @  
 
- 	À l                                                                                                             Ã(	       Ô€              @ë	 °   °   ƒ<                °           ªª    E  € I  @  
+ 	À l                                                                                                             Ã(	       Ô€              @ë	 ²   ²   ˆƒ<                             ªª    E  € I  @  
 
-À 	 l                                                                                                             Pë	       Ô€              §ë	 °   °   ƒ<                °           ªª    E  € I  @  
+À 	 l                                                                                                             Pë	       Ô€              §ë	 ²   ²   ˆƒ<                             ªª    E  € I  @  
 
  	À l                                                                                                             ì	       Ô€              �®
- °   °   ƒ<                À           ªª    E  € J  @  
+ ²   ²   ˆƒ<                °            ªª    E  € J  @  
 
 À 	 l                                                                                                              ®
        Ô€              ÷®
- °   °   ƒ<                À           ªª    E  € J  @  
+ ²   ²   ˆƒ<                °            ªª    E  € J  @  
 
  	À l                                                                                                             c¯
-       Ô€              àq °   °   ƒ<                Ð           ªª    E  € K  @  
+       Ô€              àq ²   ²   ˆƒ<                À            ªª    E  € K  @  
 
-À 	 l                                                                                                             ðq       Ô€              Gr °   °   ƒ<                Ð           ªª    E  € K  @  
+À 	 l                                                                                                             ðq       Ô€              Gr ²   ²   ˆƒ<                À            ªª    E  € K  @  
 
- 	À l                                                                                                             ³r       Ô€              05 °   °   ƒ<                à           ªª    E  € L  @  
+ 	À l                                                                                                             ³r       Ô€              05 ²   ²   ˆƒ<                Ð            ªª    E  € L  @  
 
-À 	 l                                                                                                             @5       Ô€              —5 °   °   ƒ<                à           ªª    E  € L  @  
+À 	 l                                                                                                             @5       Ô€              —5 ²   ²   ˆƒ<                Ð            ªª    E  € L  @  
 
- 	À l                                                                                                             6       Ô€              €ø °   °   ƒ<                ð           ªª    E  € M  @  
+ 	À l                                                                                                             6       Ô€              €ø ²   ²   ˆƒ<                à            ªª    E  € M  @  
 
-À 	 l                                                                                                             �ø       Ô€              çø °   °   ƒ<                ð           ªª    E  € M  @  
+À 	 l                                                                                                             �ø       Ô€              çø ²   ²   ˆƒ<                à            ªª    E  € M  @  
 
- 	À l                                                                                                             Sù       Ô€              Ð» °   °   ƒ<                            ªª    E  € N  @  
+ 	À l                                                                                                             Sù       Ô€              Ð» ²   ²   ˆƒ<                ð            ªª    E  € N  @  
 
-À 	 l                                                                                                             à»       Ô€              7¼ °   °   ƒ<                            ªª    E  € N  @  
+À 	 l                                                                                                             à»       Ô€              7¼ ²   ²   ˆƒ<                ð            ªª    E  € N  @  
 
- 	À l                                                                                                             £¼       Ô€                °   °   ƒ<                           ªª    E  € O  @  
+ 	À l                                                                                                             £¼       Ô€                ²   ²   ˆƒ<                             ªª    E  € O  @  
 
-À 	 l                                                                                                             0       Ô€              ‡ °   °   ƒ<                           ªª    E  € O  @  
+À 	 l                                                                                                             0       Ô€              ‡ ²   ²   ˆƒ<                             ªª    E  € O  @  
 
- 	À l                                                                                                             ó       Ô€              0   °   °   ƒ<                            ªª    E  € P  @  
+ 	À l                                                                                                             ó       Ô€              0   ²   ²   ˆƒ<                            ªª    E  € P  @  
 
-À 	 l                                                                                                             @         Ô€              —   °   °   ƒ<                            ªª    E  € P  @  
+À 	 l                                                                                                             @         Ô€              —   ²   ²   ˆƒ<                            ªª    E  € P  @  
 
- 	À l                                                                                                                     Ô€              €Ã  °   °   ƒ<                0           ªª    E  € Q  @  
+ 	À l                                                                                                                     Ô€              €Ã  ²   ²   ˆƒ<                             ªª    E  € Q  @  
 
-À 	 l                                                                                                             �Ã        Ô€              çÃ  °   °   ƒ<                0           ªª    E  € Q  @  
+À 	 l                                                                                                             �Ã        Ô€              çÃ  ²   ²   ˆƒ<                             ªª    E  € Q  @  
 
- 	À l                                                                                                             SÄ        Ô€              É  A   A   €€  ÿÿÿÿÿÿ          @V\     è    Œ$0H`lx <Uèrmesh       JO A   A   €€  ÿÿÿÿÿÿ          @ÊÜ\     è    Œ$0H`lx V\èrmesh       Ð† °   °   ƒ<                P           ªª    E  € R  @  
+ 	À l                                                                                                             SÄ        Ô€              É  A   A   €€  ÿÿÿÿÿÿ          V\     è    Œ$0H`lx <Uèrmesh       JO A   A   €€  ÿÿÿÿÿÿ          ÊÜ\     è    Œ$0H`lx V\èrmesh       Ð† ²   ²   ˆƒ<                0            ªª    E  € R  @  
 
-À 	 l                                                                                                             à†       Ô€              7‡ °   °   ƒ<                P           ªª    E  € R  @  
+À 	 l                                                                                                             à†       Ô€              7‡ ²   ²   ˆƒ<                0            ªª    E  € R  @  
 
- 	À l                                                                                                             £‡       Ô€               J °   °   ƒ<                `           ªª    E  € S  @  
+ 	À l                                                                                                             £‡       Ô€               J ²   ²   ˆƒ<                @            ªª    E  € S  @  
 
-À 	 l                                                                                                             0J       Ô€              ‡J °   °   ƒ<                `           ªª    E  € S  @  
+À 	 l                                                                                                             0J       Ô€              ‡J ²   ²   ˆƒ<                @            ªª    E  € S  @  
 
- 	À l                                                                                                             óJ       Ô€              p °   °   ƒ<                p           ªª    E  € T  @  
+ 	À l                                                                                                             óJ       Ô€              p ²   ²   ˆƒ<                P            ªª    E  € T  @  
 
-À 	 l                                                                                                             €       Ô€              × °   °   ƒ<                p           ªª    E  € T  @  
+À 	 l                                                                                                             €       Ô€              × ²   ²   ˆƒ<                P            ªª    E  € T  @  
 
- 	À l                                                                                                             C       Ô€              ÀÐ °   °   ƒ<                €           ªª    E  € U  @  
+ 	À l                                                                                                             C       Ô€              ÀÐ ²   ²   ˆƒ<                `            ªª    E  € U  @  
 
-À 	 l                                                                                                             ÐÐ       Ô€              'Ñ °   °   ƒ<                €           ªª    E  € U  @  
+À 	 l                                                                                                             ÐÐ       Ô€              'Ñ ²   ²   ˆƒ<                `            ªª    E  € U  @  
 
- 	À l                                                                                                             “Ñ       Ô€              ” °   °   ƒ<                �           ªª    E  € V  @  
+ 	À l                                                                                                             “Ñ       Ô€              ” ²   ²   ˆƒ<                p            ªª    E  € V  @  
 
-À 	 l                                                                                                              ”       Ô€              w” °   °   ƒ<                �           ªª    E  € V  @  
+À 	 l                                                                                                              ”       Ô€              w” ²   ²   ˆƒ<                p            ªª    E  € V  @  
 
- 	À l                                                                                                             ã”       Ô€              `W °   °   ƒ<                            ªª    E  € W  @  
+ 	À l                                                                                                             ã”       Ô€              `W ²   ²   ˆƒ<                €            ªª    E  € W  @  
 
-À 	 l                                                                                                             pW       Ô€              ÇW °   °   ƒ<                            ªª    E  € W  @  
+À 	 l                                                                                                             pW       Ô€              ÇW ²   ²   ˆƒ<                €            ªª    E  € W  @  
 
- 	À l                                                                                                             3X       Ô€              ° °   °   ƒ<                °           ªª    E  € X  @  
+ 	À l                                                                                                             3X       Ô€              ° ²   ²   ˆƒ<                �            ªª    E  € X  @  
 
-À 	 l                                                                                                             À       Ô€               °   °   ƒ<                °           ªª    E  € X  @  
+À 	 l                                                                                                             À       Ô€               ²   ²   ˆƒ<                �            ªª    E  € X  @  
 
- 	À l                                                                                                             ƒ       Ô€               Þ °   °   ƒ<                À           ªª    E  € Y  @  
+ 	À l                                                                                                             ƒ       Ô€               Þ ²   ²   ˆƒ<                             ªª    E  € Y  @  
 
-À 	 l                                                                                                             Þ       Ô€              gÞ °   °   ƒ<                À           ªª    E  € Y  @  
+À 	 l                                                                                                             Þ       Ô€              gÞ ²   ²   ˆƒ<                             ªª    E  € Y  @  
 
- 	À l                                                                                                             ÓÞ       Ô€              P¡ °   °   ƒ<                Ð           ªª    E  € Z  @  
+ 	À l                                                                                                             ÓÞ       Ô€              P¡ ²   ²   ˆƒ<                °            ªª    E  € Z  @  
 
-À 	 l                                                                                                             `¡       Ô€              ·¡ °   °   ƒ<                Ð           ªª    E  € Z  @  
+À 	 l                                                                                                             `¡       Ô€              ·¡ ²   ²   ˆƒ<                °            ªª    E  € Z  @  
 
- 	À l                                                                                                             #¢       Ô€               d °   °   ƒ<                à           ªª    E  € [  @  
+ 	À l                                                                                                             #¢       Ô€               d ²   ²   ˆƒ<                À            ªª    E  € [  @  
 
-À 	 l                                                                                                             °d       Ô€              e °   °   ƒ<                à           ªª    E  € [  @  
+À 	 l                                                                                                             °d       Ô€              e ²   ²   ˆƒ<                À            ªª    E  € [  @  
 
- 	À l                                                                                                             se       Ô€              #j A   A   €€  ÿÿÿÿÿÿ          ð3÷c     è    Œ$0H`lx Ý\èrmesh       jð A   A   €€  ÿÿÿÿÿÿ          ðê}d     è    Œ$0H`lx ÷cèrmesh       ð'	 °   °   ƒ<                            ªª    E  € \  @  
+ 	À l                                                                                                             se       Ô€              #j A   A   €€  ÿÿÿÿÿÿ           3÷c     è    Œ$0H`lx Ý\èrmesh       jð A   A   €€  ÿÿÿÿÿÿ           ê}d     è    Œ$0H`lx ÷cèrmesh       ð'	 ²   ²   ˆƒ<                Ð            ªª    E  € \  @  
 
-À 	 l                                                                                                              (	       Ô€              W(	 °   °   ƒ<                            ªª    E  € \  @  
+À 	 l                                                                                                              (	       Ô€              W(	 ²   ²   ˆƒ<                Ð            ªª    E  € \  @  
 
- 	À l                                                                                                             Ã(	       Ô€              @ë	 °   °   ƒ<                           ªª    E  € ]  @  
+ 	À l                                                                                                             Ã(	       Ô€              @ë	 ²   ²   ˆƒ<                à            ªª    E  € ]  @  
 
-À 	 l                                                                                                             Pë	       Ô€              §ë	 °   °   ƒ<                           ªª    E  € ]  @  
+À 	 l                                                                                                             Pë	       Ô€              §ë	 ²   ²   ˆƒ<                à            ªª    E  € ]  @  
 
  	À l                                                                                                             ì	       Ô€              �®
- °   °   ƒ<                            ªª    E  € ^  @  
+ ²   ²   ˆƒ<                ð            ªª    E  € ^  @  
 
 À 	 l                                                                                                              ®
        Ô€              ÷®
- °   °   ƒ<                            ªª    E  € ^  @  
+ ²   ²   ˆƒ<                ð            ªª    E  € ^  @  
 
  	À l                                                                                                             c¯
-       Ô€              àq °   °   ƒ<                0           ªª    E  € _  @  
+       Ô€              àq ²   ²   ˆƒ<                             ªª    E  € _  @  
 
-À 	 l                                                                                                             ðq       Ô€              Gr °   °   ƒ<                0           ªª    E  € _  @  
+À 	 l                                                                                                             ðq       Ô€              Gr ²   ²   ˆƒ<                             ªª    E  € _  @  
 
- 	À l                                                                                                             ³r       Ô€              05 °   °   ƒ<                @           ªª    E  € `  @  
+ 	À l                                                                                                             ³r       Ô€              05 ²   ²   ˆƒ<                            ªª    E  € `  @  
 
-À 	 l                                                                                                             @5       Ô€              —5 °   °   ƒ<                @           ªª    E  € `  @  
+À 	 l                                                                                                             @5       Ô€              —5 ²   ²   ˆƒ<                            ªª    E  € `  @  
 
- 	À l                                                                                                             6       Ô€              €ø °   °   ƒ<                P           ªª    E  € a  @  
+ 	À l                                                                                                             6       Ô€              €ø ²   ²   ˆƒ<                             ªª    E  € a  @  
 
-À 	 l                                                                                                             �ø       Ô€              çø °   °   ƒ<                P           ªª    E  € a  @  
+À 	 l                                                                                                             �ø       Ô€              çø ²   ²   ˆƒ<                             ªª    E  € a  @  
 
- 	À l                                                                                                             Sù       Ô€              Ð» °   °   ƒ<                `           ªª    E  € b  @  
+ 	À l                                                                                                             Sù       Ô€              Ð» ²   ²   ˆƒ<                0            ªª    E  € b  @  
 
-À 	 l                                                                                                             à»       Ô€              7¼ °   °   ƒ<                `           ªª    E  € b  @  
+À 	 l                                                                                                             à»       Ô€              7¼ ²   ²   ˆƒ<                0            ªª    E  € b  @  
 
- 	À l                                                                                                             £¼       Ô€                °   °   ƒ<                p           ªª    E  € c  @  
+ 	À l                                                                                                             £¼       Ô€                ²   ²   ˆƒ<                @            ªª    E  € c  @  
 
-À 	 l                                                                                                             0       Ô€              ‡ °   °   ƒ<                p           ªª    E  € c  @  
+À 	 l                                                                                                             0       Ô€              ‡ ²   ²   ˆƒ<                @            ªª    E  € c  @  
 
- 	À l                                                                                                             ó       Ô€              0   °   °   ƒ<                €           ªª    E  € d  @  
+ 	À l                                                                                                             ó       Ô€              0   ²   ²   ˆƒ<                P            ªª    E  € d  @  
 
-À 	 l                                                                                                             @         Ô€              —   °   °   ƒ<                €           ªª    E  € d  @  
+À 	 l                                                                                                             @         Ô€              —   ²   ²   ˆƒ<                P            ªª    E  € d  @  
 
- 	À l                                                                                                                     Ô€              €Ã  °   °   ƒ<                �           ªª    E  € e  @  
+ 	À l                                                                                                                     Ô€              €Ã  ²   ²   ˆƒ<                `            ªª    E  € e  @  
 
-À 	 l                                                                                                             �Ã        Ô€              çÃ  °   °   ƒ<                �           ªª    E  € e  @  
+À 	 l                                                                                                             �Ã        Ô€              çÃ  ²   ²   ˆƒ<                `            ªª    E  € e  @  
 
- 	À l                                                                                                             SÄ        Ô€              É  A   A   €€  ÿÿÿÿÿÿ           S˜k     è    Œ$0H`lx ~dèrmesh       JO A   A   €€  ÿÿÿÿÿÿ           
-l     è    Œ$0H`lx ˜kèrmesh       Ð† °   °   ƒ<                °           ªª    E  € f  @  
+ 	À l                                                                                                             SÄ        Ô€              É  A   A   €€  ÿÿÿÿÿÿ          0S˜k     è    Œ$0H`lx ~dèrmesh       JO A   A   €€  ÿÿÿÿÿÿ          0
+l     è    Œ$0H`lx ˜kèrmesh       Ð† ²   ²   ˆƒ<                p            ªª    E  € f  @  
 
-À 	 l                                                                                                             à†       Ô€              7‡ °   °   ƒ<                °           ªª    E  € f  @  
+À 	 l                                                                                                             à†       Ô€              7‡ ²   ²   ˆƒ<                p            ªª    E  € f  @  
 
- 	À l                                                                                                             £‡       Ô€              dJ E   E   Ð€  ÿÿÿÿÿÿ          À‚%              ˆ                     †J ?   ?   Ð€<                Àƒ           ˆ                     âJ       Ô€              =K °   °   ƒ<                Ð           ªª    E  € g  @  
+ 	À l                                                                                                             £‡       Ô€              dJ E   E   Ð€  ÿÿÿÿÿÿ          @‚%              ˆ                     †J ?   ?   Ð€<                @ƒ           ˆ                     âJ       Ô€              =K ²   ²   ˆƒ<                €            ªª    E  € g  @  
 
-À 	 l                                                                                                             MK       Ô€              ¤K °   °   ƒ<                Ð           ªª    E  € g  @  
+À 	 l                                                                                                             MK       Ô€              ¤K ²   ²   ˆƒ<                €            ªª    E  € g  @  
 
- 	À l                                                                                                             L       Ô€              p °   °   ƒ<                à           ªª    E  € h  @  
+ 	À l                                                                                                             L       Ô€              p ²   ²   ˆƒ<                �            ªª    E  € h  @  
 
-À 	 l                                                                                                             €       Ô€              × °   °   ƒ<                à           ªª    E  € h  @  
+À 	 l                                                                                                             €       Ô€              × ²   ²   ˆƒ<                �            ªª    E  € h  @  
 
- 	À l                                                                                                             C       Ô€              ÀÐ °   °   ƒ<                ð           ªª    E  € i  @  
+ 	À l                                                                                                             C       Ô€              ÀÐ ²   ²   ˆƒ<                             ªª    E  € i  @  
 
-À 	 l                                                                                                             ÐÐ       Ô€              'Ñ °   °   ƒ<                ð           ªª    E  € i  @  
+À 	 l                                                                                                             ÐÐ       Ô€              'Ñ ²   ²   ˆƒ<                             ªª    E  € i  @  
 
- 	À l                                                                                                             “Ñ       Ô€              ” °   °   ƒ<                            ªª    E  € j  @  
+ 	À l                                                                                                             “Ñ       Ô€              ” ²   ²   ˆƒ<                °            ªª    E  € j  @  
 
-À 	 l                                                                                                              ”       Ô€              w” °   °   ƒ<                            ªª    E  € j  @  
+À 	 l                                                                                                              ”       Ô€              w” ²   ²   ˆƒ<                °            ªª    E  € j  @  
 
- 	À l                                                                                                             ã”       Ô€              `W °   °   ƒ<                           ªª    E  € k  @  
+ 	À l                                                                                                             ã”       Ô€              `W ²   ²   ˆƒ<                À            ªª    E  € k  @  
 
-À 	 l                                                                                                             pW       Ô€              ÇW °   °   ƒ<                           ªª    E  € k  @  
+À 	 l                                                                                                             pW       Ô€              ÇW ²   ²   ˆƒ<                À            ªª    E  € k  @  
 
- 	À l                                                                                                             3X       Ô€              ° °   °   ƒ<                            ªª    E  € l  @  
+ 	À l                                                                                                             3X       Ô€              ° ²   ²   ˆƒ<                Ð            ªª    E  € l  @  
 
-À 	 l                                                                                                             À       Ô€               °   °   ƒ<                            ªª    E  € l  @  
+À 	 l                                                                                                             À       Ô€               ²   ²   ˆƒ<                Ð            ªª    E  € l  @  
 
- 	À l                                                                                                             ƒ       Ô€               Þ °   °   ƒ<                0           ªª    E  € m  @  
+ 	À l                                                                                                             ƒ       Ô€               Þ ²   ²   ˆƒ<                à            ªª    E  € m  @  
 
-À 	 l                                                                                                             Þ       Ô€              gÞ °   °   ƒ<                0           ªª    E  € m  @  
+À 	 l                                                                                                             Þ       Ô€              gÞ ²   ²   ˆƒ<                à            ªª    E  € m  @  
 
- 	À l                                                                                                             ÓÞ       Ô€              P¡ °   °   ƒ<                @           ªª    E  € n  @  
+ 	À l                                                                                                             ÓÞ       Ô€              P¡ ²   ²   ˆƒ<                ð            ªª    E  € n  @  
 
-À 	 l                                                                                                             `¡       Ô€              ·¡ °   °   ƒ<                @           ªª    E  € n  @  
+À 	 l                                                                                                             `¡       Ô€              ·¡ ²   ²   ˆƒ<                ð            ªª    E  € n  @  
 
- 	À l                                                                                                             #¢       Ô€               d °   °   ƒ<                P           ªª    E  € o  @  
+ 	À l                                                                                                             #¢       Ô€               d ²   ²   ˆƒ<                             ªª    E  € o  @  
 
-À 	 l                                                                                                             °d       Ô€              e °   °   ƒ<                P           ªª    E  € o  @  
+À 	 l                                                                                                             °d       Ô€              e ²   ²   ˆƒ<                             ªª    E  € o  @  
 
- 	À l                                                                                                             se       Ô€              #j A   A   €€  ÿÿÿÿÿÿ          `s9s     è    Œ$0H`lx lèrmesh       jð A   A   €€  ÿÿÿÿÿÿ          `*Às     è    Œ$0H`lx 9sèrmesh       ð'	 °   °   ƒ<                p           ªª    E  € p  @  
+ 	À l                                                                                                             se       Ô€              #j A   A   €€  ÿÿÿÿÿÿ          Ps9s     è    Œ$0H`lx lèrmesh       jð A   A   €€  ÿÿÿÿÿÿ          P*Às     è    Œ$0H`lx 9sèrmesh       ð'	 ²   ²   ˆƒ<                            ªª    E  € p  @  
 
-À 	 l                                                                                                              (	       Ô€              W(	 °   °   ƒ<                p           ªª    E  € p  @  
+À 	 l                                                                                                              (	       Ô€              W(	 ²   ²   ˆƒ<                            ªª    E  € p  @  
 
- 	À l                                                                                                             Ã(	       Ô€              @ë	 °   °   ƒ<                €           ªª    E  € q  @  
+ 	À l                                                                                                             Ã(	       Ô€              @ë	 ²   ²   ˆƒ<                             ªª    E  € q  @  
 
-À 	 l                                                                                                             Pë	       Ô€              §ë	 °   °   ƒ<                €           ªª    E  € q  @  
+À 	 l                                                                                                             Pë	       Ô€              §ë	 ²   ²   ˆƒ<                             ªª    E  € q  @  
 
  	À l                                                                                                             ì	       Ô€              �®
- °   °   ƒ<                �           ªª    E  € r  @  
+ ²   ²   ˆƒ<                0            ªª    E  € r  @  
 
 À 	 l                                                                                                              ®
        Ô€              ÷®
- °   °   ƒ<                �           ªª    E  € r  @  
+ ²   ²   ˆƒ<                0            ªª    E  € r  @  
 
  	À l                                                                                                             c¯
-       Ô€              àq °   °   ƒ<                            ªª    E  € s  @  
+       Ô€              àq ²   ²   ˆƒ<                @            ªª    E  € s  @  
 
-À 	 l                                                                                                             ðq       Ô€              Gr °   °   ƒ<                            ªª    E  € s  @  
+À 	 l                                                                                                             ðq       Ô€              Gr ²   ²   ˆƒ<                @            ªª    E  € s  @  
 
- 	À l                                                                                                             ³r       Ô€              05 °   °   ƒ<                °           ªª    E  € t  @  
+ 	À l                                                                                                             ³r       Ô€              05 ²   ²   ˆƒ<                P            ªª    E  € t  @  
 
-À 	 l                                                                                                             @5       Ô€              —5 °   °   ƒ<                °           ªª    E  € t  @  
+À 	 l                                                                                                             @5       Ô€              —5 ²   ²   ˆƒ<                P            ªª    E  € t  @  
 
- 	À l                                                                                                             6       Ô€              €ø °   °   ƒ<                À           ªª    E  € u  @  
+ 	À l                                                                                                             6       Ô€              €ø ²   ²   ˆƒ<                `            ªª    E  € u  @  
 
-À 	 l                                                                                                             �ø       Ô€              çø °   °   ƒ<                À           ªª    E  € u  @  
+À 	 l                                                                                                             �ø       Ô€              çø ²   ²   ˆƒ<                `            ªª    E  € u  @  
 
- 	À l                                                                                                             Sù       Ô€              Ð» °   °   ƒ<                Ð           ªª    E  € v  @  
+ 	À l                                                                                                             Sù       Ô€              Ð» ²   ²   ˆƒ<                p            ªª    E  € v  @  
 
-À 	 l                                                                                                             à»       Ô€              7¼ °   °   ƒ<                Ð           ªª    E  € v  @  
+À 	 l                                                                                                             à»       Ô€              7¼ ²   ²   ˆƒ<                p            ªª    E  € v  @  
 
- 	À l                                                                                                             £¼       Ô€                °   °   ƒ<                à           ªª    E  € w  @  
+ 	À l                                                                                                             £¼       Ô€                ²   ²   ˆƒ<                €            ªª    E  € w  @  
 
-À 	 l                                                                                                             0       Ô€              ‡ °   °   ƒ<                à           ªª    E  € w  @  
+À 	 l                                                                                                             0       Ô€              ‡ ²   ²   ˆƒ<                €            ªª    E  € w  @  
 
- 	À l                                                                                                             ó       Ô€              0   °   °   ƒ<                ð           ªª    E  € x  @  
+ 	À l                                                                                                             ó       Ô€              0   ²   ²   ˆƒ<                �            ªª    E  € x  @  
 
-À 	 l                                                                                                             @         Ô€              —   °   °   ƒ<                ð           ªª    E  € x  @  
+À 	 l                                                                                                             @         Ô€              —   ²   ²   ˆƒ<                �            ªª    E  € x  @  
 
- 	À l                                                                                                                     Ô€              €Ã  °   °   ƒ<                 	           ªª    E  € y  @  
+ 	À l                                                                                                                     Ô€              €Ã  ²   ²   ˆƒ<                             ªª    E  € y  @  
 
-À 	 l                                                                                                             �Ã        Ô€              çÃ  °   °   ƒ<                 	           ªª    E  € y  @  
+À 	 l                                                                                                             �Ã        Ô€              çÃ  ²   ²   ˆƒ<                             ªª    E  € y  @  
 
- 	À l                                                                                                             SÄ        Ô€              É  A   A   €€  ÿÿÿÿÿÿ          	“Úz     è    Œ$0H`lx Àsèrmesh       JO A   A   €€  ÿÿÿÿÿÿ          	Ja{     è    Œ$0H`lx Ûzèrmesh       Ð† °   °   ƒ<                 	           ªª    E  € z  @  
+ 	À l                                                                                                             SÄ        Ô€              É  A   A   €€  ÿÿÿÿÿÿ          `“Úz     è    Œ$0H`lx Àsèrmesh       JO A   A   €€  ÿÿÿÿÿÿ          `Ja{     è    Œ$0H`lx Ûzèrmesh       Ð† ²   ²   ˆƒ<                °            ªª    E  € z  @  
 
-À 	 l                                                                                                             à†       Ô€              7‡ °   °   ƒ<                 	           ªª    E  € z  @  
+À 	 l                                                                                                             à†       Ô€              7‡ ²   ²   ˆƒ<                °            ªª    E  € z  @  
 
- 	À l                                                                                                             £‡       Ô€               J °   °   ƒ<                0	           ªª    E  € {  @  
+ 	À l                                                                                                             £‡       Ô€               J ²   ²   ˆƒ<                À            ªª    E  € {  @  
 
-À 	 l                                                                                                             0J       Ô€              ‡J °   °   ƒ<                0	           ªª    E  € {  @  
+À 	 l                                                                                                             0J       Ô€              ‡J ²   ²   ˆƒ<                À            ªª    E  € {  @  
 
- 	À l                                                                                                             óJ       Ô€              p °   °   ƒ<                @	           ªª    E  € |  @  
+ 	À l                                                                                                             óJ       Ô€              p ²   ²   ˆƒ<                Ð            ªª    E  € |  @  
 
-À 	 l                                                                                                             €       Ô€              × °   °   ƒ<                @	           ªª    E  € |  @  
+À 	 l                                                                                                             €       Ô€              × ²   ²   ˆƒ<                Ð            ªª    E  € |  @  
 
- 	À l                                                                                                             C       Ô€              ÀÐ °   °   ƒ<                P	           ªª    E  € }  @  
+ 	À l                                                                                                             C       Ô€              ÀÐ ²   ²   ˆƒ<                à            ªª    E  € }  @  
 
-À 	 l                                                                                                             ÐÐ       Ô€              'Ñ °   °   ƒ<                P	           ªª    E  € }  @  
+À 	 l                                                                                                             ÐÐ       Ô€              'Ñ ²   ²   ˆƒ<                à            ªª    E  € }  @  
 
- 	À l                                                                                                             “Ñ       Ô€              ” °   °   ƒ<                `	           ªª    E  € ~  @  
+ 	À l                                                                                                             “Ñ       Ô€              ” ²   ²   ˆƒ<                ð            ªª    E  € ~  @  
 
-À 	 l                                                                                                              ”       Ô€              w” °   °   ƒ<                `	           ªª    E  € ~  @  
+À 	 l                                                                                                              ”       Ô€              w” ²   ²   ˆƒ<                ð            ªª    E  € ~  @  
 
- 	À l                                                                                                             ã”       Ô€              `W °   °   ƒ<                p	           ªª    E  €   @  
+ 	À l                                                                                                             ã”       Ô€              `W ²   ²   ˆƒ<                             ªª    E  €   @  
 
-À 	 l                                                                                                             pW       Ô€              ÇW °   °   ƒ<                p	           ªª    E  €   @  
+À 	 l                                                                                                             pW       Ô€              ÇW ²   ²   ˆƒ<                             ªª    E  €   @  
 
- 	À l                                                                                                             3X       Ô€              ° °   °   ƒ<                €	           ªª    E  € €  @  
+ 	À l                                                                                                             3X       Ô€              ° ²   ²   ˆƒ<                            ªª    E  € €  @  
 
-À 	 l                                                                                                             À       Ô€               °   °   ƒ<                €	           ªª    E  € €  @  
+À 	 l                                                                                                             À       Ô€               ²   ²   ˆƒ<                            ªª    E  € €  @  
 
- 	À l                                                                                                             ƒ       Ô€               Þ °   °   ƒ<                �	           ªª    E  € �  @  
+ 	À l                                                                                                             ƒ       Ô€               Þ ²   ²   ˆƒ<                             ªª    E  € �  @  
 
-À 	 l                                                                                                             Þ       Ô€              gÞ °   °   ƒ<                �	           ªª    E  € �  @  
+À 	 l                                                                                                             Þ       Ô€              gÞ ²   ²   ˆƒ<                             ªª    E  € �  @  
 
- 	À l                                                                                                             ÓÞ       Ô€              P¡ °   °   ƒ<                 	           ªª    E  € ‚  @  
+ 	À l                                                                                                             ÓÞ       Ô€              P¡ ²   ²   ˆƒ<                0            ªª    E  € ‚  @  
 
-À 	 l                                                                                                             `¡       Ô€              ·¡ °   °   ƒ<                 	           ªª    E  € ‚  @  
+À 	 l                                                                                                             `¡       Ô€              ·¡ ²   ²   ˆƒ<                0            ªª    E  € ‚  @  
 
- 	À l                                                                                                             #¢       Ô€               d °   °   ƒ<                °	           ªª    E  € ƒ  @  
+ 	À l                                                                                                             #¢       Ô€               d ²   ²   ˆƒ<                @            ªª    E  € ƒ  @  
 
-À 	 l                                                                                                             °d       Ô€              e °   °   ƒ<                °	           ªª    E  € ƒ  @  
+À 	 l                                                                                                             °d       Ô€              e ²   ²   ˆƒ<                @            ªª    E  € ƒ  @  
 
- 	À l                                                                                                             se       Ô€              #j A   A   €€  ÿÿÿÿÿÿ          À	³{‚     è    Œ$0H`lx a{èrmesh       jð A   A   €€  ÿÿÿÿÿÿ          À	jƒ     è    Œ$0H`lx |‚èrmesh       ð'	 °   °   ƒ<                Ð	           ªª    E  € „  @  
+ 	À l                                                                                                             se       Ô€              #j A   A   €€  ÿÿÿÿÿÿ          p³{‚     è    Œ$0H`lx a{èrmesh       jð A   A   €€  ÿÿÿÿÿÿ          pjƒ     è    Œ$0H`lx |‚èrmesh       ð'	 ²   ²   ˆƒ<                P            ªª    E  € „  @  
 
-À 	 l                                                                                                              (	       Ô€              W(	 °   °   ƒ<                Ð	           ªª    E  € „  @  
+À 	 l                                                                                                              (	       Ô€              W(	 ²   ²   ˆƒ<                P            ªª    E  € „  @  
 
- 	À l                                                                                                             Ã(	       Ô€              @ë	 °   °   ƒ<                à	           ªª    E  € …  @  
+ 	À l                                                                                                             Ã(	       Ô€              @ë	 ²   ²   ˆƒ<                `            ªª    E  € …  @  
 
-À 	 l                                                                                                             Pë	       Ô€              §ë	 °   °   ƒ<                à	           ªª    E  € …  @  
+À 	 l                                                                                                             Pë	       Ô€              §ë	 ²   ²   ˆƒ<                `            ªª    E  € …  @  
 
  	À l                                                                                                             ì	       Ô€              �®
- °   °   ƒ<                ð	           ªª    E  € †  @  
+ ²   ²   ˆƒ<                p            ªª    E  € †  @  
 
 À 	 l                                                                                                              ®
        Ô€              ÷®
- °   °   ƒ<                ð	           ªª    E  € †  @  
+ ²   ²   ˆƒ<                p            ªª    E  € †  @  
 
  	À l                                                                                                             c¯
-       Ô€              àq °   °   ƒ<                 
-           ªª    E  € ‡  @  
+       Ô€              àq ²   ²   ˆƒ<                €            ªª    E  € ‡  @  
 
-À 	 l                                                                                                             ðq       Ô€              Gr °   °   ƒ<                 
-           ªª    E  € ‡  @  
+À 	 l                                                                                                             ðq       Ô€              Gr ²   ²   ˆƒ<                €            ªª    E  € ‡  @  
 
- 	À l                                                                                                             ³r       Ô€              05 °   °   ƒ<                
-           ªª    E  € ˆ  @  
+ 	À l                                                                                                             ³r       Ô€              05 ²   ²   ˆƒ<                �            ªª    E  € ˆ  @  
 
-À 	 l                                                                                                             @5       Ô€              —5 °   °   ƒ<                
-           ªª    E  € ˆ  @  
+À 	 l                                                                                                             @5       Ô€              —5 ²   ²   ˆƒ<                �            ªª    E  € ˆ  @  
 
- 	À l                                                                                                             6       Ô€              €ø °   °   ƒ<                 
-           ªª    E  € ‰  @  
+ 	À l                                                                                                             6       Ô€              €ø ²   ²   ˆƒ<                             ªª    E  € ‰  @  
 
-À 	 l                                                                                                             �ø       Ô€              çø °   °   ƒ<                 
-           ªª    E  € ‰  @  
+À 	 l                                                                                                             �ø       Ô€              çø ²   ²   ˆƒ<                             ªª    E  € ‰  @  
 
- 	À l                                                                                                             Sù       Ô€              Ð» °   °   ƒ<                0
-           ªª    E  € Š  @  
+ 	À l                                                                                                             Sù       Ô€              Ð» ²   ²   ˆƒ<                °            ªª    E  € Š  @  
 
-À 	 l                                                                                                             à»       Ô€              7¼ °   °   ƒ<                0
-           ªª    E  € Š  @  
+À 	 l                                                                                                             à»       Ô€              7¼ ²   ²   ˆƒ<                °            ªª    E  € Š  @  
 
- 	À l                                                                                                             £¼       Ô€                °   °   ƒ<                @
-           ªª    E  € ‹  @  
+ 	À l                                                                                                             £¼       Ô€                ²   ²   ˆƒ<                À            ªª    E  € ‹  @  
 
-À 	 l                                                                                                             0       Ô€              ‡ °   °   ƒ<                @
-           ªª    E  € ‹  @  
+À 	 l                                                                                                             0       Ô€              ‡ ²   ²   ˆƒ<                À            ªª    E  € ‹  @  
 
- 	À l                                                                                                             ó       Ô€           	   0   °   °   ƒ<                P
-           ªª    E  € Œ  @  
+ 	À l                                                                                                             ó       Ô€           	   0   ²   ²   ˆƒ<                Ð            ªª    E  € Œ  @  
 
-À 	 l                                                                                                          	   @         Ô€           	   —   °   °   ƒ<                P
-           ªª    E  € Œ  @  
+À 	 l                                                                                                          	   @         Ô€           	   —   ²   ²   ˆƒ<                Ð            ªª    E  € Œ  @  
 
- 	À l                                                                                                          	           Ô€           	   €Ã  °   °   ƒ<                `
-           ªª    E  € �  @  
+ 	À l                                                                                                          	           Ô€           	   €Ã  ²   ²   ˆƒ<                à            ªª    E  € �  @  
 
-À 	 l                                                                                                          	   �Ã        Ô€           	   çÃ  °   °   ƒ<                `
-           ªª    E  € �  @  
+À 	 l                                                                                                          	   �Ã        Ô€           	   çÃ  ²   ²   ˆƒ<                à            ªª    E  € �  @  
 
- 	À l                                                                                                          	   SÄ        Ô€           	   É  A   A   €€  ÿÿÿÿÿÿ          p
-ÓŠ     è    Œ$0H`lx ƒèrmesh    	   JO A   A   €€  ÿÿÿÿÿÿ          p
-Š£Š     è    Œ$0H`lx Šèrmesh    	   Ð† °   °   ƒ<                €
-           ªª    E  € Ž  @  
+ 	À l                                                                                                          	   SÄ        Ô€           	   É  A   A   €€  ÿÿÿÿÿÿ          €ÓŠ     è    Œ$0H`lx ƒèrmesh    	   JO A   A   €€  ÿÿÿÿÿÿ          €Š£Š     è    Œ$0H`lx Šèrmesh    	   Ð† ²   ²   ˆƒ<                ð            ªª    E  € Ž  @  
 
-À 	 l                                                                                                          	   à†       Ô€           	   7‡ °   °   ƒ<                €
-           ªª    E  € Ž  @  
+À 	 l                                                                                                          	   à†       Ô€           	   7‡ ²   ²   ˆƒ<                ð            ªª    E  € Ž  @  
 
- 	À l                                                                                                          	   £‡       Ô€           	    J °   °   ƒ<                �
-           ªª    E  € �  @  
+ 	À l                                                                                                          	   £‡       Ô€           	    J ²   ²   ˆƒ<                 	            ªª    E  € �  @  
 
-À 	 l                                                                                                          	   0J       Ô€           	   ‡J °   °   ƒ<                �
-           ªª    E  € �  @  
+À 	 l                                                                                                          	   0J       Ô€           	   ‡J ²   ²   ˆƒ<                 	            ªª    E  € �  @  
 
- 	À l                                                                                                          	   óJ       Ô€           	   p °   °   ƒ<                 
-           ªª    E  € �  @  
+ 	À l                                                                                                          	   óJ       Ô€           	   p ²   ²   ˆƒ<                	            ªª    E  € �  @  
 
-À 	 l                                                                                                          	   €       Ô€           	   × °   °   ƒ<                 
-           ªª    E  € �  @  
+À 	 l                                                                                                          	   €       Ô€           	   × ²   ²   ˆƒ<                	            ªª    E  € �  @  
 
- 	À l                                                                                                          	   C       Ô€           	   ÀÐ °   °   ƒ<                °
-           ªª    E  € ‘  @  
+ 	À l                                                                                                          	   C       Ô€           	   ÀÐ ²   ²   ˆƒ<                 	            ªª    E  € ‘  @  
 
-À 	 l                                                                                                          	   ÐÐ       Ô€           	   'Ñ °   °   ƒ<                °
-           ªª    E  € ‘  @  
+À 	 l                                                                                                          	   ÐÐ       Ô€           	   'Ñ ²   ²   ˆƒ<                 	            ªª    E  € ‘  @  
 
- 	À l                                                                                                          	   “Ñ       Ô€           	   ” °   °   ƒ<                À
-           ªª    E  € ’  @  
+ 	À l                                                                                                          	   “Ñ       Ô€           	   ” ²   ²   ˆƒ<                0	            ªª    E  € ’  @  
 
-À 	 l                                                                                                          	    ”       Ô€           	   w” °   °   ƒ<                À
-           ªª    E  € ’  @  
+À 	 l                                                                                                          	    ”       Ô€           	   w” ²   ²   ˆƒ<                0	            ªª    E  € ’  @  
 
- 	À l                                                                                                          	   ã”       Ô€           	   `W °   °   ƒ<                Ð
-           ªª    E  € “  @  
+ 	À l                                                                                                          	   ã”       Ô€           	   `W ²   ²   ˆƒ<                @	            ªª    E  € “  @  
 
-À 	 l                                                                                                          	   pW       Ô€           	   ÇW °   °   ƒ<                Ð
-           ªª    E  € “  @  
+À 	 l                                                                                                          	   pW       Ô€           	   ÇW ²   ²   ˆƒ<                @	            ªª    E  € “  @  
 
- 	À l                                                                                                          	   3X       Ô€           	   ° °   °   ƒ<                à
-           ªª    E  € ”  @  
+ 	À l                                                                                                          	   3X       Ô€           	   ° ²   ²   ˆƒ<                P	            ªª    E  € ”  @  
 
-À 	 l                                                                                                          	   À       Ô€           	    °   °   ƒ<                à
-           ªª    E  € ”  @  
+À 	 l                                                                                                          	   À       Ô€           	    ²   ²   ˆƒ<                P	            ªª    E  € ”  @  
 
- 	À l                                                                                                          	   ƒ       Ô€           	    Þ °   °   ƒ<                ð
-           ªª    E  € •  @  
+ 	À l                                                                                                          	   ƒ       Ô€           	    Þ ²   ²   ˆƒ<                `	            ªª    E  € •  @  
 
-À 	 l                                                                                                          	   Þ       Ô€           	   gÞ °   °   ƒ<                ð
-           ªª    E  € •  @  
+À 	 l                                                                                                          	   Þ       Ô€           	   gÞ ²   ²   ˆƒ<                `	            ªª    E  € •  @  
 
- 	À l                                                                                                          	   ÓÞ       Ô€           	   P¡ °   °   ƒ<                            ªª    E  € –  @  
+ 	À l                                                                                                          	   ÓÞ       Ô€           	   P¡ ²   ²   ˆƒ<                p	            ªª    E  € –  @  
 
-À 	 l                                                                                                          	   `¡       Ô€           	   ·¡ °   °   ƒ<                            ªª    E  € –  @  
+À 	 l                                                                                                          	   `¡       Ô€           	   ·¡ ²   ²   ˆƒ<                p	            ªª    E  € –  @  
 
- 	À l                                                                                                          	   #¢       Ô€           	    d °   °   ƒ<                           ªª    E  € —  @  
+ 	À l                                                                                                          	   #¢       Ô€           	    d ²   ²   ˆƒ<                €	            ªª    E  € —  @  
 
-À 	 l                                                                                                          	   °d       Ô€           	   e °   °   ƒ<                           ªª    E  € —  @  
+À 	 l                                                                                                          	   °d       Ô€           	   e ²   ²   ˆƒ<                €	            ªª    E  € —  @  
 
- 	À l                                                                                                          	   se       Ô€           	   #j A   A   €€  ÿÿÿÿÿÿ           ó½‘     è    Œ$0H`lx £Šèrmesh    	   jð A   A   €€  ÿÿÿÿÿÿ           ªD’     è    Œ$0H`lx ¾‘èrmesh    	   ð'	 °   °   ƒ<                0           ªª    E  € ˜  @  
+ 	À l                                                                                                          	   se       Ô€           	   #j A   A   €€  ÿÿÿÿÿÿ          �ó½‘     è    Œ$0H`lx £Šèrmesh    	   jð A   A   €€  ÿÿÿÿÿÿ          �ªD’     è    Œ$0H`lx ¾‘èrmesh    	   ð'	 ²   ²   ˆƒ<                �	            ªª    E  € ˜  @  
 
-À 	 l                                                                                                          	    (	       Ô€           	   W(	 °   °   ƒ<                0           ªª    E  € ˜  @  
+À 	 l                                                                                                          	    (	       Ô€           	   W(	 ²   ²   ˆƒ<                �	            ªª    E  € ˜  @  
 
- 	À l                                                                                                          	   Ã(	       Ô€           	   @ë	 °   °   ƒ<                @           ªª    E  € ™  @  
+ 	À l                                                                                                          	   Ã(	       Ô€           	   @ë	 ²   ²   ˆƒ<                 	            ªª    E  € ™  @  
 
-À 	 l                                                                                                          	   Pë	       Ô€           	   §ë	 °   °   ƒ<                @           ªª    E  € ™  @  
+À 	 l                                                                                                          	   Pë	       Ô€           	   §ë	 ²   ²   ˆƒ<                 	            ªª    E  € ™  @  
 
  	À l                                                                                                          	   ì	       Ô€           	   �®
- °   °   ƒ<                P           ªª    E  € š  @  
+ ²   ²   ˆƒ<                °	            ªª    E  € š  @  
 
 À 	 l                                                                                                          	    ®
        Ô€           	   ÷®
- °   °   ƒ<                P           ªª    E  € š  @  
+ ²   ²   ˆƒ<                °	            ªª    E  € š  @  
 
  	À l                                                                                                          	   c¯
-       Ô€           	   àq °   °   ƒ<                `           ªª    E  € ›  @  
+       Ô€           	   àq ²   ²   ˆƒ<                À	            ªª    E  € ›  @  
 
-À 	 l                                                                                                          	   ðq       Ô€           	   Gr °   °   ƒ<                `           ªª    E  € ›  @  
+À 	 l                                                                                                          	   ðq       Ô€           	   Gr ²   ²   ˆƒ<                À	            ªª    E  € ›  @  
 
- 	À l                                                                                                          	   ³r       Ô€           	   05 °   °   ƒ<                p           ªª    E  € œ  @  
+ 	À l                                                                                                          	   ³r       Ô€           	   05 ²   ²   ˆƒ<                Ð	            ªª    E  € œ  @  
 
-À 	 l                                                                                                          	   @5       Ô€           	   —5 °   °   ƒ<                p           ªª    E  € œ  @  
+À 	 l                                                                                                          	   @5       Ô€           	   —5 ²   ²   ˆƒ<                Ð	            ªª    E  € œ  @  
 
- 	À l                                                                                                          	   6       Ô€           	   €ø °   °   ƒ<                €           ªª    E  € �  @  
+ 	À l                                                                                                          	   6       Ô€           	   €ø ²   ²   ˆƒ<                à	            ªª    E  € �  @  
 
-À 	 l                                                                                                          	   �ø       Ô€           	   çø °   °   ƒ<                €           ªª    E  € �  @  
+À 	 l                                                                                                          	   �ø       Ô€           	   çø ²   ²   ˆƒ<                à	            ªª    E  € �  @  
 
- 	À l                                                                                                          	   Sù       Ô€           	   Ð» °   °   ƒ<                �           ªª    E  € ž  @  
+ 	À l                                                                                                          	   Sù       Ô€           	   Ð» ²   ²   ˆƒ<                ð	            ªª    E  € ž  @  
 
-À 	 l                                                                                                          	   à»       Ô€           	   7¼ °   °   ƒ<                �           ªª    E  € ž  @  
+À 	 l                                                                                                          	   à»       Ô€           	   7¼ ²   ²   ˆƒ<                ð	            ªª    E  € ž  @  
 
- 	À l                                                                                                          	   £¼       Ô€           	     °   °   ƒ<                            ªª    E  € Ÿ  @  
+ 	À l                                                                                                          	   £¼       Ô€           	     ²   ²   ˆƒ<                 
+            ªª    E  € Ÿ  @  
 
-À 	 l                                                                                                          	   0       Ô€           	   ‡ °   °   ƒ<                            ªª    E  € Ÿ  @  
+À 	 l                                                                                                          	   0       Ô€           	   ‡ ²   ²   ˆƒ<                 
+            ªª    E  € Ÿ  @  
 
  	À l                                                                                                          	   ó       Ô€           
-   JO A   A   €€  ÿÿÿÿÿÿ          °Êå™     è    Œ$0H`lx ¾‘èrmesh    
-   ãg -   -   Ð€<                Àrmeshu  4     
-   ™h -   -   Ðˆ<                Àrmeshu  4     
-   ai -   -   Ðˆ<                Àrmeshu  4     
-    j -   -   Ðˆ<                Àrmeshu  4     
-   ßj -   -   Ðˆ<                Àrmeshu  4     
-   ¢k -   -   Ðˆ<                Àrmeshu  4     
-   Sl -   -   Ðˆ<                Àrmeshu  4     
-   jð A   A   €€  ÿÿÿÿÿÿ          Ðê†¡     è    Œ$0H`lx ¾‘èrmesh       J/ <   <   €€  ÿÿÿÿÿÿ          à
-©     è    Œ$0H`lx rmesh       jø <   <   €€  ÿÿÿÿÿÿ          ð*Ñ°     è    Œ$0H`lx rmesh       J7 <   <   €€  ÿÿÿÿÿÿ           JR¸     è    Œ$0H`lx rmesh       jÄ <   <   €€  ÿÿÿÿÿÿ          jß¿     è    Œ$0H`lx rmesh       Jë  <   <   €€  ÿÿÿÿÿÿ           ŠHÇ     è    Œ$0H`lx rmesh       j� <   <   €€  ÿÿÿÿÿÿ          0ªíÎ     è    Œ$0H`lx rmesh       Jó  <   <   €€  ÿÿÿÿÿÿ          @Ê’Ö     è    Œ$0H`lx rmesh       j¬ <   <   €€  ÿÿÿÿÿÿ          PêKÞ     è    Œ$0H`lx rmesh    
\ No newline at end of file
+   JO A   A   €€  ÿÿÿÿÿÿ           Êå™     è    Œ$0H`lx ¾‘èrmesh    
+   ãg -   -   Ð€<                °rmeshu  4     
+   ™h -   -   Ðˆ<                °rmeshu  4     
+   ai -   -   Ðˆ<                °rmeshu  4     
+    j -   -   Ðˆ<                °rmeshu  4     
+   ßj -   -   Ðˆ<                °rmeshu  4     
+   ¢k -   -   Ðˆ<                °rmeshu  4     
+   Sl -   -   Ðˆ<                °rmeshu  4     
+   jð A   A   €€  ÿÿÿÿÿÿ          Àê†¡     è    Œ$0H`lx ¾‘èrmesh       J/ <   <   €€  ÿÿÿÿÿÿ          Ð
+©     è    Œ$0H`lx rmesh       jø <   <   €€  ÿÿÿÿÿÿ          à*Ñ°     è    Œ$0H`lx rmesh       J7 <   <   €€  ÿÿÿÿÿÿ          ðJR¸     è    Œ$0H`lx rmesh       jÄ <   <   €€  ÿÿÿÿÿÿ           jß¿     è    Œ$0H`lx rmesh       Jë  <   <   €€  ÿÿÿÿÿÿ          ŠHÇ     è    Œ$0H`lx rmesh       j� <   <   €€  ÿÿÿÿÿÿ           ªíÎ     è    Œ$0H`lx rmesh       Jó  <   <   €€  ÿÿÿÿÿÿ          0Ê’Ö     è    Œ$0H`lx rmesh       j¬ <   <   €€  ÿÿÿÿÿÿ          @êKÞ     è    Œ$0H`lx rmesh    
\ No newline at end of file
diff -Naur ns-3.23/src/mesh/test/dot11s/hwmp-simplest-regression-test-1-1.pcap ns-3.24/src/mesh/test/dot11s/hwmp-simplest-regression-test-1-1.pcap
--- ns-3.23/src/mesh/test/dot11s/hwmp-simplest-regression-test-1-1.pcap	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/test/dot11s/hwmp-simplest-regression-test-1-1.pcap	2015-09-15 11:18:44.000000000 -0700
@@ -1,778 +1,761 @@
 ÔÃ²¡          ÿÿ  i       “È  <   <   €€  ÿÿÿÿÿÿ            “È      è    Œ$0H`lx rmesh        ‰É  >   >   Ð€<                    Œ$0H`lrmeshq   9u         ™É        Ô€               çÉ  <   <   Ð€<                     Œ$0H`lq   9u          ‹Ê        Ô€               ¿Ê  >   >   Ð€<                    Œ$0H`lrmeshq   9u         gË        Ô€               ñË  <   <   Ð€<                     Œ$0H`lq  9u          Ì        Ô€               ºO A   A   €€  ÿÿÿÿÿÿ            JO     è    Œ$0H`lx È èrmesh        ³i A   A   €€  ÿÿÿÿÿÿ          0 ³i     è    Œ$0H`lx Oèrmesh        Úð A   A   €€  ÿÿÿÿÿÿ          0 jð     è    Œ$0H`lx jèrmesh       “È  A   A   €€  ÿÿÿÿÿÿ          @ Ó
-     è    Œ$0H`lx ðèrmesh       ºO A   A   €€  ÿÿÿÿÿÿ          @ Š‘     è    Œ$0H`lx èrmesh       ³i A   A   €€  ÿÿÿÿÿÿ          P ó«     è    Œ$0H`lx ‘èrmesh       Úð A   A   €€  ÿÿÿÿÿÿ          P ª2     è    Œ$0H`lx ¬èrmesh       (#  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ`           ªª           
+     è    Œ$0H`lx ðèrmesh       ºO A   A   €€  ÿÿÿÿÿÿ          @ Š‘     è    Œ$0H`lx èrmesh       ³i A   A   €€  ÿÿÿÿÿÿ          P ó«     è    Œ$0H`lx ‘èrmesh       Úð A   A   €€  ÿÿÿÿÿÿ          P ª2     è    Œ$0H`lx ¬èrmesh       (#  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ`            ªª           
 ÿÿÿÿÿÿ
-       S$  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ`          ªª           
+       S$  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ`           ªª           
 ÿÿÿÿÿÿ
-       %  E   E   Ð€  ÿÿÿÿÿÿ          p ‚%              ˆ                      8%  ?   ?   Ð€<                p ƒ           ˆ                     à%        Ô€              ‹&  L   L   ƒ<                €            ªª           
+       %  E   E   Ð€  ÿÿÿÿÿÿ          p ‚%              ˆ                      8%  ?   ?   Ð€<                p ƒ           ˆ                     à%        Ô€              ‹&  N   N   ˆƒ<                              ªª           
      
-       ›&        Ô€              '  °   °   ƒ<                €            ªª    E  €    @  
+       ›&        Ô€              '  ²   ²   ˆƒ<                              ªª    E  €    @  
 
-À 	 l                                                                                                             M(        Ô€              ¹K  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ�           ªª           
+À 	 l                                                                                                             Q(        Ô€              ½K  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ€            ªª           
 ÿÿÿÿÿÿ
-       äK  L   L   ƒ<                �            ªª           
+       èK  N   N   ˆƒ<                             ªª           
      
-        L        Ô€              
-M  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ           ªª           
+       ¤L        Ô€              M  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ€           ªª           
 ÿÿÿÿÿÿ
-       O  °   °   ƒ<                             ªª    E  €    @  
+       	O  ²   ²   ˆƒ<                             ªª    E  €    @  
 
- 	À l                                                                                                             O        Ô€              PÃ  °   °   ƒ<                °            ªª    E  €   @  
+ 	À l                                                                                                             O        Ô€              PÃ  ²   ²   ˆƒ<                              ªª    E  €   @  
 
-À 	 l                                                                                                             �Ä        Ô€              ¿Å  °   °   ƒ<                °            ªª    E  €   @  
+À 	 l                                                                                                             ”Ä        Ô€              ÇÅ  ²   ²   ˆƒ<                              ªª    E  €   @  
 
- 	À l                                                                                                             ÏÅ        Ô€              “È  A   A   €€  ÿÿÿÿÿÿ          À M     è    Œ$0H`lx 3èrmesh       ºO A   A   €€  ÿÿÿÿÿÿ          À ÊÓ     è    Œ$0H`lx Mèrmesh        † °   °   ƒ<                Ð            ªª    E  €   @  
+ 	À l                                                                                                             ×Å        Ô€              “È  A   A   €€  ÿÿÿÿÿÿ          � M     è    Œ$0H`lx 3èrmesh       ºO A   A   €€  ÿÿÿÿÿÿ          � ÊÓ     è    Œ$0H`lx Mèrmesh        † ²   ²   ˆƒ<                0             ªª    E  €   @  
 
-À 	 l                                                                                                             à‡       Ô€              ‰ °   °   ƒ<                Ð            ªª    E  €   @  
+À 	 l                                                                                                             ä‡       Ô€              ‰ ²   ²   ˆƒ<                0             ªª    E  €   @  
 
- 	À l                                                                                                             ‰       Ô€              ðI °   °   ƒ<                à            ªª    E  €   @  
+ 	À l                                                                                                             '‰       Ô€              ðI ²   ²   ˆƒ<                @             ªª    E  €   @  
 
-À 	 l                                                                                                             0K       Ô€              _L °   °   ƒ<                à            ªª    E  €   @  
+À 	 l                                                                                                             4K       Ô€              gL ²   ²   ˆƒ<                @             ªª    E  €   @  
 
- 	À l                                                                                                             oL       Ô€              @ °   °   ƒ<                ð            ªª    E  €   @  
+ 	À l                                                                                                             wL       Ô€              @ ²   ²   ˆƒ<                P             ªª    E  €   @  
 
-À 	 l                                                                                                             €       Ô€              ¯ °   °   ƒ<                ð            ªª    E  €   @  
+À 	 l                                                                                                             „       Ô€              · ²   ²   ˆƒ<                P             ªª    E  €   @  
 
- 	À l                                                                                                             ¿       Ô€              �Ð °   °   ƒ<                            ªª    E  €   @  
+ 	À l                                                                                                             Ç       Ô€              �Ð ²   ²   ˆƒ<                `             ªª    E  €   @  
 
-À 	 l                                                                                                             ÐÑ       Ô€              ÿÒ °   °   ƒ<                            ªª    E  €   @  
+À 	 l                                                                                                             ÔÑ       Ô€              Ó ²   ²   ˆƒ<                `             ªª    E  €   @  
 
- 	À l                                                                                                             Ó       Ô€              à“ °   °   ƒ<                           ªª    E  €   @  
+ 	À l                                                                                                             Ó       Ô€              à“ ²   ²   ˆƒ<                p             ªª    E  €   @  
 
-À 	 l                                                                                                             Ð”       Ô€              ÿ• °   °   ƒ<                           ªª    E  €   @  
+À 	 l                                                                                                             Ô”       Ô€              – ²   ²   ˆƒ<                p             ªª    E  €   @  
 
- 	À l                                                                                                             –       Ô€              0W °   °   ƒ<                            ªª    E  €   @  
+ 	À l                                                                                                             –       Ô€              0W ²   ²   ˆƒ<                €             ªª    E  €   @  
 
-À 	 l                                                                                                              X       Ô€              ÿX °   °   ƒ<                            ªª    E  €   @  
+À 	 l                                                                                                             $X       Ô€              Y ²   ²   ˆƒ<                €             ªª    E  €   @  
 
- 	À l                                                                                                             Y       Ô€              € °   °   ƒ<                0           ªª    E  €   @  
+ 	À l                                                                                                             Y       Ô€              € ²   ²   ˆƒ<                �             ªª    E  €   @  
 
-À 	 l                                                                                                             p       Ô€              O °   °   ƒ<                0           ªª    E  €   @  
+À 	 l                                                                                                             t       Ô€              W ²   ²   ˆƒ<                �             ªª    E  €   @  
 
- 	À l                                                                                                             _       Ô€              ÐÝ °   °   ƒ<                @           ªª    E  € 	  @  
+ 	À l                                                                                                             g       Ô€              ÐÝ ²   ²   ˆƒ<                              ªª    E  € 	  @  
 
-À 	 l                                                                                                             ÀÞ       Ô€              Ÿß °   °   ƒ<                @           ªª    E  € 	  @  
+À 	 l                                                                                                             ÄÞ       Ô€              §ß ²   ²   ˆƒ<                              ªª    E  € 	  @  
 
- 	À l                                                                                                             ¯ß       Ô€               ¡ °   °   ƒ<                P           ªª    E  € 
+ 	À l                                                                                                             ·ß       Ô€               ¡ ²   ²   ˆƒ<                °             ªª    E  € 
   @  
 
-À 	 l                                                                                                             ¢       Ô€              ï¢ °   °   ƒ<                P           ªª    E  € 
+À 	 l                                                                                                             ¢       Ô€              ÷¢ ²   ²   ˆƒ<                °             ªª    E  € 
   @  
 
- 	À l                                                                                                             ÿ¢       Ô€              pd °   °   ƒ<                `           ªª    E  €   @  
+ 	À l                                                                                                             £       Ô€              pd ²   ²   ˆƒ<                À             ªª    E  €   @  
 
-À 	 l                                                                                                             `e       Ô€              ?f °   °   ƒ<                `           ªª    E  €   @  
+À 	 l                                                                                                             de       Ô€              Gf ²   ²   ˆƒ<                À             ªª    E  €   @  
 
- 	À l                                                                                                             Of       Ô€              ³i A   A   €€  ÿÿÿÿÿÿ          p3î&     è    Œ$0H`lx Ôèrmesh       Úð A   A   €€  ÿÿÿÿÿÿ          pêt'     è    Œ$0H`lx î&èrmesh       À'	 °   °   ƒ<                €           ªª    E  €   @  
+ 	À l                                                                                                             Wf       Ô€              ³i A   A   €€  ÿÿÿÿÿÿ            3î&     è    Œ$0H`lx Ôèrmesh       Úð A   A   €€  ÿÿÿÿÿÿ            êt'     è    Œ$0H`lx î&èrmesh       À'	 ²   ²   ˆƒ<                Ð             ªª    E  €   @  
 
-À 	 l                                                                                                             °(	       Ô€              �)	 °   °   ƒ<                €           ªª    E  €   @  
+À 	 l                                                                                                             ´(	       Ô€              —)	 ²   ²   ˆƒ<                Ð             ªª    E  €   @  
 
- 	À l                                                                                                             Ÿ)	       Ô€              ë	 °   °   ƒ<                �           ªª    E  €   @  
+ 	À l                                                                                                             §)	       Ô€              ë	 ²   ²   ˆƒ<                à             ªª    E  €   @  
 
-À 	 l                                                                                                              ì	       Ô€              ßì	 °   °   ƒ<                �           ªª    E  €   @  
+À 	 l                                                                                                             ì	       Ô€              çì	 ²   ²   ˆƒ<                à             ªª    E  €   @  
 
- 	À l                                                                                                             ïì	       Ô€              `®
- °   °   ƒ<                            ªª    E  €   @  
+ 	À l                                                                                                             ÷ì	       Ô€              `®
+ ²   ²   ˆƒ<                ð             ªª    E  €   @  
 
-À 	 l                                                                                                             P¯
-       Ô€              /°
- °   °   ƒ<                            ªª    E  €   @  
+À 	 l                                                                                                             T¯
+       Ô€              7°
+ ²   ²   ˆƒ<                ð             ªª    E  €   @  
 
- 	À l                                                                                                             ?°
-       Ô€              °q °   °   ƒ<                °           ªª    E  €   @  
+ 	À l                                                                                                             G°
+       Ô€              °q ²   ²   ˆƒ<                             ªª    E  €   @  
 
-À 	 l                                                                                                              r       Ô€              s °   °   ƒ<                °           ªª    E  €   @  
+À 	 l                                                                                                             ¤r       Ô€              ‡s ²   ²   ˆƒ<                             ªª    E  €   @  
 
- 	À l                                                                                                             �s       Ô€               5 °   °   ƒ<                À           ªª    E  €   @  
+ 	À l                                                                                                             —s       Ô€               5 ²   ²   ˆƒ<                            ªª    E  €   @  
 
-À 	 l                                                                                                             È5       Ô€              §6 °   °   ƒ<                À           ªª    E  €   @  
+À 	 l                                                                                                             Ì5       Ô€              ¯6 ²   ²   ˆƒ<                            ªª    E  €   @  
 
- 	À l                                                                                                             ·6       Ô€              Pø °   °   ƒ<                Ð           ªª    E  €   @  
+ 	À l                                                                                                             ¿6       Ô€              Pø ²   ²   ˆƒ<                             ªª    E  €   @  
 
-À 	 l                                                                                                             ù       Ô€              Ïù °   °   ƒ<                Ð           ªª    E  €   @  
+À 	 l                                                                                                             ù       Ô€              ×ù ²   ²   ˆƒ<                             ªª    E  €   @  
 
- 	À l                                                                                                             ßù       Ô€               » °   °   ƒ<                à           ªª    E  €   @  
+ 	À l                                                                                                             çù       Ô€               » ²   ²   ˆƒ<                0            ªª    E  €   @  
 
-À 	 l                                                                                                             h¼       Ô€              ½ °   °   ƒ<                à           ªª    E  €   @  
+À 	 l                                                                                                             l¼       Ô€              '½ ²   ²   ˆƒ<                0            ªª    E  €   @  
 
- 	À l                                                                                                             /½       Ô€              ð~ °   °   ƒ<                ð           ªª    E  €   @  
+ 	À l                                                                                                             7½       Ô€              ð~ ²   ²   ˆƒ<                @            ªª    E  €   @  
 
-À 	 l                                                                                                             ¸       Ô€              o€ °   °   ƒ<                ð           ªª    E  €   @  
+À 	 l                                                                                                             ¼       Ô€              w€ ²   ²   ˆƒ<                @            ªª    E  €   @  
 
- 	À l                                                                                                             €       Ô€                  °   °   ƒ<                            ªª    E  €   @  
+ 	À l                                                                                                             ‡€       Ô€                  ²   ²   ˆƒ<                P            ªª    E  €   @  
 
-À 	 l                                                                                                             È         Ô€                °   °   ƒ<                            ªª    E  €   @  
+À 	 l                                                                                                             Ì         Ô€              ‡  ²   ²   ˆƒ<                P            ªª    E  €   @  
 
- 	À l                                                                                                             �        Ô€              PÃ  °   °   ƒ<                           ªª    E  €   @  
+ 	À l                                                                                                             —        Ô€              PÃ  ²   ²   ˆƒ<                `            ªª    E  €   @  
 
-À 	 l                                                                                                             Ä        Ô€              ÏÄ  °   °   ƒ<                           ªª    E  €   @  
+À 	 l                                                                                                             Ä        Ô€              ×Ä  ²   ²   ˆƒ<                `            ªª    E  €   @  
 
- 	À l                                                                                                             ßÄ        Ô€              “È  A   A   €€  ÿÿÿÿÿÿ           S�.     è    Œ$0H`lx u'èrmesh       ºO A   A   €€  ÿÿÿÿÿÿ           
-/     è    Œ$0H`lx �.èrmesh        † °   °   ƒ<                0           ªª    E  €   @  
+ 	À l                                                                                                             çÄ        Ô€              “È  A   A   €€  ÿÿÿÿÿÿ          ° S�.     è    Œ$0H`lx u'èrmesh       ºO A   A   €€  ÿÿÿÿÿÿ          ° 
+/     è    Œ$0H`lx �.èrmesh        † ²   ²   ˆƒ<                p            ªª    E  €   @  
 
-À 	 l                                                                                                             h‡       Ô€              ˆ °   °   ƒ<                0           ªª    E  €   @  
+À 	 l                                                                                                             l‡       Ô€              'ˆ ²   ²   ˆƒ<                p            ªª    E  €   @  
 
- 	À l                                                                                                             /ˆ       Ô€              ðI °   °   ƒ<                @           ªª    E  €   @  
+ 	À l                                                                                                             7ˆ       Ô€              ðI ²   ²   ˆƒ<                €            ªª    E  €   @  
 
-À 	 l                                                                                                             ¸J       Ô€              oK °   °   ƒ<                @           ªª    E  €   @  
+À 	 l                                                                                                             ¼J       Ô€              wK ²   ²   ˆƒ<                €            ªª    E  €   @  
 
- 	À l                                                                                                             K       Ô€              @ °   °   ƒ<                P           ªª    E  €   @  
+ 	À l                                                                                                             ‡K       Ô€              @ ²   ²   ˆƒ<                �            ªª    E  €   @  
 
-À 	 l                                                                                                                    Ô€              ¿ °   °   ƒ<                P           ªª    E  €   @  
+À 	 l                                                                                                                    Ô€              Ç ²   ²   ˆƒ<                �            ªª    E  €   @  
 
- 	À l                                                                                                             Ï       Ô€              �Ð °   °   ƒ<                `           ªª    E  €   @  
+ 	À l                                                                                                             ×       Ô€              �Ð ²   ²   ˆƒ<                             ªª    E  €   @  
 
-À 	 l                                                                                                             XÑ       Ô€              Ò °   °   ƒ<                `           ªª    E  €   @  
+À 	 l                                                                                                             \Ñ       Ô€              Ò ²   ²   ˆƒ<                             ªª    E  €   @  
 
- 	À l                                                                                                             Ò       Ô€              à“ °   °   ƒ<                p           ªª    E  €   @  
+ 	À l                                                                                                             'Ò       Ô€              à“ ²   ²   ˆƒ<                °            ªª    E  €   @  
 
-À 	 l                                                                                                             €”       Ô€              7• °   °   ƒ<                p           ªª    E  €   @  
+À 	 l                                                                                                             „”       Ô€              ?• ²   ²   ˆƒ<                °            ªª    E  €   @  
 
- 	À l                                                                                                             G•       Ô€              0W °   °   ƒ<                €           ªª    E  €   @  
+ 	À l                                                                                                             O•       Ô€              0W ²   ²   ˆƒ<                À            ªª    E  €   @  
 
-À 	 l                                                                                                             ÐW       Ô€              _X °   °   ƒ<                €           ªª    E  €   @  
+À 	 l                                                                                                             ÔW       Ô€              gX ²   ²   ˆƒ<                À            ªª    E  €   @  
 
- 	À l                                                                                                             oX       Ô€              € °   °   ƒ<                �           ªª    E  €   @  
+ 	À l                                                                                                             wX       Ô€              € ²   ²   ˆƒ<                Ð            ªª    E  €   @  
 
-À 	 l                                                                                                                     Ô€              ¯ °   °   ƒ<                �           ªª    E  €   @  
+À 	 l                                                                                                             $       Ô€              · ²   ²   ˆƒ<                Ð            ªª    E  €   @  
 
- 	À l                                                                                                             ¿       Ô€              ÐÝ °   °   ƒ<                            ªª    E  €   @  
+ 	À l                                                                                                             Ç       Ô€              ÐÝ ²   ²   ˆƒ<                à            ªª    E  €   @  
 
-À 	 l                                                                                                             pÞ       Ô€              ÿÞ °   °   ƒ<                            ªª    E  €   @  
+À 	 l                                                                                                             tÞ       Ô€              ß ²   ²   ˆƒ<                à            ªª    E  €   @  
 
- 	À l                                                                                                             ß       Ô€               ¡ °   °   ƒ<                °           ªª    E  €   @  
+ 	À l                                                                                                             ß       Ô€               ¡ ²   ²   ˆƒ<                ð            ªª    E  €   @  
 
-À 	 l                                                                                                             À¡       Ô€              O¢ °   °   ƒ<                °           ªª    E  €   @  
+À 	 l                                                                                                             Ä¡       Ô€              W¢ ²   ²   ˆƒ<                ð            ªª    E  €   @  
 
- 	À l                                                                                                             _¢       Ô€              pd °   °   ƒ<                À           ªª    E  €   @  
+ 	À l                                                                                                             g¢       Ô€              pd ²   ²   ˆƒ<                             ªª    E  €   @  
 
-À 	 l                                                                                                             e       Ô€              Ÿe °   °   ƒ<                À           ªª    E  €   @  
+À 	 l                                                                                                             e       Ô€              §e ²   ²   ˆƒ<                             ªª    E  €   @  
 
- 	À l                                                                                                             ¯e       Ô€              ³i A   A   €€  ÿÿÿÿÿÿ          Ðs06     è    Œ$0H`lx /èrmesh       Úð A   A   €€  ÿÿÿÿÿÿ          Ð*·6     è    Œ$0H`lx 06èrmesh       À'	 °   °   ƒ<                à           ªª    E  €    @  
+ 	À l                                                                                                             ·e       Ô€              ³i A   A   €€  ÿÿÿÿÿÿ          À s06     è    Œ$0H`lx /èrmesh       Úð A   A   €€  ÿÿÿÿÿÿ          À *·6     è    Œ$0H`lx 06èrmesh       À'	 ²   ²   ˆƒ<                            ªª    E  €    @  
 
-À 	 l                                                                                                             `(	       Ô€              ï(	 °   °   ƒ<                à           ªª    E  €    @  
+À 	 l                                                                                                             d(	       Ô€              ÷(	 ²   ²   ˆƒ<                            ªª    E  €    @  
 
- 	À l                                                                                                             ÿ(	       Ô€              ë	 °   °   ƒ<                ð           ªª    E  € !  @  
+ 	À l                                                                                                             )	       Ô€              ë	 ²   ²   ˆƒ<                             ªª    E  € !  @  
 
-À 	 l                                                                                                             °ë	       Ô€              ?ì	 °   °   ƒ<                ð           ªª    E  € !  @  
+À 	 l                                                                                                             ´ë	       Ô€              Gì	 ²   ²   ˆƒ<                             ªª    E  € !  @  
 
- 	À l                                                                                                             Oì	       Ô€              `®
- °   °   ƒ<                            ªª    E  € "  @  
+ 	À l                                                                                                             Wì	       Ô€              `®
+ ²   ²   ˆƒ<                0            ªª    E  € "  @  
 
-À 	 l                                                                                                              ¯
-       Ô€              �¯
- °   °   ƒ<                            ªª    E  € "  @  
+À 	 l                                                                                                             ¯
+       Ô€              —¯
+ ²   ²   ˆƒ<                0            ªª    E  € "  @  
 
- 	À l                                                                                                             Ÿ¯
-       Ô€              °q °   °   ƒ<                           ªª    E  € #  @  
+ 	À l                                                                                                             §¯
+       Ô€              °q ²   ²   ˆƒ<                @            ªª    E  € #  @  
 
-À 	 l                                                                                                             Pr       Ô€              ßr °   °   ƒ<                           ªª    E  € #  @  
+À 	 l                                                                                                             Tr       Ô€              çr ²   ²   ˆƒ<                @            ªª    E  € #  @  
 
- 	À l                                                                                                             ïr       Ô€               5 °   °   ƒ<                            ªª    E  € $  @  
+ 	À l                                                                                                             ÷r       Ô€               5 ²   ²   ˆƒ<                P            ªª    E  € $  @  
 
-À 	 l                                                                                                             Œ5       Ô€              6 °   °   ƒ<                            ªª    E  € $  @  
+À 	 l                                                                                                             �5       Ô€              #6 ²   ²   ˆƒ<                P            ªª    E  € $  @  
 
- 	À l                                                                                                             +6       Ô€              Pø °   °   ƒ<                0           ªª    E  € %  @  
+ 	À l                                                                                                             36       Ô€              Pø ²   ²   ˆƒ<                `            ªª    E  € %  @  
 
-À 	 l                                                                                                             Üø       Ô€              Wù °   °   ƒ<                0           ªª    E  € %  @  
+À 	 l                                                                                                             àø       Ô€              _ù ²   ²   ˆƒ<                `            ªª    E  € %  @  
 
- 	À l                                                                                                             gù       Ô€               » °   °   ƒ<                @           ªª    E  € &  @  
+ 	À l                                                                                                             où       Ô€               » ²   ²   ˆƒ<                p            ªª    E  € &  @  
 
-À 	 l                                                                                                             ,¼       Ô€              §¼ °   °   ƒ<                @           ªª    E  € &  @  
+À 	 l                                                                                                             0¼       Ô€              ¯¼ ²   ²   ˆƒ<                p            ªª    E  € &  @  
 
- 	À l                                                                                                             ·¼       Ô€              ð~ °   °   ƒ<                P           ªª    E  € '  @  
+ 	À l                                                                                                             ¿¼       Ô€              ð~ ²   ²   ˆƒ<                €            ªª    E  € '  @  
 
-À 	 l                                                                                                             |       Ô€              ÷ °   °   ƒ<                P           ªª    E  € '  @  
+À 	 l                                                                                                             €       Ô€              ÿ ²   ²   ˆƒ<                €            ªª    E  € '  @  
 
- 	À l                                                                                                             €       Ô€                  °   °   ƒ<                `           ªª    E  € (  @  
+ 	À l                                                                                                             €       Ô€                  ²   ²   ˆƒ<                �            ªª    E  € (  @  
 
-À 	 l                                                                                                             Œ         Ô€                °   °   ƒ<                `           ªª    E  € (  @  
+À 	 l                                                                                                             �         Ô€                ²   ²   ˆƒ<                �            ªª    E  € (  @  
 
- 	À l                                                                                                                     Ô€              PÃ  °   °   ƒ<                p           ªª    E  € )  @  
+ 	À l                                                                                                                     Ô€              PÃ  ²   ²   ˆƒ<                             ªª    E  € )  @  
 
-À 	 l                                                                                                             ÜÃ        Ô€              WÄ  °   °   ƒ<                p           ªª    E  € )  @  
+À 	 l                                                                                                             àÃ        Ô€              _Ä  ²   ²   ˆƒ<                             ªª    E  € )  @  
 
- 	À l                                                                                                             gÄ        Ô€              “È  A   A   €€  ÿÿÿÿÿÿ          €“Ñ=     è    Œ$0H`lx ·6èrmesh       ºO A   A   €€  ÿÿÿÿÿÿ          €JX>     è    Œ$0H`lx Ò=èrmesh        † °   °   ƒ<                �           ªª    E  € *  @  
+ 	À l                                                                                                             oÄ        Ô€              “È  A   A   €€  ÿÿÿÿÿÿ          Ð “Ñ=     è    Œ$0H`lx ·6èrmesh       ºO A   A   €€  ÿÿÿÿÿÿ          Ð JX>     è    Œ$0H`lx Ò=èrmesh        † ²   ²   ˆƒ<                °            ªª    E  € *  @  
 
-À 	 l                                                                                                             ,‡       Ô€              §‡ °   °   ƒ<                �           ªª    E  € *  @  
+À 	 l                                                                                                             0‡       Ô€              ¯‡ ²   ²   ˆƒ<                °            ªª    E  € *  @  
 
- 	À l                                                                                                             ·‡       Ô€              ðI °   °   ƒ<                            ªª    E  € +  @  
+ 	À l                                                                                                             ¿‡       Ô€              ðI ²   ²   ˆƒ<                À            ªª    E  € +  @  
 
-À 	 l                                                                                                             |J       Ô€              ÷J °   °   ƒ<                            ªª    E  € +  @  
+À 	 l                                                                                                             €J       Ô€              ÿJ ²   ²   ˆƒ<                À            ªª    E  € +  @  
 
- 	À l                                                                                                             K       Ô€              @ °   °   ƒ<                °           ªª    E  € ,  @  
+ 	À l                                                                                                             K       Ô€              @ ²   ²   ˆƒ<                Ð            ªª    E  € ,  @  
 
-À 	 l                                                                                                             Ì       Ô€              G °   °   ƒ<                °           ªª    E  € ,  @  
+À 	 l                                                                                                             Ð       Ô€              O ²   ²   ˆƒ<                Ð            ªª    E  € ,  @  
 
- 	À l                                                                                                             W       Ô€              �Ð °   °   ƒ<                À           ªª    E  € -  @  
+ 	À l                                                                                                             _       Ô€              �Ð ²   ²   ˆƒ<                à            ªª    E  € -  @  
 
-À 	 l                                                                                                             Ñ       Ô€              —Ñ °   °   ƒ<                À           ªª    E  € -  @  
+À 	 l                                                                                                              Ñ       Ô€              ŸÑ ²   ²   ˆƒ<                à            ªª    E  € -  @  
 
- 	À l                                                                                                             §Ñ       Ô€              à“ °   °   ƒ<                Ð           ªª    E  € .  @  
+ 	À l                                                                                                             ¯Ñ       Ô€              à“ ²   ²   ˆƒ<                ð            ªª    E  € .  @  
 
-À 	 l                                                                                                             X”       Ô€              Ó” °   °   ƒ<                Ð           ªª    E  € .  @  
+À 	 l                                                                                                             \”       Ô€              Û” ²   ²   ˆƒ<                ð            ªª    E  € .  @  
 
- 	À l                                                                                                             ã”       Ô€              0W °   °   ƒ<                à           ªª    E  € /  @  
+ 	À l                                                                                                             ë”       Ô€              0W ²   ²   ˆƒ<                             ªª    E  € /  @  
 
-À 	 l                                                                                                             ¨W       Ô€              X °   °   ƒ<                à           ªª    E  € /  @  
+À 	 l                                                                                                             ¬W       Ô€              X ²   ²   ˆƒ<                             ªª    E  € /  @  
 
- 	À l                                                                                                             X       Ô€              € °   °   ƒ<                ð           ªª    E  € 0  @  
+ 	À l                                                                                                             'X       Ô€              € ²   ²   ˆƒ<                            ªª    E  € 0  @  
 
-À 	 l                                                                                                             ø       Ô€              _ °   °   ƒ<                ð           ªª    E  € 0  @  
+À 	 l                                                                                                             ü       Ô€              g ²   ²   ˆƒ<                            ªª    E  € 0  @  
 
- 	À l                                                                                                             o       Ô€              ÐÝ °   °   ƒ<                            ªª    E  € 1  @  
+ 	À l                                                                                                             w       Ô€              ÐÝ ²   ²   ˆƒ<                             ªª    E  € 1  @  
 
-À 	 l                                                                                                             HÞ       Ô€              ¯Þ °   °   ƒ<                            ªª    E  € 1  @  
+À 	 l                                                                                                             LÞ       Ô€              ·Þ ²   ²   ˆƒ<                             ªª    E  € 1  @  
 
- 	À l                                                                                                             ¿Þ       Ô€               ¡ °   °   ƒ<                           ªª    E  € 2  @  
+ 	À l                                                                                                             ÇÞ       Ô€               ¡ ²   ²   ˆƒ<                0            ªª    E  € 2  @  
 
-À 	 l                                                                                                             ˜¡       Ô€              ÿ¡ °   °   ƒ<                           ªª    E  € 2  @  
+À 	 l                                                                                                             œ¡       Ô€              ¢ ²   ²   ˆƒ<                0            ªª    E  € 2  @  
 
- 	À l                                                                                                             ¢       Ô€              pd °   °   ƒ<                            ªª    E  € 3  @  
+ 	À l                                                                                                             ¢       Ô€              pd ²   ²   ˆƒ<                @            ªª    E  € 3  @  
 
-À 	 l                                                                                                             èd       Ô€              Oe °   °   ƒ<                            ªª    E  € 3  @  
+À 	 l                                                                                                             ìd       Ô€              We ²   ²   ˆƒ<                @            ªª    E  € 3  @  
 
- 	À l                                                                                                             _e       Ô€              ³i A   A   €€  ÿÿÿÿÿÿ          0³rE     è    Œ$0H`lx X>èrmesh       Úð A   A   €€  ÿÿÿÿÿÿ          0jùE     è    Œ$0H`lx sEèrmesh       À'	 °   °   ƒ<                @           ªª    E  € 4  @  
+ 	À l                                                                                                             ge       Ô€              ³i A   A   €€  ÿÿÿÿÿÿ          à ³rE     è    Œ$0H`lx X>èrmesh       Úð A   A   €€  ÿÿÿÿÿÿ          à jùE     è    Œ$0H`lx sEèrmesh       À'	 ²   ²   ˆƒ<                P            ªª    E  € 4  @  
 
-À 	 l                                                                                                             8(	       Ô€              Ÿ(	 °   °   ƒ<                @           ªª    E  € 4  @  
+À 	 l                                                                                                             <(	       Ô€              §(	 ²   ²   ˆƒ<                P            ªª    E  € 4  @  
 
- 	À l                                                                                                             ¯(	       Ô€              ë	 °   °   ƒ<                P           ªª    E  € 5  @  
+ 	À l                                                                                                             ·(	       Ô€              ë	 ²   ²   ˆƒ<                `            ªª    E  € 5  @  
 
-À 	 l                                                                                                             ˆë	       Ô€              ïë	 °   °   ƒ<                P           ªª    E  € 5  @  
+À 	 l                                                                                                             Œë	       Ô€              ÷ë	 ²   ²   ˆƒ<                `            ªª    E  € 5  @  
 
- 	À l                                                                                                             ÿë	       Ô€              `®
- °   °   ƒ<                `           ªª    E  € 6  @  
+ 	À l                                                                                                             ì	       Ô€              `®
+ ²   ²   ˆƒ<                p            ªª    E  € 6  @  
 
-À 	 l                                                                                                             Ø®
-       Ô€              ?¯
- °   °   ƒ<                `           ªª    E  € 6  @  
+À 	 l                                                                                                             Ü®
+       Ô€              G¯
+ ²   ²   ˆƒ<                p            ªª    E  € 6  @  
 
- 	À l                                                                                                             O¯
-       Ô€              °q °   °   ƒ<                p           ªª    E  € 7  @  
+ 	À l                                                                                                             W¯
+       Ô€              °q ²   ²   ˆƒ<                €            ªª    E  € 7  @  
 
-À 	 l                                                                                                             (r       Ô€              �r °   °   ƒ<                p           ªª    E  € 7  @  
+À 	 l                                                                                                             ,r       Ô€              —r ²   ²   ˆƒ<                €            ªª    E  € 7  @  
 
- 	À l                                                                                                             Ÿr       Ô€               5 °   °   ƒ<                €           ªª    E  € 8  @  
+ 	À l                                                                                                             §r       Ô€               5 ²   ²   ˆƒ<                �            ªª    E  € 8  @  
 
-À 	 l                                                                                                             p5       Ô€              ×5 °   °   ƒ<                €           ªª    E  € 8  @  
+À 	 l                                                                                                             p5       Ô€              Û5 ²   ²   ˆƒ<                �            ªª    E  € 8  @  
 
- 	À l                                                                                                             ç5       Ô€              Pø °   °   ƒ<                �           ªª    E  € 9  @  
+ 	À l                                                                                                             ë5       Ô€              Pø ²   ²   ˆƒ<                             ªª    E  € 9  @  
 
-À 	 l                                                                                                             Àø       Ô€              ù °   °   ƒ<                �           ªª    E  € 9  @  
+À 	 l                                                                                                             Àø       Ô€              ù ²   ²   ˆƒ<                             ªª    E  € 9  @  
 
- 	À l                                                                                                             /ù       Ô€               » °   °   ƒ<                            ªª    E  € :  @  
+ 	À l                                                                                                             /ù       Ô€               » ²   ²   ˆƒ<                °            ªª    E  € :  @  
 
-À 	 l                                                                                                             ¼       Ô€              o¼ °   °   ƒ<                            ªª    E  € :  @  
+À 	 l                                                                                                             ¼       Ô€              o¼ ²   ²   ˆƒ<                °            ªª    E  € :  @  
 
- 	À l                                                                                                             ¼       Ô€              ð~ °   °   ƒ<                °           ªª    E  € ;  @  
+ 	À l                                                                                                             ¼       Ô€              ð~ ²   ²   ˆƒ<                À            ªª    E  € ;  @  
 
-À 	 l                                                                                                             `       Ô€              ¿ °   °   ƒ<                °           ªª    E  € ;  @  
+À 	 l                                                                                                             `       Ô€              ¿ ²   ²   ˆƒ<                À            ªª    E  € ;  @  
 
- 	À l                                                                                                             Ï       Ô€                  °   °   ƒ<                À           ªª    E  € <  @  
+ 	À l                                                                                                             Ï       Ô€                  ²   ²   ˆƒ<                Ð            ªª    E  € <  @  
 
-À 	 l                                                                                                             p         Ô€              Ï   °   °   ƒ<                À           ªª    E  € <  @  
+À 	 l                                                                                                             p         Ô€              Ï   ²   ²   ˆƒ<                Ð            ªª    E  € <  @  
 
- 	À l                                                                                                             ß         Ô€              PÃ  °   °   ƒ<                Ð           ªª    E  € =  @  
+ 	À l                                                                                                             ß         Ô€              PÃ  ²   ²   ˆƒ<                à            ªª    E  € =  @  
 
-À 	 l                                                                                                             ÀÃ        Ô€              Ä  °   °   ƒ<                Ð           ªª    E  € =  @  
+À 	 l                                                                                                             ÀÃ        Ô€              Ä  ²   ²   ˆƒ<                à            ªª    E  € =  @  
 
- 	À l                                                                                                             /Ä        Ô€              “È  A   A   €€  ÿÿÿÿÿÿ          àÓM     è    Œ$0H`lx ùEèrmesh       ºO A   A   €€  ÿÿÿÿÿÿ          àŠšM     è    Œ$0H`lx Mèrmesh        † °   °   ƒ<                ð           ªª    E  € >  @  
+ 	À l                                                                                                             /Ä        Ô€              “È  A   A   €€  ÿÿÿÿÿÿ          ð ÓM     è    Œ$0H`lx ùEèrmesh       ºO A   A   €€  ÿÿÿÿÿÿ          ð ŠšM     è    Œ$0H`lx Mèrmesh        † ²   ²   ˆƒ<                ð            ªª    E  € >  @  
 
-À 	 l                                                                                                             ‡       Ô€              o‡ °   °   ƒ<                ð           ªª    E  € >  @  
+À 	 l                                                                                                             ‡       Ô€              o‡ ²   ²   ˆƒ<                ð            ªª    E  € >  @  
 
- 	À l                                                                                                             ‡       Ô€              ðI °   °   ƒ<                            ªª    E  € ?  @  
+ 	À l                                                                                                             ‡       Ô€              ðI ²   ²   ˆƒ<                             ªª    E  € ?  @  
 
-À 	 l                                                                                                             `J       Ô€              ¿J °   °   ƒ<                            ªª    E  € ?  @  
+À 	 l                                                                                                             `J       Ô€              ¿J ²   ²   ˆƒ<                             ªª    E  € ?  @  
 
- 	À l                                                                                                             ÏJ       Ô€              @ °   °   ƒ<                           ªª    E  € @  @  
+ 	À l                                                                                                             ÏJ       Ô€              @ ²   ²   ˆƒ<                            ªª    E  € @  @  
 
-À 	 l                                                                                                             °       Ô€               °   °   ƒ<                           ªª    E  € @  @  
+À 	 l                                                                                                             °       Ô€               ²   ²   ˆƒ<                            ªª    E  € @  @  
 
- 	À l                                                                                                                    Ô€              �Ð °   °   ƒ<                            ªª    E  € A  @  
+ 	À l                                                                                                                    Ô€              �Ð ²   ²   ˆƒ<                             ªª    E  € A  @  
 
-À 	 l                                                                                                              Ñ       Ô€              _Ñ °   °   ƒ<                            ªª    E  € A  @  
+À 	 l                                                                                                              Ñ       Ô€              _Ñ ²   ²   ˆƒ<                             ªª    E  € A  @  
 
- 	À l                                                                                                             oÑ       Ô€              à“ °   °   ƒ<                0           ªª    E  € B  @  
+ 	À l                                                                                                             oÑ       Ô€              à“ ²   ²   ˆƒ<                0            ªª    E  € B  @  
 
-À 	 l                                                                                                             L”       Ô€              «” °   °   ƒ<                0           ªª    E  € B  @  
+À 	 l                                                                                                             L”       Ô€              «” ²   ²   ˆƒ<                0            ªª    E  € B  @  
 
- 	À l                                                                                                             »”       Ô€              0W °   °   ƒ<                @           ªª    E  € C  @  
+ 	À l                                                                                                             »”       Ô€              0W ²   ²   ˆƒ<                @            ªª    E  € C  @  
 
-À 	 l                                                                                                             œW       Ô€              ÷W °   °   ƒ<                @           ªª    E  € C  @  
+À 	 l                                                                                                             œW       Ô€              ÷W ²   ²   ˆƒ<                @            ªª    E  € C  @  
 
- 	À l                                                                                                             X       Ô€              € °   °   ƒ<                P           ªª    E  € D  @  
+ 	À l                                                                                                             X       Ô€              € ²   ²   ˆƒ<                P            ªª    E  € D  @  
 
-À 	 l                                                                                                             ì       Ô€              G °   °   ƒ<                P           ªª    E  € D  @  
+À 	 l                                                                                                             ì       Ô€              G ²   ²   ˆƒ<                P            ªª    E  € D  @  
 
- 	À l                                                                                                             W       Ô€              ÐÝ °   °   ƒ<                `           ªª    E  € E  @  
+ 	À l                                                                                                             W       Ô€              ÐÝ ²   ²   ˆƒ<                `            ªª    E  € E  @  
 
-À 	 l                                                                                                             <Þ       Ô€              —Þ °   °   ƒ<                `           ªª    E  € E  @  
+À 	 l                                                                                                             <Þ       Ô€              —Þ ²   ²   ˆƒ<                `            ªª    E  € E  @  
 
- 	À l                                                                                                             §Þ       Ô€               ¡ °   °   ƒ<                p           ªª    E  € F  @  
+ 	À l                                                                                                             §Þ       Ô€               ¡ ²   ²   ˆƒ<                p            ªª    E  € F  @  
 
-À 	 l                                                                                                             Œ¡       Ô€              ç¡ °   °   ƒ<                p           ªª    E  € F  @  
+À 	 l                                                                                                             Œ¡       Ô€              ç¡ ²   ²   ˆƒ<                p            ªª    E  € F  @  
 
- 	À l                                                                                                             ÷¡       Ô€              pd °   °   ƒ<                €           ªª    E  € G  @  
+ 	À l                                                                                                             ÷¡       Ô€              pd ²   ²   ˆƒ<                €            ªª    E  € G  @  
 
-À 	 l                                                                                                             Üd       Ô€              7e °   °   ƒ<                €           ªª    E  € G  @  
+À 	 l                                                                                                             Üd       Ô€              7e ²   ²   ˆƒ<                €            ªª    E  € G  @  
 
- 	À l                                                                                                             Ge       Ô€              ³i A   A   €€  ÿÿÿÿÿÿ          �ó´T     è    Œ$0H`lx šMèrmesh       Úð A   A   €€  ÿÿÿÿÿÿ          �ª;U     è    Œ$0H`lx µTèrmesh       À'	 °   °   ƒ<                            ªª    E  € H  @  
+ 	À l                                                                                                             Ge       Ô€              ³i A   A   €€  ÿÿÿÿÿÿ           ó´T     è    Œ$0H`lx šMèrmesh       Úð A   A   €€  ÿÿÿÿÿÿ           ª;U     è    Œ$0H`lx µTèrmesh       À'	 ²   ²   ˆƒ<                �            ªª    E  € H  @  
 
-À 	 l                                                                                                             ,(	       Ô€              ‡(	 °   °   ƒ<                            ªª    E  € H  @  
+À 	 l                                                                                                             ,(	       Ô€              ‡(	 ²   ²   ˆƒ<                �            ªª    E  € H  @  
 
- 	À l                                                                                                             —(	       Ô€              ë	 °   °   ƒ<                °           ªª    E  € I  @  
+ 	À l                                                                                                             —(	       Ô€              ë	 ²   ²   ˆƒ<                             ªª    E  € I  @  
 
-À 	 l                                                                                                             |ë	       Ô€              ×ë	 °   °   ƒ<                °           ªª    E  € I  @  
+À 	 l                                                                                                             |ë	       Ô€              ×ë	 ²   ²   ˆƒ<                             ªª    E  € I  @  
 
  	À l                                                                                                             çë	       Ô€              `®
- °   °   ƒ<                À           ªª    E  € J  @  
+ ²   ²   ˆƒ<                °            ªª    E  € J  @  
 
 À 	 l                                                                                                             Ì®
        Ô€              '¯
- °   °   ƒ<                À           ªª    E  € J  @  
+ ²   ²   ˆƒ<                °            ªª    E  € J  @  
 
  	À l                                                                                                             7¯
-       Ô€              °q °   °   ƒ<                Ð           ªª    E  € K  @  
+       Ô€              °q ²   ²   ˆƒ<                À            ªª    E  € K  @  
 
-À 	 l                                                                                                             r       Ô€              wr °   °   ƒ<                Ð           ªª    E  € K  @  
+À 	 l                                                                                                             r       Ô€              wr ²   ²   ˆƒ<                À            ªª    E  € K  @  
 
- 	À l                                                                                                             ‡r       Ô€               5 °   °   ƒ<                à           ªª    E  € L  @  
+ 	À l                                                                                                             ‡r       Ô€               5 ²   ²   ˆƒ<                Ð            ªª    E  € L  @  
 
-À 	 l                                                                                                             l5       Ô€              Ç5 °   °   ƒ<                à           ªª    E  € L  @  
+À 	 l                                                                                                             l5       Ô€              Ç5 ²   ²   ˆƒ<                Ð            ªª    E  € L  @  
 
- 	À l                                                                                                             ×5       Ô€              Pø °   °   ƒ<                ð           ªª    E  € M  @  
+ 	À l                                                                                                             ×5       Ô€              Pø ²   ²   ˆƒ<                à            ªª    E  € M  @  
 
-À 	 l                                                                                                             ¼ø       Ô€              ù °   °   ƒ<                ð           ªª    E  € M  @  
+À 	 l                                                                                                             ¼ø       Ô€              ù ²   ²   ˆƒ<                à            ªª    E  € M  @  
 
- 	À l                                                                                                             'ù       Ô€               » °   °   ƒ<                            ªª    E  € N  @  
+ 	À l                                                                                                             'ù       Ô€               » ²   ²   ˆƒ<                ð            ªª    E  € N  @  
 
-À 	 l                                                                                                             ¼       Ô€              g¼ °   °   ƒ<                            ªª    E  € N  @  
+À 	 l                                                                                                             ¼       Ô€              g¼ ²   ²   ˆƒ<                ð            ªª    E  € N  @  
 
- 	À l                                                                                                             w¼       Ô€              ð~ °   °   ƒ<                           ªª    E  € O  @  
+ 	À l                                                                                                             w¼       Ô€              ð~ ²   ²   ˆƒ<                             ªª    E  € O  @  
 
-À 	 l                                                                                                             \       Ô€              · °   °   ƒ<                           ªª    E  € O  @  
+À 	 l                                                                                                             \       Ô€              · ²   ²   ˆƒ<                             ªª    E  € O  @  
 
- 	À l                                                                                                             Ç       Ô€                  °   °   ƒ<                            ªª    E  € P  @  
+ 	À l                                                                                                             Ç       Ô€                  ²   ²   ˆƒ<                            ªª    E  € P  @  
 
-À 	 l                                                                                                             l         Ô€              Ç   °   °   ƒ<                            ªª    E  € P  @  
+À 	 l                                                                                                             l         Ô€              Ç   ²   ²   ˆƒ<                            ªª    E  € P  @  
 
- 	À l                                                                                                             ×         Ô€              PÃ  °   °   ƒ<                0           ªª    E  € Q  @  
+ 	À l                                                                                                             ×         Ô€              PÃ  ²   ²   ˆƒ<                             ªª    E  € Q  @  
 
-À 	 l                                                                                                             ¼Ã        Ô€              Ä  °   °   ƒ<                0           ªª    E  € Q  @  
+À 	 l                                                                                                             ¼Ã        Ô€              Ä  ²   ²   ˆƒ<                             ªª    E  € Q  @  
 
- 	À l                                                                                                             'Ä        Ô€              “È  A   A   €€  ÿÿÿÿÿÿ          @V\     è    Œ$0H`lx <Uèrmesh       ºO A   A   €€  ÿÿÿÿÿÿ          @ÊÜ\     è    Œ$0H`lx V\èrmesh        † °   °   ƒ<                P           ªª    E  € R  @  
+ 	À l                                                                                                             'Ä        Ô€              “È  A   A   €€  ÿÿÿÿÿÿ          V\     è    Œ$0H`lx <Uèrmesh       ºO A   A   €€  ÿÿÿÿÿÿ          ÊÜ\     è    Œ$0H`lx V\èrmesh        † ²   ²   ˆƒ<                0            ªª    E  € R  @  
 
-À 	 l                                                                                                             ‡       Ô€              g‡ °   °   ƒ<                P           ªª    E  € R  @  
+À 	 l                                                                                                             ‡       Ô€              g‡ ²   ²   ˆƒ<                0            ªª    E  € R  @  
 
- 	À l                                                                                                             w‡       Ô€              ðI °   °   ƒ<                `           ªª    E  € S  @  
+ 	À l                                                                                                             w‡       Ô€              ðI ²   ²   ˆƒ<                @            ªª    E  € S  @  
 
-À 	 l                                                                                                             \J       Ô€              ·J °   °   ƒ<                `           ªª    E  € S  @  
+À 	 l                                                                                                             \J       Ô€              ·J ²   ²   ˆƒ<                @            ªª    E  € S  @  
 
- 	À l                                                                                                             ÇJ       Ô€              @ °   °   ƒ<                p           ªª    E  € T  @  
+ 	À l                                                                                                             ÇJ       Ô€              @ ²   ²   ˆƒ<                P            ªª    E  € T  @  
 
-À 	 l                                                                                                             ¬       Ô€               °   °   ƒ<                p           ªª    E  € T  @  
+À 	 l                                                                                                             ¬       Ô€               ²   ²   ˆƒ<                P            ªª    E  € T  @  
 
- 	À l                                                                                                                    Ô€              �Ð °   °   ƒ<                €           ªª    E  € U  @  
+ 	À l                                                                                                                    Ô€              �Ð ²   ²   ˆƒ<                `            ªª    E  € U  @  
 
-À 	 l                                                                                                             üÐ       Ô€              WÑ °   °   ƒ<                €           ªª    E  € U  @  
+À 	 l                                                                                                             üÐ       Ô€              WÑ ²   ²   ˆƒ<                `            ªª    E  € U  @  
 
- 	À l                                                                                                             gÑ       Ô€              à“ °   °   ƒ<                �           ªª    E  € V  @  
+ 	À l                                                                                                             gÑ       Ô€              à“ ²   ²   ˆƒ<                p            ªª    E  € V  @  
 
-À 	 l                                                                                                             L”       Ô€              §” °   °   ƒ<                �           ªª    E  € V  @  
+À 	 l                                                                                                             L”       Ô€              §” ²   ²   ˆƒ<                p            ªª    E  € V  @  
 
- 	À l                                                                                                             ·”       Ô€              0W °   °   ƒ<                            ªª    E  € W  @  
+ 	À l                                                                                                             ·”       Ô€              0W ²   ²   ˆƒ<                €            ªª    E  € W  @  
 
-À 	 l                                                                                                             œW       Ô€              ÷W °   °   ƒ<                            ªª    E  € W  @  
+À 	 l                                                                                                             œW       Ô€              ÷W ²   ²   ˆƒ<                €            ªª    E  € W  @  
 
- 	À l                                                                                                             X       Ô€              € °   °   ƒ<                °           ªª    E  € X  @  
+ 	À l                                                                                                             X       Ô€              € ²   ²   ˆƒ<                �            ªª    E  € X  @  
 
-À 	 l                                                                                                             ì       Ô€              G °   °   ƒ<                °           ªª    E  € X  @  
+À 	 l                                                                                                             ì       Ô€              G ²   ²   ˆƒ<                �            ªª    E  € X  @  
 
- 	À l                                                                                                             W       Ô€              ÐÝ °   °   ƒ<                À           ªª    E  € Y  @  
+ 	À l                                                                                                             W       Ô€              ÐÝ ²   ²   ˆƒ<                             ªª    E  € Y  @  
 
-À 	 l                                                                                                             <Þ       Ô€              —Þ °   °   ƒ<                À           ªª    E  € Y  @  
+À 	 l                                                                                                             <Þ       Ô€              —Þ ²   ²   ˆƒ<                             ªª    E  € Y  @  
 
- 	À l                                                                                                             §Þ       Ô€               ¡ °   °   ƒ<                Ð           ªª    E  € Z  @  
+ 	À l                                                                                                             §Þ       Ô€               ¡ ²   ²   ˆƒ<                °            ªª    E  € Z  @  
 
-À 	 l                                                                                                             Œ¡       Ô€              ç¡ °   °   ƒ<                Ð           ªª    E  € Z  @  
+À 	 l                                                                                                             Œ¡       Ô€              ç¡ ²   ²   ˆƒ<                °            ªª    E  € Z  @  
 
- 	À l                                                                                                             ÷¡       Ô€              pd °   °   ƒ<                à           ªª    E  € [  @  
+ 	À l                                                                                                             ÷¡       Ô€              pd ²   ²   ˆƒ<                À            ªª    E  € [  @  
 
-À 	 l                                                                                                             Üd       Ô€              7e °   °   ƒ<                à           ªª    E  € [  @  
+À 	 l                                                                                                             Üd       Ô€              7e ²   ²   ˆƒ<                À            ªª    E  € [  @  
 
- 	À l                                                                                                             Ge       Ô€              ³i A   A   €€  ÿÿÿÿÿÿ          ð3÷c     è    Œ$0H`lx Ý\èrmesh       Úð A   A   €€  ÿÿÿÿÿÿ          ðê}d     è    Œ$0H`lx ÷cèrmesh       À'	 °   °   ƒ<                            ªª    E  € \  @  
+ 	À l                                                                                                             Ge       Ô€              ³i A   A   €€  ÿÿÿÿÿÿ           3÷c     è    Œ$0H`lx Ý\èrmesh       Úð A   A   €€  ÿÿÿÿÿÿ           ê}d     è    Œ$0H`lx ÷cèrmesh       À'	 ²   ²   ˆƒ<                Ð            ªª    E  € \  @  
 
-À 	 l                                                                                                             ,(	       Ô€              ‡(	 °   °   ƒ<                            ªª    E  € \  @  
+À 	 l                                                                                                             ,(	       Ô€              ‡(	 ²   ²   ˆƒ<                Ð            ªª    E  € \  @  
 
- 	À l                                                                                                             —(	       Ô€              ë	 °   °   ƒ<                           ªª    E  € ]  @  
+ 	À l                                                                                                             —(	       Ô€              ë	 ²   ²   ˆƒ<                à            ªª    E  € ]  @  
 
-À 	 l                                                                                                             |ë	       Ô€              ×ë	 °   °   ƒ<                           ªª    E  € ]  @  
+À 	 l                                                                                                             |ë	       Ô€              ×ë	 ²   ²   ˆƒ<                à            ªª    E  € ]  @  
 
  	À l                                                                                                             çë	       Ô€              `®
- °   °   ƒ<                            ªª    E  € ^  @  
+ ²   ²   ˆƒ<                ð            ªª    E  € ^  @  
 
 À 	 l                                                                                                             Ì®
        Ô€              '¯
- °   °   ƒ<                            ªª    E  € ^  @  
+ ²   ²   ˆƒ<                ð            ªª    E  € ^  @  
 
  	À l                                                                                                             7¯
-       Ô€              °q °   °   ƒ<                0           ªª    E  € _  @  
+       Ô€              °q ²   ²   ˆƒ<                             ªª    E  € _  @  
 
-À 	 l                                                                                                             r       Ô€              wr °   °   ƒ<                0           ªª    E  € _  @  
+À 	 l                                                                                                             r       Ô€              wr ²   ²   ˆƒ<                             ªª    E  € _  @  
 
- 	À l                                                                                                             ‡r       Ô€               5 °   °   ƒ<                @           ªª    E  € `  @  
+ 	À l                                                                                                             ‡r       Ô€               5 ²   ²   ˆƒ<                            ªª    E  € `  @  
 
-À 	 l                                                                                                             l5       Ô€              Ç5 °   °   ƒ<                @           ªª    E  € `  @  
+À 	 l                                                                                                             l5       Ô€              Ç5 ²   ²   ˆƒ<                            ªª    E  € `  @  
 
- 	À l                                                                                                             ×5       Ô€              Pø °   °   ƒ<                P           ªª    E  € a  @  
+ 	À l                                                                                                             ×5       Ô€              Pø ²   ²   ˆƒ<                             ªª    E  € a  @  
 
-À 	 l                                                                                                             ¼ø       Ô€              ù °   °   ƒ<                P           ªª    E  € a  @  
+À 	 l                                                                                                             ¼ø       Ô€              ù ²   ²   ˆƒ<                             ªª    E  € a  @  
 
- 	À l                                                                                                             'ù       Ô€               » °   °   ƒ<                `           ªª    E  € b  @  
+ 	À l                                                                                                             'ù       Ô€               » ²   ²   ˆƒ<                0            ªª    E  € b  @  
 
-À 	 l                                                                                                             ¼       Ô€              g¼ °   °   ƒ<                `           ªª    E  € b  @  
+À 	 l                                                                                                             ¼       Ô€              g¼ ²   ²   ˆƒ<                0            ªª    E  € b  @  
 
- 	À l                                                                                                             w¼       Ô€              ð~ °   °   ƒ<                p           ªª    E  € c  @  
+ 	À l                                                                                                             w¼       Ô€              ð~ ²   ²   ˆƒ<                @            ªª    E  € c  @  
 
-À 	 l                                                                                                             \       Ô€              · °   °   ƒ<                p           ªª    E  € c  @  
+À 	 l                                                                                                             \       Ô€              · ²   ²   ˆƒ<                @            ªª    E  € c  @  
 
- 	À l                                                                                                             Ç       Ô€                  °   °   ƒ<                €           ªª    E  € d  @  
+ 	À l                                                                                                             Ç       Ô€                  ²   ²   ˆƒ<                P            ªª    E  € d  @  
 
-À 	 l                                                                                                             l         Ô€              Ç   °   °   ƒ<                €           ªª    E  € d  @  
+À 	 l                                                                                                             l         Ô€              Ç   ²   ²   ˆƒ<                P            ªª    E  € d  @  
 
- 	À l                                                                                                             ×         Ô€              PÃ  °   °   ƒ<                �           ªª    E  € e  @  
+ 	À l                                                                                                             ×         Ô€              PÃ  ²   ²   ˆƒ<                `            ªª    E  € e  @  
 
-À 	 l                                                                                                             ¼Ã        Ô€              Ä  °   °   ƒ<                �           ªª    E  € e  @  
+À 	 l                                                                                                             ¼Ã        Ô€              Ä  ²   ²   ˆƒ<                `            ªª    E  € e  @  
 
- 	À l                                                                                                             'Ä        Ô€              “È  A   A   €€  ÿÿÿÿÿÿ           S˜k     è    Œ$0H`lx ~dèrmesh       ºO A   A   €€  ÿÿÿÿÿÿ           
-l     è    Œ$0H`lx ˜kèrmesh        † °   °   ƒ<                °           ªª    E  € f  @  
+ 	À l                                                                                                             'Ä        Ô€              “È  A   A   €€  ÿÿÿÿÿÿ          0S˜k     è    Œ$0H`lx ~dèrmesh       ºO A   A   €€  ÿÿÿÿÿÿ          0
+l     è    Œ$0H`lx ˜kèrmesh        † ²   ²   ˆƒ<                p            ªª    E  € f  @  
 
-À 	 l                                                                                                             ‡       Ô€              g‡ °   °   ƒ<                °           ªª    E  € f  @  
+À 	 l                                                                                                             ‡       Ô€              g‡ ²   ²   ˆƒ<                p            ªª    E  € f  @  
 
- 	À l                                                                                                             w‡       Ô€              ðI E   E   Ð€  ÿÿÿÿÿÿ          À‚%              ˆ                     ¦J ?   ?   Ð€<                Àƒ           ˆ                     ¶J       Ô€              K °   °   ƒ<                Ð           ªª    E  € g  @  
+ 	À l                                                                                                             w‡       Ô€              ðI E   E   Ð€  ÿÿÿÿÿÿ          @‚%              ˆ                     ¦J ?   ?   Ð€<                @ƒ           ˆ                     ¶J       Ô€              K ²   ²   ˆƒ<                €            ªª    E  € g  @  
 
-À 	 l                                                                                                             yK       Ô€              ÔK °   °   ƒ<                Ð           ªª    E  € g  @  
+À 	 l                                                                                                             yK       Ô€              ÔK ²   ²   ˆƒ<                €            ªª    E  € g  @  
 
- 	À l                                                                                                             äK       Ô€              @ °   °   ƒ<                à           ªª    E  € h  @  
+ 	À l                                                                                                             äK       Ô€              @ ²   ²   ˆƒ<                �            ªª    E  € h  @  
 
-À 	 l                                                                                                             ¬       Ô€               °   °   ƒ<                à           ªª    E  € h  @  
+À 	 l                                                                                                             ¬       Ô€               ²   ²   ˆƒ<                �            ªª    E  € h  @  
 
- 	À l                                                                                                                    Ô€              �Ð °   °   ƒ<                ð           ªª    E  € i  @  
+ 	À l                                                                                                                    Ô€              �Ð ²   ²   ˆƒ<                             ªª    E  € i  @  
 
-À 	 l                                                                                                             üÐ       Ô€              WÑ °   °   ƒ<                ð           ªª    E  € i  @  
+À 	 l                                                                                                             üÐ       Ô€              WÑ ²   ²   ˆƒ<                             ªª    E  € i  @  
 
- 	À l                                                                                                             gÑ       Ô€              à“ °   °   ƒ<                            ªª    E  € j  @  
+ 	À l                                                                                                             gÑ       Ô€              à“ ²   ²   ˆƒ<                °            ªª    E  € j  @  
 
-À 	 l                                                                                                             L”       Ô€              §” °   °   ƒ<                            ªª    E  € j  @  
+À 	 l                                                                                                             L”       Ô€              §” ²   ²   ˆƒ<                °            ªª    E  € j  @  
 
- 	À l                                                                                                             ·”       Ô€              0W °   °   ƒ<                           ªª    E  € k  @  
+ 	À l                                                                                                             ·”       Ô€              0W ²   ²   ˆƒ<                À            ªª    E  € k  @  
 
-À 	 l                                                                                                             œW       Ô€              ÷W °   °   ƒ<                           ªª    E  € k  @  
+À 	 l                                                                                                             œW       Ô€              ÷W ²   ²   ˆƒ<                À            ªª    E  € k  @  
 
- 	À l                                                                                                             X       Ô€              € °   °   ƒ<                            ªª    E  € l  @  
+ 	À l                                                                                                             X       Ô€              € ²   ²   ˆƒ<                Ð            ªª    E  € l  @  
 
-À 	 l                                                                                                             ì       Ô€              G °   °   ƒ<                            ªª    E  € l  @  
+À 	 l                                                                                                             ì       Ô€              G ²   ²   ˆƒ<                Ð            ªª    E  € l  @  
 
- 	À l                                                                                                             W       Ô€              ÐÝ °   °   ƒ<                0           ªª    E  € m  @  
+ 	À l                                                                                                             W       Ô€              ÐÝ ²   ²   ˆƒ<                à            ªª    E  € m  @  
 
-À 	 l                                                                                                             <Þ       Ô€              —Þ °   °   ƒ<                0           ªª    E  € m  @  
+À 	 l                                                                                                             <Þ       Ô€              —Þ ²   ²   ˆƒ<                à            ªª    E  € m  @  
 
- 	À l                                                                                                             §Þ       Ô€               ¡ °   °   ƒ<                @           ªª    E  € n  @  
+ 	À l                                                                                                             §Þ       Ô€               ¡ ²   ²   ˆƒ<                ð            ªª    E  € n  @  
 
-À 	 l                                                                                                             Œ¡       Ô€              ç¡ °   °   ƒ<                @           ªª    E  € n  @  
+À 	 l                                                                                                             Œ¡       Ô€              ç¡ ²   ²   ˆƒ<                ð            ªª    E  € n  @  
 
- 	À l                                                                                                             ÷¡       Ô€              pd °   °   ƒ<                P           ªª    E  € o  @  
+ 	À l                                                                                                             ÷¡       Ô€              pd ²   ²   ˆƒ<                             ªª    E  € o  @  
 
-À 	 l                                                                                                             Üd       Ô€              7e °   °   ƒ<                P           ªª    E  € o  @  
+À 	 l                                                                                                             Üd       Ô€              7e ²   ²   ˆƒ<                             ªª    E  € o  @  
 
- 	À l                                                                                                             Ge       Ô€              ³i A   A   €€  ÿÿÿÿÿÿ          `s9s     è    Œ$0H`lx lèrmesh       Úð A   A   €€  ÿÿÿÿÿÿ          `*Às     è    Œ$0H`lx 9sèrmesh       À'	 °   °   ƒ<                p           ªª    E  € p  @  
+ 	À l                                                                                                             Ge       Ô€              ³i A   A   €€  ÿÿÿÿÿÿ          Ps9s     è    Œ$0H`lx lèrmesh       Úð A   A   €€  ÿÿÿÿÿÿ          P*Às     è    Œ$0H`lx 9sèrmesh       À'	 ²   ²   ˆƒ<                            ªª    E  € p  @  
 
-À 	 l                                                                                                             ,(	       Ô€              ‡(	 °   °   ƒ<                p           ªª    E  € p  @  
+À 	 l                                                                                                             ,(	       Ô€              ‡(	 ²   ²   ˆƒ<                            ªª    E  € p  @  
 
- 	À l                                                                                                             —(	       Ô€              ë	 °   °   ƒ<                €           ªª    E  € q  @  
+ 	À l                                                                                                             —(	       Ô€              ë	 ²   ²   ˆƒ<                             ªª    E  € q  @  
 
-À 	 l                                                                                                             |ë	       Ô€              ×ë	 °   °   ƒ<                €           ªª    E  € q  @  
+À 	 l                                                                                                             |ë	       Ô€              ×ë	 ²   ²   ˆƒ<                             ªª    E  € q  @  
 
  	À l                                                                                                             çë	       Ô€              `®
- °   °   ƒ<                �           ªª    E  € r  @  
+ ²   ²   ˆƒ<                0            ªª    E  € r  @  
 
 À 	 l                                                                                                             Ì®
        Ô€              '¯
- °   °   ƒ<                �           ªª    E  € r  @  
+ ²   ²   ˆƒ<                0            ªª    E  € r  @  
 
  	À l                                                                                                             7¯
-       Ô€              °q °   °   ƒ<                            ªª    E  € s  @  
+       Ô€              °q ²   ²   ˆƒ<                @            ªª    E  € s  @  
 
-À 	 l                                                                                                             r       Ô€              wr °   °   ƒ<                            ªª    E  € s  @  
+À 	 l                                                                                                             r       Ô€              wr ²   ²   ˆƒ<                @            ªª    E  € s  @  
 
- 	À l                                                                                                             ‡r       Ô€               5 °   °   ƒ<                °           ªª    E  € t  @  
+ 	À l                                                                                                             ‡r       Ô€               5 ²   ²   ˆƒ<                P            ªª    E  € t  @  
 
-À 	 l                                                                                                             l5       Ô€              Ç5 °   °   ƒ<                °           ªª    E  € t  @  
+À 	 l                                                                                                             l5       Ô€              Ç5 ²   ²   ˆƒ<                P            ªª    E  € t  @  
 
- 	À l                                                                                                             ×5       Ô€              Pø °   °   ƒ<                À           ªª    E  € u  @  
+ 	À l                                                                                                             ×5       Ô€              Pø ²   ²   ˆƒ<                `            ªª    E  € u  @  
 
-À 	 l                                                                                                             ¼ø       Ô€              ù °   °   ƒ<                À           ªª    E  € u  @  
+À 	 l                                                                                                             ¼ø       Ô€              ù ²   ²   ˆƒ<                `            ªª    E  € u  @  
 
- 	À l                                                                                                             'ù       Ô€               » °   °   ƒ<                Ð           ªª    E  € v  @  
+ 	À l                                                                                                             'ù       Ô€               » ²   ²   ˆƒ<                p            ªª    E  € v  @  
 
-À 	 l                                                                                                             ¼       Ô€              g¼ °   °   ƒ<                Ð           ªª    E  € v  @  
+À 	 l                                                                                                             ¼       Ô€              g¼ ²   ²   ˆƒ<                p            ªª    E  € v  @  
 
- 	À l                                                                                                             w¼       Ô€              ð~ °   °   ƒ<                à           ªª    E  € w  @  
+ 	À l                                                                                                             w¼       Ô€              ð~ ²   ²   ˆƒ<                €            ªª    E  € w  @  
 
-À 	 l                                                                                                             \       Ô€              · °   °   ƒ<                à           ªª    E  € w  @  
+À 	 l                                                                                                             \       Ô€              · ²   ²   ˆƒ<                €            ªª    E  € w  @  
 
- 	À l                                                                                                             Ç       Ô€                  °   °   ƒ<                ð           ªª    E  € x  @  
+ 	À l                                                                                                             Ç       Ô€                  ²   ²   ˆƒ<                �            ªª    E  € x  @  
 
-À 	 l                                                                                                             l         Ô€              Ç   °   °   ƒ<                ð           ªª    E  € x  @  
+À 	 l                                                                                                             l         Ô€              Ç   ²   ²   ˆƒ<                �            ªª    E  € x  @  
 
- 	À l                                                                                                             ×         Ô€              PÃ  °   °   ƒ<                 	           ªª    E  € y  @  
+ 	À l                                                                                                             ×         Ô€              PÃ  ²   ²   ˆƒ<                             ªª    E  € y  @  
 
-À 	 l                                                                                                             ¼Ã        Ô€              Ä  °   °   ƒ<                 	           ªª    E  € y  @  
+À 	 l                                                                                                             ¼Ã        Ô€              Ä  ²   ²   ˆƒ<                             ªª    E  € y  @  
 
- 	À l                                                                                                             'Ä        Ô€              “È  A   A   €€  ÿÿÿÿÿÿ          	“Úz     è    Œ$0H`lx Àsèrmesh       ºO A   A   €€  ÿÿÿÿÿÿ          	Ja{     è    Œ$0H`lx Ûzèrmesh        † °   °   ƒ<                 	           ªª    E  € z  @  
+ 	À l                                                                                                             'Ä        Ô€              “È  A   A   €€  ÿÿÿÿÿÿ          `“Úz     è    Œ$0H`lx Àsèrmesh       ºO A   A   €€  ÿÿÿÿÿÿ          `Ja{     è    Œ$0H`lx Ûzèrmesh        † ²   ²   ˆƒ<                °            ªª    E  € z  @  
 
-À 	 l                                                                                                             ‡       Ô€              g‡ °   °   ƒ<                 	           ªª    E  € z  @  
+À 	 l                                                                                                             ‡       Ô€              g‡ ²   ²   ˆƒ<                °            ªª    E  € z  @  
 
- 	À l                                                                                                             w‡       Ô€              ðI °   °   ƒ<                0	           ªª    E  € {  @  
+ 	À l                                                                                                             w‡       Ô€              ðI ²   ²   ˆƒ<                À            ªª    E  € {  @  
 
-À 	 l                                                                                                             \J       Ô€              ·J °   °   ƒ<                0	           ªª    E  € {  @  
+À 	 l                                                                                                             \J       Ô€              ·J ²   ²   ˆƒ<                À            ªª    E  € {  @  
 
- 	À l                                                                                                             ÇJ       Ô€              @ °   °   ƒ<                @	           ªª    E  € |  @  
+ 	À l                                                                                                             ÇJ       Ô€              @ ²   ²   ˆƒ<                Ð            ªª    E  € |  @  
 
-À 	 l                                                                                                             ¬       Ô€               °   °   ƒ<                @	           ªª    E  € |  @  
+À 	 l                                                                                                             ¬       Ô€               ²   ²   ˆƒ<                Ð            ªª    E  € |  @  
 
- 	À l                                                                                                                    Ô€              �Ð °   °   ƒ<                P	           ªª    E  € }  @  
+ 	À l                                                                                                                    Ô€              �Ð ²   ²   ˆƒ<                à            ªª    E  € }  @  
 
-À 	 l                                                                                                             üÐ       Ô€              WÑ °   °   ƒ<                P	           ªª    E  € }  @  
+À 	 l                                                                                                             üÐ       Ô€              WÑ ²   ²   ˆƒ<                à            ªª    E  € }  @  
 
- 	À l                                                                                                             gÑ       Ô€              à“ °   °   ƒ<                `	           ªª    E  € ~  @  
+ 	À l                                                                                                             gÑ       Ô€              à“ ²   ²   ˆƒ<                ð            ªª    E  € ~  @  
 
-À 	 l                                                                                                             L”       Ô€              §” °   °   ƒ<                `	           ªª    E  € ~  @  
+À 	 l                                                                                                             L”       Ô€              §” ²   ²   ˆƒ<                ð            ªª    E  € ~  @  
 
- 	À l                                                                                                             ·”       Ô€              0W °   °   ƒ<                p	           ªª    E  €   @  
+ 	À l                                                                                                             ·”       Ô€              0W ²   ²   ˆƒ<                             ªª    E  €   @  
 
-À 	 l                                                                                                             œW       Ô€              ÷W °   °   ƒ<                p	           ªª    E  €   @  
+À 	 l                                                                                                             œW       Ô€              ÷W ²   ²   ˆƒ<                             ªª    E  €   @  
 
- 	À l                                                                                                             X       Ô€              € °   °   ƒ<                €	           ªª    E  € €  @  
+ 	À l                                                                                                             X       Ô€              € ²   ²   ˆƒ<                            ªª    E  € €  @  
 
-À 	 l                                                                                                             ì       Ô€              G °   °   ƒ<                €	           ªª    E  € €  @  
+À 	 l                                                                                                             ì       Ô€              G ²   ²   ˆƒ<                            ªª    E  € €  @  
 
- 	À l                                                                                                             W       Ô€              ÐÝ °   °   ƒ<                �	           ªª    E  € �  @  
+ 	À l                                                                                                             W       Ô€              ÐÝ ²   ²   ˆƒ<                             ªª    E  € �  @  
 
-À 	 l                                                                                                             <Þ       Ô€              —Þ °   °   ƒ<                �	           ªª    E  € �  @  
+À 	 l                                                                                                             <Þ       Ô€              —Þ ²   ²   ˆƒ<                             ªª    E  € �  @  
 
- 	À l                                                                                                             §Þ       Ô€               ¡ °   °   ƒ<                 	           ªª    E  € ‚  @  
+ 	À l                                                                                                             §Þ       Ô€               ¡ ²   ²   ˆƒ<                0            ªª    E  € ‚  @  
 
-À 	 l                                                                                                             Œ¡       Ô€              ç¡ °   °   ƒ<                 	           ªª    E  € ‚  @  
+À 	 l                                                                                                             Œ¡       Ô€              ç¡ ²   ²   ˆƒ<                0            ªª    E  € ‚  @  
 
- 	À l                                                                                                             ÷¡       Ô€              pd °   °   ƒ<                °	           ªª    E  € ƒ  @  
+ 	À l                                                                                                             ÷¡       Ô€              pd ²   ²   ˆƒ<                @            ªª    E  € ƒ  @  
 
-À 	 l                                                                                                             Üd       Ô€              7e °   °   ƒ<                °	           ªª    E  € ƒ  @  
+À 	 l                                                                                                             Üd       Ô€              7e ²   ²   ˆƒ<                @            ªª    E  € ƒ  @  
 
- 	À l                                                                                                             Ge       Ô€              ³i A   A   €€  ÿÿÿÿÿÿ          À	³{‚     è    Œ$0H`lx a{èrmesh       Úð A   A   €€  ÿÿÿÿÿÿ          À	jƒ     è    Œ$0H`lx |‚èrmesh       À'	 °   °   ƒ<                Ð	           ªª    E  € „  @  
+ 	À l                                                                                                             Ge       Ô€              ³i A   A   €€  ÿÿÿÿÿÿ          p³{‚     è    Œ$0H`lx a{èrmesh       Úð A   A   €€  ÿÿÿÿÿÿ          pjƒ     è    Œ$0H`lx |‚èrmesh       À'	 ²   ²   ˆƒ<                P            ªª    E  € „  @  
 
-À 	 l                                                                                                             ,(	       Ô€              ‡(	 °   °   ƒ<                Ð	           ªª    E  € „  @  
+À 	 l                                                                                                             ,(	       Ô€              ‡(	 ²   ²   ˆƒ<                P            ªª    E  € „  @  
 
- 	À l                                                                                                             —(	       Ô€              ë	 °   °   ƒ<                à	           ªª    E  € …  @  
+ 	À l                                                                                                             —(	       Ô€              ë	 ²   ²   ˆƒ<                `            ªª    E  € …  @  
 
-À 	 l                                                                                                             |ë	       Ô€              ×ë	 °   °   ƒ<                à	           ªª    E  € …  @  
+À 	 l                                                                                                             |ë	       Ô€              ×ë	 ²   ²   ˆƒ<                `            ªª    E  € …  @  
 
  	À l                                                                                                             çë	       Ô€              `®
- °   °   ƒ<                ð	           ªª    E  € †  @  
+ ²   ²   ˆƒ<                p            ªª    E  € †  @  
 
 À 	 l                                                                                                             Ì®
        Ô€              '¯
- °   °   ƒ<                ð	           ªª    E  € †  @  
+ ²   ²   ˆƒ<                p            ªª    E  € †  @  
 
  	À l                                                                                                             7¯
-       Ô€              °q °   °   ƒ<                 
-           ªª    E  € ‡  @  
+       Ô€              °q ²   ²   ˆƒ<                €            ªª    E  € ‡  @  
 
-À 	 l                                                                                                             r       Ô€              wr °   °   ƒ<                 
-           ªª    E  € ‡  @  
+À 	 l                                                                                                             r       Ô€              wr ²   ²   ˆƒ<                €            ªª    E  € ‡  @  
 
- 	À l                                                                                                             ‡r       Ô€               5 °   °   ƒ<                
-           ªª    E  € ˆ  @  
+ 	À l                                                                                                             ‡r       Ô€               5 ²   ²   ˆƒ<                �            ªª    E  € ˆ  @  
 
-À 	 l                                                                                                             l5       Ô€              Ç5 °   °   ƒ<                
-           ªª    E  € ˆ  @  
+À 	 l                                                                                                             l5       Ô€              Ç5 ²   ²   ˆƒ<                �            ªª    E  € ˆ  @  
 
- 	À l                                                                                                             ×5       Ô€              Pø °   °   ƒ<                 
-           ªª    E  € ‰  @  
+ 	À l                                                                                                             ×5       Ô€              Pø ²   ²   ˆƒ<                             ªª    E  € ‰  @  
 
-À 	 l                                                                                                             ¼ø       Ô€              ù °   °   ƒ<                 
-           ªª    E  € ‰  @  
+À 	 l                                                                                                             ¼ø       Ô€              ù ²   ²   ˆƒ<                             ªª    E  € ‰  @  
 
- 	À l                                                                                                             'ù       Ô€               » °   °   ƒ<                0
-           ªª    E  € Š  @  
+ 	À l                                                                                                             'ù       Ô€               » ²   ²   ˆƒ<                °            ªª    E  € Š  @  
 
-À 	 l                                                                                                             ¼       Ô€              g¼ °   °   ƒ<                0
-           ªª    E  € Š  @  
+À 	 l                                                                                                             ¼       Ô€              g¼ ²   ²   ˆƒ<                °            ªª    E  € Š  @  
 
- 	À l                                                                                                             w¼       Ô€              ð~ °   °   ƒ<                @
-           ªª    E  € ‹  @  
+ 	À l                                                                                                             w¼       Ô€              ð~ ²   ²   ˆƒ<                À            ªª    E  € ‹  @  
 
-À 	 l                                                                                                             \       Ô€              · °   °   ƒ<                @
-           ªª    E  € ‹  @  
+À 	 l                                                                                                             \       Ô€              · ²   ²   ˆƒ<                À            ªª    E  € ‹  @  
 
- 	À l                                                                                                             Ç       Ô€           	       °   °   ƒ<                P
-           ªª    E  € Œ  @  
+ 	À l                                                                                                             Ç       Ô€           	       ²   ²   ˆƒ<                Ð            ªª    E  € Œ  @  
 
-À 	 l                                                                                                          	   l         Ô€           	   Ç   °   °   ƒ<                P
-           ªª    E  € Œ  @  
+À 	 l                                                                                                          	   l         Ô€           	   Ç   ²   ²   ˆƒ<                Ð            ªª    E  € Œ  @  
 
- 	À l                                                                                                          	   ×         Ô€           	   PÃ  °   °   ƒ<                `
-           ªª    E  € �  @  
+ 	À l                                                                                                          	   ×         Ô€           	   PÃ  ²   ²   ˆƒ<                à            ªª    E  € �  @  
 
-À 	 l                                                                                                          	   ¼Ã        Ô€           	   Ä  °   °   ƒ<                `
-           ªª    E  € �  @  
+À 	 l                                                                                                          	   ¼Ã        Ô€           	   Ä  ²   ²   ˆƒ<                à            ªª    E  € �  @  
 
- 	À l                                                                                                          	   'Ä        Ô€           	   “È  A   A   €€  ÿÿÿÿÿÿ          p
-ÓŠ     è    Œ$0H`lx ƒèrmesh    	   ºO A   A   €€  ÿÿÿÿÿÿ          p
-Š£Š     è    Œ$0H`lx Šèrmesh    	    † °   °   ƒ<                €
-           ªª    E  € Ž  @  
+ 	À l                                                                                                          	   'Ä        Ô€           	   “È  A   A   €€  ÿÿÿÿÿÿ          €ÓŠ     è    Œ$0H`lx ƒèrmesh    	   ºO A   A   €€  ÿÿÿÿÿÿ          €Š£Š     è    Œ$0H`lx Šèrmesh    	    † ²   ²   ˆƒ<                ð            ªª    E  € Ž  @  
 
-À 	 l                                                                                                          	   ‡       Ô€           	   g‡ °   °   ƒ<                €
-           ªª    E  € Ž  @  
+À 	 l                                                                                                          	   ‡       Ô€           	   g‡ ²   ²   ˆƒ<                ð            ªª    E  € Ž  @  
 
- 	À l                                                                                                          	   w‡       Ô€           	   ðI °   °   ƒ<                �
-           ªª    E  € �  @  
+ 	À l                                                                                                          	   w‡       Ô€           	   ðI ²   ²   ˆƒ<                 	            ªª    E  € �  @  
 
-À 	 l                                                                                                          	   \J       Ô€           	   ·J °   °   ƒ<                �
-           ªª    E  € �  @  
+À 	 l                                                                                                          	   \J       Ô€           	   ·J ²   ²   ˆƒ<                 	            ªª    E  € �  @  
 
- 	À l                                                                                                          	   ÇJ       Ô€           	   @ °   °   ƒ<                 
-           ªª    E  € �  @  
+ 	À l                                                                                                          	   ÇJ       Ô€           	   @ ²   ²   ˆƒ<                	            ªª    E  € �  @  
 
-À 	 l                                                                                                          	   ¬       Ô€           	    °   °   ƒ<                 
-           ªª    E  € �  @  
+À 	 l                                                                                                          	   ¬       Ô€           	    ²   ²   ˆƒ<                	            ªª    E  € �  @  
 
- 	À l                                                                                                          	          Ô€           	   �Ð °   °   ƒ<                °
-           ªª    E  € ‘  @  
+ 	À l                                                                                                          	          Ô€           	   �Ð ²   ²   ˆƒ<                 	            ªª    E  € ‘  @  
 
-À 	 l                                                                                                          	   üÐ       Ô€           	   WÑ °   °   ƒ<                °
-           ªª    E  € ‘  @  
+À 	 l                                                                                                          	   üÐ       Ô€           	   WÑ ²   ²   ˆƒ<                 	            ªª    E  € ‘  @  
 
- 	À l                                                                                                          	   gÑ       Ô€           	   à“ °   °   ƒ<                À
-           ªª    E  € ’  @  
+ 	À l                                                                                                          	   gÑ       Ô€           	   à“ ²   ²   ˆƒ<                0	            ªª    E  € ’  @  
 
-À 	 l                                                                                                          	   L”       Ô€           	   §” °   °   ƒ<                À
-           ªª    E  € ’  @  
+À 	 l                                                                                                          	   L”       Ô€           	   §” ²   ²   ˆƒ<                0	            ªª    E  € ’  @  
 
- 	À l                                                                                                          	   ·”       Ô€           	   0W °   °   ƒ<                Ð
-           ªª    E  € “  @  
+ 	À l                                                                                                          	   ·”       Ô€           	   0W ²   ²   ˆƒ<                @	            ªª    E  € “  @  
 
-À 	 l                                                                                                          	   œW       Ô€           	   ÷W °   °   ƒ<                Ð
-           ªª    E  € “  @  
+À 	 l                                                                                                          	   œW       Ô€           	   ÷W ²   ²   ˆƒ<                @	            ªª    E  € “  @  
 
- 	À l                                                                                                          	   X       Ô€           	   € °   °   ƒ<                à
-           ªª    E  € ”  @  
+ 	À l                                                                                                          	   X       Ô€           	   € ²   ²   ˆƒ<                P	            ªª    E  € ”  @  
 
-À 	 l                                                                                                          	   ì       Ô€           	   G °   °   ƒ<                à
-           ªª    E  € ”  @  
+À 	 l                                                                                                          	   ì       Ô€           	   G ²   ²   ˆƒ<                P	            ªª    E  € ”  @  
 
- 	À l                                                                                                          	   W       Ô€           	   ÐÝ °   °   ƒ<                ð
-           ªª    E  € •  @  
+ 	À l                                                                                                          	   W       Ô€           	   ÐÝ ²   ²   ˆƒ<                `	            ªª    E  € •  @  
 
-À 	 l                                                                                                          	   <Þ       Ô€           	   —Þ °   °   ƒ<                ð
-           ªª    E  € •  @  
+À 	 l                                                                                                          	   <Þ       Ô€           	   —Þ ²   ²   ˆƒ<                `	            ªª    E  € •  @  
 
- 	À l                                                                                                          	   §Þ       Ô€           	    ¡ °   °   ƒ<                            ªª    E  € –  @  
+ 	À l                                                                                                          	   §Þ       Ô€           	    ¡ ²   ²   ˆƒ<                p	            ªª    E  € –  @  
 
-À 	 l                                                                                                          	   Œ¡       Ô€           	   ç¡ °   °   ƒ<                            ªª    E  € –  @  
+À 	 l                                                                                                          	   Œ¡       Ô€           	   ç¡ ²   ²   ˆƒ<                p	            ªª    E  € –  @  
 
- 	À l                                                                                                          	   ÷¡       Ô€           	   pd °   °   ƒ<                           ªª    E  € —  @  
+ 	À l                                                                                                          	   ÷¡       Ô€           	   pd ²   ²   ˆƒ<                €	            ªª    E  € —  @  
 
-À 	 l                                                                                                          	   Üd       Ô€           	   7e °   °   ƒ<                           ªª    E  € —  @  
+À 	 l                                                                                                          	   Üd       Ô€           	   7e ²   ²   ˆƒ<                €	            ªª    E  € —  @  
 
- 	À l                                                                                                          	   Ge       Ô€           	   ³i A   A   €€  ÿÿÿÿÿÿ           ó½‘     è    Œ$0H`lx £Šèrmesh    	   Úð A   A   €€  ÿÿÿÿÿÿ           ªD’     è    Œ$0H`lx ¾‘èrmesh    	   À'	 °   °   ƒ<                0           ªª    E  € ˜  @  
+ 	À l                                                                                                          	   Ge       Ô€           	   ³i A   A   €€  ÿÿÿÿÿÿ          �ó½‘     è    Œ$0H`lx £Šèrmesh    	   Úð A   A   €€  ÿÿÿÿÿÿ          �ªD’     è    Œ$0H`lx ¾‘èrmesh    	   À'	 ²   ²   ˆƒ<                �	            ªª    E  € ˜  @  
 
-À 	 l                                                                                                          	   ,(	       Ô€           	   ‡(	 °   °   ƒ<                0           ªª    E  € ˜  @  
+À 	 l                                                                                                          	   ,(	       Ô€           	   ‡(	 ²   ²   ˆƒ<                �	            ªª    E  € ˜  @  
 
- 	À l                                                                                                          	   —(	       Ô€           	   ë	 °   °   ƒ<                @           ªª    E  € ™  @  
+ 	À l                                                                                                          	   —(	       Ô€           	   ë	 ²   ²   ˆƒ<                 	            ªª    E  € ™  @  
 
-À 	 l                                                                                                          	   |ë	       Ô€           	   ×ë	 °   °   ƒ<                @           ªª    E  € ™  @  
+À 	 l                                                                                                          	   |ë	       Ô€           	   ×ë	 ²   ²   ˆƒ<                 	            ªª    E  € ™  @  
 
  	À l                                                                                                          	   çë	       Ô€           	   `®
- °   °   ƒ<                P           ªª    E  € š  @  
+ ²   ²   ˆƒ<                °	            ªª    E  € š  @  
 
 À 	 l                                                                                                          	   Ì®
        Ô€           	   '¯
- °   °   ƒ<                P           ªª    E  € š  @  
+ ²   ²   ˆƒ<                °	            ªª    E  € š  @  
 
  	À l                                                                                                          	   7¯
-       Ô€           	   °q °   °   ƒ<                `           ªª    E  € ›  @  
+       Ô€           	   °q ²   ²   ˆƒ<                À	            ªª    E  € ›  @  
 
-À 	 l                                                                                                          	   r       Ô€           	   wr °   °   ƒ<                `           ªª    E  € ›  @  
+À 	 l                                                                                                          	   r       Ô€           	   wr ²   ²   ˆƒ<                À	            ªª    E  € ›  @  
 
- 	À l                                                                                                          	   ‡r       Ô€           	    5 °   °   ƒ<                p           ªª    E  € œ  @  
+ 	À l                                                                                                          	   ‡r       Ô€           	    5 ²   ²   ˆƒ<                Ð	            ªª    E  € œ  @  
 
-À 	 l                                                                                                          	   l5       Ô€           	   Ç5 °   °   ƒ<                p           ªª    E  € œ  @  
+À 	 l                                                                                                          	   l5       Ô€           	   Ç5 ²   ²   ˆƒ<                Ð	            ªª    E  € œ  @  
 
- 	À l                                                                                                          	   ×5       Ô€           	   Pø °   °   ƒ<                €           ªª    E  € �  @  
+ 	À l                                                                                                          	   ×5       Ô€           	   Pø ²   ²   ˆƒ<                à	            ªª    E  € �  @  
 
-À 	 l                                                                                                          	   ¼ø       Ô€           	   ù °   °   ƒ<                €           ªª    E  € �  @  
+À 	 l                                                                                                          	   ¼ø       Ô€           	   ù ²   ²   ˆƒ<                à	            ªª    E  € �  @  
 
- 	À l                                                                                                          	   'ù       Ô€           	    » °   °   ƒ<                �           ªª    E  € ž  @  
+ 	À l                                                                                                          	   'ù       Ô€           	    » ²   ²   ˆƒ<                ð	            ªª    E  € ž  @  
 
-À 	 l                                                                                                          	   ¼       Ô€           	   g¼ °   °   ƒ<                �           ªª    E  € ž  @  
+À 	 l                                                                                                          	   ¼       Ô€           	   g¼ ²   ²   ˆƒ<                ð	            ªª    E  € ž  @  
 
- 	À l                                                                                                          	   w¼       Ô€           	   ð~ °   °   ƒ<                            ªª    E  € Ÿ  @  
+ 	À l                                                                                                          	   w¼       Ô€           	   ð~ ²   ²   ˆƒ<                 
+            ªª    E  € Ÿ  @  
 
-À 	 l                                                                                                          	   \       Ô€           	   · °   °   ƒ<                            ªª    E  € Ÿ  @  
+À 	 l                                                                                                          	   \       Ô€           	   · ²   ²   ˆƒ<                 
+            ªª    E  € Ÿ  @  
 
  	À l                                                                                                          	   Ç       Ô€           
-       °   °   ƒ<                °           ªª    E  €    @  
+       ²   ²   ˆƒ<                
+            ªª    E  €    @  
 
 À 	 l                                                                                                          
-   ¦   °   °   ‹<                °           ªª    E  €    @  
+   ¦   ²   ²   ˆ‹<                
+            ªª    E  €    @  
 
 À 	 l                                                                                                          
-   U  °   °   ‹<                °           ªª    E  €    @  
+   U  ²   ²   ˆ‹<                
+            ªª    E  €    @  
 
 À 	 l                                                                                                          
-     °   °   ‹<                °           ªª    E  €    @  
+     ²   ²   ˆ‹<                
+            ªª    E  €    @  
 
 À 	 l                                                                                                          
-   Æ  °   °   ‹<                °           ªª    E  €    @  
+   Æ  ²   ²   ˆ‹<                
+            ªª    E  €    @  
 
 À 	 l                                                                                                          
-   ~  °   °   ‹<                °           ªª    E  €    @  
+   ‚  ²   ²   ˆ‹<                
+            ªª    E  €    @  
 
 À 	 l                                                                                                          
-   a.  °   °   ‹<                °           ªª    E  €    @  
+   i.  ²   ²   ˆ‹<                
+            ªª    E  €    @  
 
 À 	 l                                                                                                          
-   PÃ  °   °   ƒ<                À           ªª    E  € ¡  @  
+   PÃ  ²   ²   ˆƒ<                 
+            ªª    E  € ¡  @  
 
 À 	 l                                                                                                          
-   Å  °   °   ‹<                À           ªª    E  € ¡  @  
+   Å  ²   ²   ˆ‹<                 
+            ªª    E  € ¡  @  
 
 À 	 l                                                                                                          
-   "Æ  °   °   ‹<                À           ªª    E  € ¡  @  
+   *Æ  ²   ²   ˆ‹<                 
+            ªª    E  € ¡  @  
 
 À 	 l                                                                                                          
-   “È  A   A   €€  ÿÿÿÿÿÿ          Ð_™     è    Œ$0H`lx E’èrmesh    
-   Ë  °   °   ‹<                À           ªª    E  € ¡  @  
+   “È  A   A   €€  ÿÿÿÿÿÿ           _™     è    Œ$0H`lx E’èrmesh    
+   Ë  ²   ²   ˆ‹<                 
+            ªª    E  € ¡  @  
 
 À 	 l                                                                                                          
-   $Í  °   °   ‹<                À           ªª    E  € ¡  @  
+   :Í  ²   ²   ˆ‹<                 
+            ªª    E  € ¡  @  
 
 À 	 l                                                                                                          
-   [Þ  °   °   ‹<                À           ªª    E  € ¡  @  
+   uÞ  ²   ²   ˆ‹<                 
+            ªª    E  € ¡  @  
 
 À 	 l                                                                                                          
-   Kò  °   °   ‹<                À           ªª    E  € ¡  @  
+   iò  ²   ²   ˆ‹<                 
+            ªª    E  € ¡  @  
 
 À 	 l                                                                                                          
-   ló  -   -   Ð€<                àrmeshu  4     
-   cô  -   -   Ðˆ<                àrmeshu  4     
-   Zõ  -   -   Ðˆ<                àrmeshu  4     
-   6ö  -   -   Ðˆ<                àrmeshu  4     
-   $÷  -   -   Ðˆ<                àrmeshu  4     
-   î÷  -   -   Ðˆ<                àrmeshu  4     
-   Üø  -   -   Ðˆ<                àrmeshu  4     
-    † E   E   Ð€  ÿÿÿÿÿÿ          ð‚%              ˆ                   
-    ¦ E   E   Ð€  ÿÿÿÿÿÿ           ‚%              ˆ                   
-   ³a <   <   €€  ÿÿÿÿÿÿ          3ø      è    Œ$0H`lx rmesh    
-     E   E   Ð€  ÿÿÿÿÿÿ           ‚%              ˆ                      “”  <   <   €€  ÿÿÿÿÿÿ          0Sm¨     è    Œ$0H`lx rmesh       ³a <   <   €€  ÿÿÿÿÿÿ          @s:°     è    Œ$0H`lx rmesh       `D E   E   Ð€  ÿÿÿÿÿÿ          P‚%              ˆ                      “è  <   <   €€  ÿÿÿÿÿÿ          `“¸     è    Œ$0H`lx rmesh       ³u <   <   €€  ÿÿÿÿÿÿ          p³�¿     è    Œ$0H`lx rmesh        5 E   E   Ð€  ÿÿÿÿÿÿ          €‚%              ˆ                      À  E   E   Ð€  ÿÿÿÿÿÿ          �‚%           	   ˆ                      “ü  <   <   €€  ÿÿÿÿÿÿ           ÓYÇ     è    Œ$0H`lx rmesh       ³± <   <   €€  ÿÿÿÿÿÿ          °óÏ     è    Œ$0H`lx rmesh       Àr	 E   E   Ð€  ÿÿÿÿÿÿ          À‚%           
-   ˆ                      “ð  <   <   €€  ÿÿÿÿÿÿ          Ð�Ö     è    Œ$0H`lx rmesh       €° E   E   Ð€  ÿÿÿÿÿÿ          à‚%   	           ˆ                      ³u <   <   €€  ÿÿÿÿÿÿ          ð3Þ     è    Œ$0H`lx rmesh    
\ No newline at end of file
+   Žó  -   -   Ð€<                °rmeshu  4     
+   …ô  -   -   Ðˆ<                °rmeshu  4     
+   |õ  -   -   Ðˆ<                °rmeshu  4     
+   Xö  -   -   Ðˆ<                °rmeshu  4     
+   F÷  -   -   Ðˆ<                °rmeshu  4     
+   ø  -   -   Ðˆ<                °rmeshu  4     
+   þø  -   -   Ðˆ<                °rmeshu  4     
+    † E   E   Ð€  ÿÿÿÿÿÿ          À‚%              ˆ                   
+    ¦ E   E   Ð€  ÿÿÿÿÿÿ          Ð‚%              ˆ                   
+   ³a <   <   €€  ÿÿÿÿÿÿ          à3ø      è    Œ$0H`lx rmesh    
+     E   E   Ð€  ÿÿÿÿÿÿ          ð‚%              ˆ                      “”  <   <   €€  ÿÿÿÿÿÿ           Sm¨     è    Œ$0H`lx rmesh       ³a <   <   €€  ÿÿÿÿÿÿ          s:°     è    Œ$0H`lx rmesh       `D E   E   Ð€  ÿÿÿÿÿÿ           ‚%              ˆ                      “è  <   <   €€  ÿÿÿÿÿÿ          0“¸     è    Œ$0H`lx rmesh       ³u <   <   €€  ÿÿÿÿÿÿ          @³�¿     è    Œ$0H`lx rmesh        5 E   E   Ð€  ÿÿÿÿÿÿ          P‚%              ˆ                      À  E   E   Ð€  ÿÿÿÿÿÿ          `‚%           	   ˆ                      “ü  <   <   €€  ÿÿÿÿÿÿ          pÓYÇ     è    Œ$0H`lx rmesh       ³± <   <   €€  ÿÿÿÿÿÿ          €óÏ     è    Œ$0H`lx rmesh       Àr	 E   E   Ð€  ÿÿÿÿÿÿ          �‚%           
+   ˆ                      “ð  <   <   €€  ÿÿÿÿÿÿ           �Ö     è    Œ$0H`lx rmesh       €° E   E   Ð€  ÿÿÿÿÿÿ          °‚%   	           ˆ                      ³u <   <   €€  ÿÿÿÿÿÿ          À3Þ     è    Œ$0H`lx rmesh    
\ No newline at end of file
diff -Naur ns-3.23/src/mesh/test/dot11s/hwmp-target-flags-regression.cc ns-3.24/src/mesh/test/dot11s/hwmp-target-flags-regression.cc
--- ns-3.23/src/mesh/test/dot11s/hwmp-target-flags-regression.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/test/dot11s/hwmp-target-flags-regression.cc	2015-09-15 11:18:44.000000000 -0700
@@ -44,7 +44,10 @@
 
 HwmpDoRfRegressionTest::HwmpDoRfRegressionTest () : TestCase ("HWMP target flags regression test"),
                                                     m_nodes (0),
-                                                    m_time (Seconds (5))
+                                                    m_time (Seconds (5)),
+                                                    m_sentPktsCounterA (0),
+                                                    m_sentPktsCounterB (0),
+                                                    m_sentPktsCounterC (0)
 {
 }
 
@@ -52,6 +55,7 @@
 {
   delete m_nodes;
 }
+
 void
 HwmpDoRfRegressionTest::DoRun ()
 {
@@ -69,6 +73,7 @@
 
   delete m_nodes, m_nodes = 0;
 }
+
 void
 HwmpDoRfRegressionTest::CreateNodes ()
 {
@@ -85,38 +90,45 @@
   mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
   mobility.Install (*m_nodes);
 }
+
 void
 HwmpDoRfRegressionTest::InstallApplications ()
 {
-  UdpEchoServerHelper echoServer (9);
-  ApplicationContainer serverApps = echoServer.Install (m_nodes->Get (0));
-  serverApps.Start (Seconds (0.0));
-  serverApps.Stop (m_time);
-  UdpEchoClientHelper echoClient (m_interfaces.GetAddress (0), 9);
-  echoClient.SetAttribute ("MaxPackets", UintegerValue (300));
-  echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.0)));
-  echoClient.SetAttribute ("PacketSize", UintegerValue (100));
-  //Install first client
-  ApplicationContainer clientApps = echoClient.Install (m_nodes->Get (1));
-  clientApps.Start (Seconds (2.2));
-  clientApps.Stop (m_time);
-  //Install second client
-  clientApps = echoClient.Install (m_nodes->Get (2));
-  clientApps.Start (Seconds (2.0));
-  clientApps.Stop (m_time);
-  //Install second server and attach client to it:
-  UdpEchoServerHelper echoServer1 (10);
-  serverApps = echoServer1.Install (m_nodes->Get (3));
-  serverApps.Start (Seconds (0.0));
-  serverApps.Stop (m_time);
-  UdpEchoClientHelper echoClient1 (m_interfaces.GetAddress (3), 10);
-  echoClient1.SetAttribute ("MaxPackets", UintegerValue (300));
-  echoClient1.SetAttribute ("Interval", TimeValue (Seconds (1.0)));
-  echoClient1.SetAttribute ("PacketSize", UintegerValue (100));
-  clientApps = echoClient1.Install (m_nodes->Get (0));
-  clientApps.Start (Seconds (2.4));
-  clientApps.Stop (m_time);
+  // server socket A
+  m_serverSocketA = Socket::CreateSocket (m_nodes->Get (0), TypeId::LookupByName ("ns3::UdpSocketFactory"));
+  m_serverSocketA->Bind (InetSocketAddress (Ipv4Address::GetAny (), 9));
+  m_serverSocketA->SetRecvCallback (MakeCallback (&HwmpDoRfRegressionTest::HandleReadServer, this));
+
+  // server socket B
+  m_serverSocketB = Socket::CreateSocket (m_nodes->Get (3), TypeId::LookupByName ("ns3::UdpSocketFactory"));
+  m_serverSocketB->Bind (InetSocketAddress (Ipv4Address::GetAny (), 10));
+  m_serverSocketB->SetRecvCallback (MakeCallback (&HwmpDoRfRegressionTest::HandleReadServer, this));
+
+  // client socket A
+  m_clientSocketA = Socket::CreateSocket (m_nodes->Get (1), TypeId::LookupByName ("ns3::UdpSocketFactory"));
+  m_clientSocketA->Bind ();
+  m_clientSocketA->Connect (InetSocketAddress (m_interfaces.GetAddress (0), 9));
+  m_clientSocketA->SetRecvCallback (MakeCallback (&HwmpDoRfRegressionTest::HandleReadClient, this));
+  Simulator::ScheduleWithContext (m_clientSocketA->GetNode ()->GetId (), Seconds (2.2),
+                                  &HwmpDoRfRegressionTest::SendDataA, this, m_clientSocketA);
+
+  // client socket B
+  m_clientSocketB = Socket::CreateSocket (m_nodes->Get (2), TypeId::LookupByName ("ns3::UdpSocketFactory"));
+  m_clientSocketB->Bind ();
+  m_clientSocketB->Connect (InetSocketAddress (m_interfaces.GetAddress (0), 9));
+  m_clientSocketB->SetRecvCallback (MakeCallback (&HwmpDoRfRegressionTest::HandleReadClient, this));
+  Simulator::ScheduleWithContext (m_clientSocketB->GetNode ()->GetId (), Seconds (2.0),
+                                  &HwmpDoRfRegressionTest::SendDataB, this, m_clientSocketB);
+
+  // client socket C
+  m_clientSocketB = Socket::CreateSocket (m_nodes->Get (0), TypeId::LookupByName ("ns3::UdpSocketFactory"));
+  m_clientSocketB->Bind ();
+  m_clientSocketB->Connect (InetSocketAddress (m_interfaces.GetAddress (3), 10));
+  m_clientSocketB->SetRecvCallback (MakeCallback (&HwmpDoRfRegressionTest::HandleReadClient, this));
+  Simulator::ScheduleWithContext (m_clientSocketB->GetNode ()->GetId (), Seconds (2.4),
+                                  &HwmpDoRfRegressionTest::SendDataC, this, m_clientSocketB);
 }
+
 void
 HwmpDoRfRegressionTest::CreateDevices ()
 {
@@ -160,3 +172,62 @@
     }
 }
 
+void
+HwmpDoRfRegressionTest::SendDataA (Ptr<Socket> socket)
+{
+  if ((Simulator::Now () < m_time) && (m_sentPktsCounterA < 300))
+    {
+      socket->Send (Create<Packet> (100));
+      m_sentPktsCounterA ++;
+      Simulator::ScheduleWithContext (socket->GetNode ()->GetId (), Seconds (1.0),
+                                      &HwmpDoRfRegressionTest::SendDataA, this, socket);
+    }
+}
+
+void
+HwmpDoRfRegressionTest::SendDataB (Ptr<Socket> socket)
+{
+  if ((Simulator::Now () < m_time) && (m_sentPktsCounterA < 300))
+    {
+      socket->Send (Create<Packet> (100));
+      m_sentPktsCounterB ++;
+      Simulator::ScheduleWithContext (socket->GetNode ()->GetId (), Seconds (1.0),
+                                      &HwmpDoRfRegressionTest::SendDataB, this, socket);
+    }
+}
+
+void
+HwmpDoRfRegressionTest::SendDataC (Ptr<Socket> socket)
+{
+  if ((Simulator::Now () < m_time) && (m_sentPktsCounterA < 300))
+    {
+      socket->Send (Create<Packet> (100));
+      m_sentPktsCounterC ++;
+      Simulator::ScheduleWithContext (socket->GetNode ()->GetId (), Seconds (1.0),
+                                      &HwmpDoRfRegressionTest::SendDataC, this, socket);
+    }
+}
+
+void
+HwmpDoRfRegressionTest::HandleReadServer (Ptr<Socket> socket)
+{
+  Ptr<Packet> packet;
+  Address from;
+  while ((packet = socket->RecvFrom (from)))
+    {
+      packet->RemoveAllPacketTags ();
+      packet->RemoveAllByteTags ();
+
+      socket->SendTo (packet, 0, from);
+    }
+}
+
+void
+HwmpDoRfRegressionTest::HandleReadClient (Ptr<Socket> socket)
+{
+  Ptr<Packet> packet;
+  Address from;
+  while ((packet = socket->RecvFrom (from)))
+    {
+    }
+}
diff -Naur ns-3.23/src/mesh/test/dot11s/hwmp-target-flags-regression.h ns-3.24/src/mesh/test/dot11s/hwmp-target-flags-regression.h
--- ns-3.23/src/mesh/test/dot11s/hwmp-target-flags-regression.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/test/dot11s/hwmp-target-flags-regression.h	2015-09-15 11:18:44.000000000 -0700
@@ -84,5 +84,59 @@
   void CreateDevices ();
   void InstallApplications ();
   void ResetPosition ();
+
+  /// Server-side socket
+  Ptr<Socket> m_serverSocketA;
+  /// Server-side socket
+  Ptr<Socket> m_serverSocketB;
+  /// Client-side socket
+  Ptr<Socket> m_clientSocketA;
+  /// Client-side socket
+  Ptr<Socket> m_clientSocketB;
+  /// Client-side socket
+  Ptr<Socket> m_clientSocketC;
+
+  // sent packets counter A
+  uint32_t m_sentPktsCounterA;
+  // sent packets counter B
+  uint32_t m_sentPktsCounterB;
+  // sent packets counter C
+  uint32_t m_sentPktsCounterC;
+
+  /**
+   * Send data A
+   * \param socket the sending socket
+   */
+  void SendDataA (Ptr<Socket> socket);
+
+  /**
+   * Send data B
+   * \param socket the sending socket
+   */
+  void SendDataB (Ptr<Socket> socket);
+
+  /**
+   * Send data C
+   * \param socket the sending socket
+   */
+  void SendDataC (Ptr<Socket> socket);
+
+  /**
+   * \brief Handle a packet reception.
+   *
+   * This function is called by lower layers.
+   *
+   * \param socket the socket the packet was received to.
+   */
+  void HandleReadServer (Ptr<Socket> socket);
+
+  /**
+   * \brief Handle a packet reception.
+   *
+   * This function is called by lower layers.
+   *
+   * \param socket the socket the packet was received to.
+   */
+  void HandleReadClient (Ptr<Socket> socket);
 };
 
diff -Naur ns-3.23/src/mesh/test/dot11s/hwmp-target-flags-regression-test-0-1.pcap ns-3.24/src/mesh/test/dot11s/hwmp-target-flags-regression-test-0-1.pcap
--- ns-3.23/src/mesh/test/dot11s/hwmp-target-flags-regression-test-0-1.pcap	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/test/dot11s/hwmp-target-flags-regression-test-0-1.pcap	2015-09-15 11:18:44.000000000 -0700
@@ -1,108 +1,108 @@
 ÔÃ²¡          ÿÿ  i       &—  >   >   Ð€<                    Œ$0H`lrmeshq   9u         )˜        Ô€               ô˜        Ô€               �™  <   <   Ð€<                     Œ$0H`lq  9u          É  A   A   €€  ÿÿÿÿÿÿ            “È      è    Œ$0H`lx – èrmesh        %É  >   >   Ð€<                    Œ$0H`lrmeshq   9u         ÎÉ        Ô€               XÊ  <   <   Ð€<                0    Œ$0H`lq  9u          hÊ        Ô€               >Ë  >   >   Ð€<                @   Œ$0H`lrmeshq  9u         NË        Ô€               œË  <   <   Ð€<                     Œ$0H`lq  9u          @Ì        Ô€               JO A   A   €€  ÿÿÿÿÿÿ            JO     è    Œ$0H`lx É èrmesh        +b F   F   €€  ÿÿÿÿÿÿ          P ³a     è    Œ$0H`lx
  7èOèrmesh        jð A   A   €€  ÿÿÿÿÿÿ          0 jð     è    Œ$0H`lx bèrmesh       Á  F   F   €€  ÿÿÿÿÿÿ          ` Ó     è    Œ$0H`lx
  Øèðèrmesh       JO A   A   €€  ÿÿÿÿÿÿ          @ Š‘     è    Œ$0H`lx èrmesh       +b F   F   €€  ÿÿÿÿÿÿ          p ó£     è    Œ$0H`lx
- zè‘èrmesh       jð A   A   €€  ÿÿÿÿÿÿ          P ª2     è    Œ$0H`lx ¤èrmesh       ³  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ€          ªª           
+ zè‘èrmesh       jð A   A   €€  ÿÿÿÿÿÿ          P ª2     è    Œ$0H`lx ¤èrmesh       ³  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ€           ªª           
 ÿÿÿÿÿÿ
-       Þ  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ`          ªª           
+       Þ  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ`           ªª           
 ÿÿÿÿÿÿ
-       ­  E   E   Ð€  ÿÿÿÿÿÿ          p ‚%              ˆ                      å  E   E   Ð€  ÿÿÿÿÿÿ          � ‚%            ˆ  –                   ¯        Ô€              =  ?   ?   Ð€<                  ƒ         ˆ  –                  M        Ô€              ¤  L   L   ƒ<                €            ªª           
+       ­  E   E   Ð€  ÿÿÿÿÿÿ          p ‚%              ˆ                      å  E   E   Ð€  ÿÿÿÿÿÿ          � ‚%            ˆ  –                   ¯        Ô€              =  ?   ?   Ð€<                  ƒ         ˆ  –                  M        Ô€              ¤  N   N   ˆƒ<                              ªª           
      
-       a        Ô€                L   L   ƒ<                °           ªª           
+       a        Ô€                N   N   ˆƒ<                             ªª           
      
-       á        Ô€              4  °   °   ƒ<                À           ªª    E  €    @  
+       å        Ô€              <  ²   ²   ˆƒ<                             ªª    E  €    @  
 
-À 	 l                                                                                                             D        Ô€              ›  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ�           ªª           
+À 	 l                                                                                                             L        Ô€              £  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ€            ªª           
 ÿÿÿÿÿÿ
-         L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ          ªª           
+         N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ°           ªª           
 ÿÿÿÿÿÿ
-       í        Ô€              Å   L   L   ƒ<                à           ªª           
+       õ        Ô€              Í   N   N   ˆƒ<                            ªª           
      
-       Õ         Ô€              G!  °   °   ƒ<                             ªª    E  €    @  
+       Ý         Ô€              O!  ²   ²   ˆƒ<                             ªª    E  €    @  
 
- 	À l                                                                                                             ˆ"        Ô€              ·#  °   °   ƒ<                ð           ªª    E  €    @  
+ 	À l                                                                                                             ”"        Ô€              Ç#  ²   ²   ˆƒ<                            ªª    E  €    @  
 
- 	À l                                                                                                             Á  F   F   €€  ÿÿÿÿÿÿ           E     è    Œ$0H`lx
- è3èrmesh       JO A   A   €€  ÿÿÿÿÿÿ          ° ÊÓ     è    Œ$0H`lx Eèrmesh       è0 L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ          ªª           
+ 	À l                                                                                                             Á  F   F   €€  ÿÿÿÿÿÿ          À E     è    Œ$0H`lx
+ è3èrmesh       JO A   A   €€  ÿÿÿÿÿÿ          � ÊÓ     è    Œ$0H`lx Eèrmesh       è0 N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ            ªª           
 ÿÿÿÿÿÿ
-       1 L   L   ƒ<                À            ªª           
+       1 N   N   ˆƒ<                              ªª           
      
-       Ï1       Ô€              �2 L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ          ªª           
+       Ï1       Ô€              �2 N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ            ªª           
 ÿÿÿÿÿÿ
-       p4 °   °   ƒ<                            ªª    E  €    @  
+       t4 ²   ²   ˆƒ<                              ªª    E  €    @  
 
-À 	 l                                                                                                             €4       Ô€              X8 L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà           ªª           
+À 	 l                                                                                                             „4       Ô€              \8 N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ°            ªª           
 ÿÿÿÿÿÿ
-       „9 L   L   ƒ<                0           ªª           
+       ˆ9 N   N   ˆƒ<                0             ªª           
      
-       ”9       Ô€              ª: L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ@         ªª           
+       ˜9       Ô€              ®: N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà           ªª           
 ÿÿÿÿÿÿ
-       œ; °   °   ƒ<                ð            ªª    E  €    @  
+        ; ²   ²   ˆƒ<                0             ªª    E  €    @  
 
- 	À l                                                                                                             Ý<       Ô€              g L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ           ªª           
+ 	À l                                                                                                             å<       Ô€              g N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ            ªª           
 ÿÿÿÿÿÿ
-       “ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿP         ªª           
+       “ N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿð           ªª           
 ÿÿÿÿÿÿ
-       O$       Ô€              Ö% E   E   Ð€  ÿÿÿÿÿÿ          `‚%            ˆ  ,                  ø% ?   ?   Ð€<                ƒ           ˆ                      &       Ô€              .' ?   ?   Ð€<                pƒ         ˆ  –                  ê( L   L   ƒ<                €          ªª           
+       O$       Ô€              Ö% E   E   Ð€  ÿÿÿÿÿÿ           ‚%            ˆ  ,                  ø% ?   ?   Ð€<                Ð ƒ           ˆ                      &       Ô€              .' ?   ?   Ð€<                ƒ         ˆ  –                  ê( N   N   ˆƒ<                @            ªª           
      
-       ú(       Ô€              Q) °   °   ƒ<                            ªª    E  €    @  
+       ú(       Ô€              Q) ²   ²   ˆƒ<                @             ªª    E  €    @  
 
 À 
- l                                                                                                             ‘*       Ô€              >, °   °   ƒ<                �          ªª    E  €    @  
+ l                                                                                                             •*       Ô€              F, ²   ²   ˆƒ<                             ªª    E  €    @  
 
 À 
- l                                                                                                             f0 L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ          ªª           
+ l                                                                                                             r0 N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ           ªª           
 ÿÿÿÿÿÿ
-       ‘0 L   L   ƒ<                0           ªª           
+       �0 N   N   ˆƒ<                P             ªª           
      
-       M1       Ô€              2 L   L   ƒ<                °          ªª           
+       Y1       Ô€              2 N   N   ˆƒ<                0            ªª           
      
-       „2 L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ@         ªª           
+       �2 N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà           ªª           
 ÿÿÿÿÿÿ
-       J7       Ô€              y8 °   °   ƒ<                À          ªª    E  €    @  
+       ^7       Ô€              ‘8 ²   ²   ˆƒ<                P            ªª    E  €    @  
 
  
-À l                                                                                                             ‰8       Ô€              +b F   F   €€  ÿÿÿÿÿÿ          Ð3æ&     è    Œ$0H`lx
- ¼&èÔèrmesh       jð A   A   €€  ÿÿÿÿÿÿ          Pêt'     è    Œ$0H`lx æ&èrmesh       @        Ô€              o  °   °   ƒ<                à          ªª    E  €   @  
+À l                                                                                                             ¡8       Ô€              +b F   F   €€  ÿÿÿÿÿÿ          03æ&     è    Œ$0H`lx
+ ¼&èÔèrmesh       jð A   A   €€  ÿÿÿÿÿÿ          ð êt'     è    Œ$0H`lx æ&èrmesh       D        Ô€              w  ²   ²   ˆƒ<                `            ªª    E  €   @  
 
-À 	 l                                                                                                                     Ô€              Ö  °   °   ƒ<                `           ªª    E  €   @  
+À 	 l                                                                                                             ‡        Ô€              Þ  ²   ²   ˆƒ<                `             ªª    E  €   @  
 
- 	À l                                                                                                                     Ô€              Í  °   °   ƒ<                ð          ªª    E  €   @  
+ 	À l                                                                                                             #        Ô€              Ý  ²   ²   ˆƒ<                @            ªª    E  €   @  
 
- 	À l                                                                                                             Á  F   F   €€  ÿÿÿÿÿÿ           S‡.     è    Œ$0H`lx
- ].èu'èrmesh       JO A   A   €€  ÿÿÿÿÿÿ          p
-/     è    Œ$0H`lx ‡.èrmesh       ô °   °   ƒ<                           ªª    E  €   @  
+ 	À l                                                                                                             Á  F   F   €€  ÿÿÿÿÿÿ          @S‡.     è    Œ$0H`lx
+ ].èu'èrmesh       JO A   A   €€  ÿÿÿÿÿÿ           
+/     è    Œ$0H`lx ‡.èrmesh       ø ²   ²   ˆƒ<                p             ªª    E  €   @  
 
-À 	 l                                                                                                                    Ô€              [ °   °   ƒ<                €           ªª    E  €   @  
+À 	 l                                                                                                                    Ô€              _ ²   ²   ˆƒ<                p             ªª    E  €   @  
 
- 	À l                                                                                                             K       Ô€               °   °   ƒ<                �           ªª    E  €   @  
+ 	À l                                                                                                             S       Ô€               ²   ²   ˆƒ<                €             ªª    E  €   @  
 
 À 
- l                                                                                                             p       Ô€              Ÿ °   °   ƒ<                           ªª    E  €   @  
+ l                                                                                                             t       Ô€              § ²   ²   ˆƒ<                P            ªª    E  €   @  
 
 À 
- l                                                                                                             /!       Ô€              V" °   °   ƒ<                0          ªª    E  €   @  
+ l                                                                                                             C!       Ô€              n" ²   ²   ˆƒ<                €            ªª    E  €   @  
 
  
-À l                                                                                                             f"       Ô€              +b F   F   €€  ÿÿÿÿÿÿ          @s(6     è    Œ$0H`lx
- þ5è/èrmesh       jð A   A   €€  ÿÿÿÿÿÿ           *·6     è    Œ$0H`lx (6èrmesh       @        Ô€                °   °   ƒ<                P          ªª    E  €   @  
+À l                                                                                                             ~"       Ô€              +b F   F   €€  ÿÿÿÿÿÿ          Ps(6     è    Œ$0H`lx
+ þ5è/èrmesh       jð A   A   €€  ÿÿÿÿÿÿ          *·6     è    Œ$0H`lx (6èrmesh       D        Ô€              '  ²   ²   ˆƒ<                �            ªª    E  €   @  
 
-À 	 l                                                                                                             /        Ô€              †  °   °   ƒ<                °           ªª    E  €   @  
+À 	 l                                                                                                             7        Ô€              Ž  ²   ²   ˆƒ<                �             ªª    E  €   @  
 
- 	À l                                                                                                             w        Ô€              Ê  °   °   ƒ<                `          ªª    E  €   @  
+ 	À l                                                                                                             ƒ        Ô€              Ú  ²   ²   ˆƒ<                `            ªª    E  €   @  
 
- 	À l                                                                                                             Á  F   F   €€  ÿÿÿÿÿÿ          p“É=     è    Œ$0H`lx
- Ÿ=è·6èrmesh       JO A   A   €€  ÿÿÿÿÿÿ          ÀJX>     è    Œ$0H`lx Ê=èrmesh       ô °   °   ƒ<                €           ªª    E  €   @  
+ 	À l                                                                                                             Á  F   F   €€  ÿÿÿÿÿÿ          `“É=     è    Œ$0H`lx
+ Ÿ=è·6èrmesh       JO A   A   €€  ÿÿÿÿÿÿ           JX>     è    Œ$0H`lx Ê=èrmesh       ø ²   ²   ˆƒ<                              ªª    E  €   @  
 
-À 	 l                                                                                                                    Ô€              [ °   °   ƒ<                Ð           ªª    E  €   @  
+À 	 l                                                                                                                    Ô€              _ ²   ²   ˆƒ<                              ªª    E  €   @  
 
- 	À l                                                                                                             K       Ô€               °   °   ƒ<                à           ªª    E  €   @  
+ 	À l                                                                                                             S       Ô€               ²   ²   ˆƒ<                °             ªª    E  €   @  
 
 À 
- l                                                                                                             p       Ô€              O °   °   ƒ<                �          ªª    E  €   @  
+ l                                                                                                             t       Ô€              W ²   ²   ˆƒ<                p            ªª    E  €   @  
 
 À 
- l                                                                                                             �        Ô€              ¿! °   °   ƒ<                           ªª    E  €   @  
+ l                                                                                                             £        Ô€              ×! ²   ²   ˆƒ<                °            ªª    E  €   @  
 
  
-À l                                                                                                             Ï!       Ô€              +b F   F   €€  ÿÿÿÿÿÿ          °³jE     è    Œ$0H`lx
- @EèX>èrmesh       jð A   A   €€  ÿÿÿÿÿÿ          ðjùE     è    Œ$0H`lx kEèrmesh    
\ No newline at end of file
+À l                                                                                                             ç!       Ô€              +b F   F   €€  ÿÿÿÿÿÿ          p³jE     è    Œ$0H`lx
+ @EèX>èrmesh       jð A   A   €€  ÿÿÿÿÿÿ          0jùE     è    Œ$0H`lx kEèrmesh    
\ No newline at end of file
diff -Naur ns-3.23/src/mesh/test/dot11s/hwmp-target-flags-regression-test-1-1.pcap ns-3.24/src/mesh/test/dot11s/hwmp-target-flags-regression-test-1-1.pcap
--- ns-3.23/src/mesh/test/dot11s/hwmp-target-flags-regression-test-1-1.pcap	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/test/dot11s/hwmp-target-flags-regression-test-1-1.pcap	2015-09-15 11:18:44.000000000 -0700
@@ -4,155 +4,154 @@
  fèbèrmesh       “À  F   F   €€  ÿÿÿÿÿÿ          ` Ó     è    Œ$0H`lx
  Øèðèrmesh       »O A   A   €€  ÿÿÿÿÿÿ          @ Š‘     è    Œ$0H`lx èrmesh       À7 F   F   €€  ÿÿÿÿÿÿ          p ˆy     è    Œ$0H`lx
  èèrmesh       ³a F   F   €€  ÿÿÿÿÿÿ          p ó£     è    Œ$0H`lx
- zè‘èrmesh       Ûð A   A   €€  ÿÿÿÿÿÿ          P ª2     è    Œ$0H`lx ¤èrmesh         L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ€           ªª           
+ zè‘èrmesh       Ûð A   A   €€  ÿÿÿÿÿÿ          P ª2     è    Œ$0H`lx ¤èrmesh         N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ€            ªª           
 ÿÿÿÿÿÿ
-       3  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ€          ªª           
+       3  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ€           ªª           
 ÿÿÿÿÿÿ
-       ^  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ`          ªª           
+       ^  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ`           ªª           
 ÿÿÿÿÿÿ
-       !  E   E   Ð€  ÿÿÿÿÿÿ          p ‚%              ˆ                      p  E   E   Ð€  ÿÿÿÿÿÿ          � ‚%            ˆ  –                   s  ?   ?   Ð€<                � ƒ           ˆ                     ƒ        Ô€              Ñ  ?   ?   Ð€<                  ƒ         ˆ  –                  z        Ô€              %  L   L   ƒ<                €            ªª           
+       !  E   E   Ð€  ÿÿÿÿÿÿ          p ‚%              ˆ                      p  E   E   Ð€  ÿÿÿÿÿÿ          � ‚%            ˆ  –                   s  ?   ?   Ð€<                � ƒ           ˆ                     ƒ        Ô€              Ñ  ?   ?   Ð€<                  ƒ         ˆ  –                  z        Ô€              %  N   N   ˆƒ<                              ªª           
      
-       5        Ô€              Œ  L   L   ƒ<                °           ªª           
+       5        Ô€              Œ  N   N   ˆƒ<                             ªª           
      
-       H        Ô€              ¤  °   °   ƒ<                             ªª    E  €    @  
+       H        Ô€              ¨  ²   ²   ˆƒ<                              ªª    E  €    @  
 
-À 	 l                                                                                                             ´        Ô€              /  °   °   ƒ<                À           ªª    E  €    @  
+À 	 l                                                                                                             ¸        Ô€              3  ²   ²   ˆƒ<                             ªª    E  €    @  
 
-À 	 l                                                                                                             p        Ô€                L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ�           ªª           
+À 	 l                                                                                                             x        Ô€              #  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ€            ªª           
 ÿÿÿÿÿÿ
-       …  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ          ªª           
+       �  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ°           ªª           
 ÿÿÿÿÿÿ
-       ±  L   L   ƒ<                °            ªª           
+       ¹  N   N   ˆƒ<                             ªª           
      
-       Á        Ô€              E   L   L   ƒ<                à           ªª           
+       É        Ô€              M   N   N   ˆƒ<                            ªª           
      
-       !        Ô€              K"  °   °   ƒ<                             ªª    E  €    @  
+       	!        Ô€              W"  ²   ²   ˆƒ<                             ªª    E  €    @  
 
- 	À l                                                                                                             ["        Ô€              ²"  °   °   ƒ<                ð           ªª    E  €    @  
+ 	À l                                                                                                             g"        Ô€              ¾"  ²   ²   ˆƒ<                            ªª    E  €    @  
 
- 	À l                                                                                                             ó#        Ô€              :%  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ          ªª           
+ 	À l                                                                                                             $        Ô€              J%  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ            ªª           
 ÿÿÿÿÿÿ
-        –  F   F   €€  ÿÿÿÿÿÿ          Ð ¨     è    Œ$0H`lx
- ¨è¤èrmesh       “À  F   F   €€  ÿÿÿÿÿÿ           E     è    Œ$0H`lx
- è3èrmesh       »O A   A   €€  ÿÿÿÿÿÿ          ° ÊÓ     è    Œ$0H`lx Eèrmesh       h0 L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ          ªª           
+        –  F   F   €€  ÿÿÿÿÿÿ          ° ¨     è    Œ$0H`lx
+ ©è¤èrmesh       “À  F   F   €€  ÿÿÿÿÿÿ          À E     è    Œ$0H`lx
+ è3èrmesh       »O A   A   €€  ÿÿÿÿÿÿ          � ÊÓ     è    Œ$0H`lx Eèrmesh       h0 N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ            ªª           
 ÿÿÿÿÿÿ
-       “1 L   L   ƒ<                À            ªª           
+       “1 N   N   ˆƒ<                              ªª           
      
-       £1       Ô€              3 L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ          ªª           
+       £1       Ô€              3 N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ            ªª           
 ÿÿÿÿÿÿ
-       l3 °   °   ƒ<                            ªª    E  €    @  
+       l3 ²   ²   ˆƒ<                              ªª    E  €    @  
 
-À 	 l                                                                                                             ¬4       Ô€              Ø8 L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà           ªª           
+À 	 l                                                                                                             °4       Ô€              Ü8 N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ°            ªª           
 ÿÿÿÿÿÿ
-       9 L   L   ƒ<                0           ªª           
+       9 N   N   ˆƒ<                0             ªª           
      
-       À9       Ô€              *: L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ@         ªª           
+       Ä9       Ô€              .: N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà           ªª           
 ÿÿÿÿÿÿ
-       V; L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿð          ªª           
+       Z; N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ           ªª           
 ÿÿÿÿÿÿ
-        < °   °   ƒ<                ð            ªª    E  €    @  
+       ¨< ²   ²   ˆƒ<                0             ªª    E  €    @  
 
- 	À l                                                                                                             °<       Ô€              è L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ           ªª           
+ 	À l                                                                                                             ¸<       Ô€              è N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ            ªª           
 ÿÿÿÿÿÿ
-        L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿP         ªª           
+        N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿð           ªª           
 ÿÿÿÿÿÿ
-       >  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ          ªª           
+       >  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà           ªª           
 ÿÿÿÿÿÿ
-       ;" ?   ?   Ð€<                ƒ             ,                 _#       Ô€              $ L   L   ƒ<                           ªª           
+       ;" ?   ?   Ð€<                ð ƒ             ,                 _#       Ô€              $ N   N   ˆƒ<                             ªª           
      
-       #$       Ô€              % E   E   Ð€  ÿÿÿÿÿÿ          0‚%            ˆ  –                   a% E   E   Ð€  ÿÿÿÿÿÿ          `‚%            ˆ  ,                  d& ?   ?   Ð€<                ƒ           ˆ                     t&       Ô€              Â& ?   ?   Ð€<                pƒ         ˆ  –                  k'       Ô€              ù' ?   ?   Ð€<                @ƒ         ˆ  ,                 i( L   L   ƒ<                €          ªª           
+       #$       Ô€              % E   E   Ð€  ÿÿÿÿÿÿ           ‚%            ˆ  –                   a% E   E   Ð€  ÿÿÿÿÿÿ           ‚%            ˆ  ,                  d& ?   ?   Ð€<                Ð ƒ           ˆ                     t&       Ô€              Â& ?   ?   Ð€<                ƒ         ˆ  –                  k'       Ô€              ù' ?   ?   Ð€<                ƒ         ˆ  ,                 i( N   N   ˆƒ<                @            ªª           
      
-       &)       Ô€              U* °   °   ƒ<                            ªª    E  €    @  
+       &)       Ô€              Y* ²   ²   ˆƒ<                @             ªª    E  €    @  
 
 À 
- l                                                                                                             e*       Ô€              :+ °   °   ƒ<                �          ªª    E  €    @  
+ l                                                                                                             i*       Ô€              >+ ²   ²   ˆƒ<                             ªª    E  €    @  
 
 À 
- l                                                                                                             {,       Ô€              ª- °   °   ƒ<                P          ªª    E  €    @  
+ l                                                                                                             ƒ,       Ô€              ¶- ²   ²   ˆƒ<                             ªª    E  €    @  
 
 À 
- l                                                                                                             º/ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ`         ªª           
+ l                                                                                                             Æ/ N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ           ªª           
 ÿÿÿÿÿÿ
-       å/ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ          ªª           
+       ñ/ N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ           ªª           
 ÿÿÿÿÿÿ
-       1 L   L   ƒ<                0           ªª           
+       1 N   N   ˆƒ<                P             ªª           
      
-       !1       Ô€              “1 L   L   ƒ<                °          ªª           
+       -1       Ô€              Ÿ1 N   N   ˆƒ<                0            ªª           
      
-       P2       Ô€              3 L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ@         ªª           
+       \2       Ô€              3 N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà           ªª           
 ÿÿÿÿÿÿ
-       ï3 L   L   ƒ<                p          ªª           
+       û3 N   N   ˆƒ<                            ªª           
      
-       —5       Ô€              7 °   °   ƒ<                €          ªª    E  €    @  
+       §5       Ô€              "7 ²   ²   ˆƒ<                0            ªª    E  €    @  
 
  
-À l                                                                                                             7       Ô€              u7 °   °   ƒ<                À          ªª    E  €    @  
+À l                                                                                                             27       Ô€              ‰7 ²   ²   ˆƒ<                P            ªª    E  €    @  
 
  
-À l                                                                                                             µ8       Ô€              À7 F   F   €€  ÿÿÿÿÿÿ          �È»&     è    Œ$0H`lx
- J&èEèrmesh       ³a F   F   €€  ÿÿÿÿÿÿ          Ð3æ&     è    Œ$0H`lx
- ¼&èÔèrmesh       Ûð A   A   €€  ÿÿÿÿÿÿ          Pêt'     è    Œ$0H`lx æ&èrmesh         °   °   ƒ<                            ªª    E  €   @  
+À l                                                                                                             Í8       Ô€              À7 F   F   €€  ÿÿÿÿÿÿ          0È»&     è    Œ$0H`lx
+ J&èEèrmesh       ³a F   F   €€  ÿÿÿÿÿÿ          03æ&     è    Œ$0H`lx
+ ¼&èÔèrmesh       Ûð A   A   €€  ÿÿÿÿÿÿ          ð êt'     è    Œ$0H`lx æ&èrmesh         ²   ²   ˆƒ<                @             ªª    E  €   @  
 
-À 	 l                                                                                                                     Ô€              k  °   °   ƒ<                à          ªª    E  €   @  
+À 	 l                                                                                                                     Ô€              o  ²   ²   ˆƒ<                `            ªª    E  €   @  
 
-À 	 l                                                                                                             «        Ô€              Ú  °   °   ƒ<                `           ªª    E  €   @  
+À 	 l                                                                                                             ³        Ô€              æ  ²   ²   ˆƒ<                `             ªª    E  €   @  
 
- 	À l                                                                                                             ê        Ô€              È  °   °   ƒ<                ð          ªª    E  €   @  
+ 	À l                                                                                                             ö        Ô€              Ô  ²   ²   ˆƒ<                @            ªª    E  €   @  
 
- 	À l                                                                                                             	        Ô€               –  F   F   €€  ÿÿÿÿÿÿ          °è\.     è    Œ$0H`lx
- ë-èæ&èrmesh       “À  F   F   €€  ÿÿÿÿÿÿ           S‡.     è    Œ$0H`lx
- ].èu'èrmesh       »O A   A   €€  ÿÿÿÿÿÿ          p
-/     è    Œ$0H`lx ‡.èrmesh       @ °   °   ƒ<                           ªª    E  €   @  
+ 	À l                                                                                                                     Ô€               –  F   F   €€  ÿÿÿÿÿÿ          @è\.     è    Œ$0H`lx
+ ë-èæ&èrmesh       “À  F   F   €€  ÿÿÿÿÿÿ          @S‡.     è    Œ$0H`lx
+ ].èu'èrmesh       »O A   A   €€  ÿÿÿÿÿÿ           
+/     è    Œ$0H`lx ‡.èrmesh       @ ²   ²   ˆƒ<                p             ªª    E  €   @  
 
-À 	 l                                                                                                             0       Ô€               °   °   ƒ<                €           ªª    E  €   @  
+À 	 l                                                                                                             4       Ô€               ²   ²   ˆƒ<                p             ªª    E  €   @  
 
- 	À l                                                                                                                    Ô€              4 °   °   ƒ<                �           ªª    E  €   @  
+ 	À l                                                                                                             '       Ô€              8 ²   ²   ˆƒ<                €             ªª    E  €   @  
 
 À 
- l                                                                                                             D       Ô€              › °   °   ƒ<                           ªª    E  €   @  
+ l                                                                                                             H       Ô€              Ÿ ²   ²   ˆƒ<                P            ªª    E  €   @  
 
 À 
- l                                                                                                             Û       Ô€              
- °   °   ƒ<                À          ªª    E  €   @  
+ l                                                                                                             ã       Ô€               ²   ²   ˆƒ<                             ªª    E  €   @  
 
 À 
- l                                                                                                             ²       Ô€              ó  °   °   ƒ<                Ð          ªª    E  €   @  
+ l                                                                                                             Â       Ô€              ! ²   ²   ˆƒ<                P            ªª    E  €   @  
 
  
-À l                                                                                                             !       Ô€              ¢! °   °   ƒ<                0          ªª    E  €   @  
+À l                                                                                                             !       Ô€              ¶! ²   ²   ˆƒ<                €            ªª    E  €   @  
 
  
-À l                                                                                                             “"       Ô€              À7 F   F   €€  ÿÿÿÿÿÿ          àþ5     è    Œ$0H`lx
- Œ5è‡.èrmesh       ³a F   F   €€  ÿÿÿÿÿÿ          @s(6     è    Œ$0H`lx
- þ5è/èrmesh       Ûð A   A   €€  ÿÿÿÿÿÿ           *·6     è    Œ$0H`lx (6èrmesh         °   °   ƒ<                ð           ªª    E  €   @  
+À l                                                                                                             «"       Ô€              À7 F   F   €€  ÿÿÿÿÿÿ          Pþ5     è    Œ$0H`lx
+ Œ5è‡.èrmesh       ³a F   F   €€  ÿÿÿÿÿÿ          Ps(6     è    Œ$0H`lx
+ þ5è/èrmesh       Ûð A   A   €€  ÿÿÿÿÿÿ          *·6     è    Œ$0H`lx (6èrmesh         ²   ²   ˆƒ<                `             ªª    E  €   @  
 
-À 	 l                                                                                                                     Ô€              k  °   °   ƒ<                P          ªª    E  €   @  
+À 	 l                                                                                                                     Ô€              o  ²   ²   ˆƒ<                �            ªª    E  €   @  
 
-À 	 l                                                                                                             [        Ô€              :  °   °   ƒ<                °           ªª    E  €   @  
+À 	 l                                                                                                             c        Ô€              F  ²   ²   ˆƒ<                �             ªª    E  €   @  
 
- 	À l                                                                                                             J        Ô€              Å  °   °   ƒ<                `          ªª    E  €   @  
+ 	À l                                                                                                             V        Ô€              Ñ  ²   ²   ˆƒ<                `            ªª    E  €   @  
 
- 	À l                                                                                                                     Ô€               –  F   F   €€  ÿÿÿÿÿÿ           (Ÿ=     è    Œ$0H`lx
- -=è(6èrmesh       “À  F   F   €€  ÿÿÿÿÿÿ          p“É=     è    Œ$0H`lx
- Ÿ=è·6èrmesh       »O A   A   €€  ÿÿÿÿÿÿ          ÀJX>     è    Œ$0H`lx Ê=èrmesh       @ °   °   ƒ<                €           ªª    E  €   @  
+ 	À l                                                                                                                     Ô€               –  F   F   €€  ÿÿÿÿÿÿ          `(Ÿ=     è    Œ$0H`lx
+ -=è(6èrmesh       “À  F   F   €€  ÿÿÿÿÿÿ          `“É=     è    Œ$0H`lx
+ Ÿ=è·6èrmesh       »O A   A   €€  ÿÿÿÿÿÿ           JX>     è    Œ$0H`lx Ê=èrmesh       @ ²   ²   ˆƒ<                              ªª    E  €   @  
 
-À 	 l                                                                                                             0       Ô€               °   °   ƒ<                Ð           ªª    E  €   @  
+À 	 l                                                                                                             4       Ô€               ²   ²   ˆƒ<                              ªª    E  €   @  
 
- 	À l                                                                                                                    Ô€              4 °   °   ƒ<                à           ªª    E  €   @  
+ 	À l                                                                                                             '       Ô€              8 ²   ²   ˆƒ<                °             ªª    E  €   @  
 
 À 
- l                                                                                                             D       Ô€              › °   °   ƒ<                �          ªª    E  €   @  
+ l                                                                                                             H       Ô€              Ÿ ²   ²   ˆƒ<                p            ªª    E  €   @  
 
 À 
- l                                                                                                             ‹       Ô€              º °   °   ƒ<                          ªª    E  €   @  
+ l                                                                                                             “       Ô€              Æ ²   ²   ˆƒ<                0            ªª    E  €   @  
 
 À 
- l                                                                                                             b       Ô€              S  °   °   ƒ<                           ªª    E  €   @  
+ l                                                                                                             r       Ô€              g  ²   ²   ˆƒ<                p            ªª    E  €   @  
 
  
-À l                                                                                                             c        Ô€              ! °   °   ƒ<                           ªª    E  €   @  
+À l                                                                                                             w        Ô€              ! ²   ²   ˆƒ<                °            ªª    E  €   @  
 
  
-À l                                                                                                             ü!       Ô€              À7 F   F   €€  ÿÿÿÿÿÿ          0H@E     è    Œ$0H`lx
- ÎDèÊ=èrmesh       ³a F   F   €€  ÿÿÿÿÿÿ          °³jE     è    Œ$0H`lx
- @EèX>èrmesh       Ûð A   A   €€  ÿÿÿÿÿÿ          ðjùE     è    Œ$0H`lx kEèrmesh    
\ No newline at end of file
+À l                                                                                                             "       Ô€              À7 F   F   €€  ÿÿÿÿÿÿ          pH@E     è    Œ$0H`lx
+ ÎDèÊ=èrmesh       ³a F   F   €€  ÿÿÿÿÿÿ          p³jE     è    Œ$0H`lx
+ @EèX>èrmesh       Ûð A   A   €€  ÿÿÿÿÿÿ          0jùE     è    Œ$0H`lx kEèrmesh    
\ No newline at end of file
diff -Naur ns-3.23/src/mesh/test/dot11s/hwmp-target-flags-regression-test-2-1.pcap ns-3.24/src/mesh/test/dot11s/hwmp-target-flags-regression-test-2-1.pcap
--- ns-3.23/src/mesh/test/dot11s/hwmp-target-flags-regression-test-2-1.pcap	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/test/dot11s/hwmp-target-flags-regression-test-2-1.pcap	2015-09-15 11:18:44.000000000 -0700
@@ -4,137 +4,137 @@
  fèbèrmesh       Á  F   F   €€  ÿÿÿÿÿÿ          ` Ó     è    Œ$0H`lx
  Øèðèrmesh       �Å A   A   €€  ÿÿÿÿÿÿ          P m     è    Œ$0H`lx Øèrmesh       H7 F   F   €€  ÿÿÿÿÿÿ          p ˆy     è    Œ$0H`lx
  èèrmesh       +b F   F   €€  ÿÿÿÿÿÿ          p ó£     è    Œ$0H`lx
- zè‘èrmesh       ˆ  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ€           ªª           
+ zè‘èrmesh       ˆ  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ€            ªª           
 ÿÿÿÿÿÿ
-       ³  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ€          ªª           
+       ³  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ€           ªª           
 ÿÿÿÿÿÿ
-       å  E   E   Ð€  ÿÿÿÿÿÿ          � ‚%            ˆ  –                     ?   ?   Ð€<                � ƒ           ˆ                     ¯        Ô€              =  ?   ?   Ð€<                  ƒ         ˆ  –                  a        Ô€                L   L   ƒ<                °           ªª           
+       å  E   E   Ð€  ÿÿÿÿÿÿ          � ‚%            ˆ  –                     ?   ?   Ð€<                � ƒ           ˆ                     ¯        Ô€              =  ?   ?   Ð€<                  ƒ         ˆ  –                  a        Ô€                N   N   ˆƒ<                             ªª           
      
-               Ô€                 °   °   ƒ<                             ªª    E  €    @  
+               Ô€                 ²   ²   ˆƒ<                              ªª    E  €    @  
 
-À 	 l                                                                                                             á        Ô€              4  °   °   ƒ<                À           ªª    E  €    @  
+À 	 l                                                                                                             å        Ô€              <  ²   ²   ˆƒ<                             ªª    E  €    @  
 
-À 	 l                                                                                                               L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ          ªª           
+À 	 l                                                                                                               N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ°           ªª           
 ÿÿÿÿÿÿ
-       0  L   L   ƒ<                °            ªª           
+       8  N   N   ˆƒ<                             ªª           
      
-       í        Ô€              Å   L   L   ƒ<                à           ªª           
+       õ        Ô€              Í   N   N   ˆƒ<                            ªª           
      
-       ˆ"        Ô€              ·#  °   °   ƒ<                ð           ªª    E  €    @  
+       ”"        Ô€              Ç#  ²   ²   ˆƒ<                            ªª    E  €    @  
 
- 	À l                                                                                                             Ç#        Ô€              }$  A   A   €€  ÿÿÿÿÿÿ          p �¨     è    Œ$0H`lx zèrmesh       º$  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ          ªª           
+ 	À l                                                                                                             ×#        Ô€              Œ$  A   A   €€  ÿÿÿÿÿÿ          p �¨     è    Œ$0H`lx zèrmesh       É$  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ            ªª           
 ÿÿÿÿÿÿ
-       æ%  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ€          ªª           
+       õ%  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ€           ªª           
 ÿÿÿÿÿÿ
-       (–  F   F   €€  ÿÿÿÿÿÿ          Ð ¨     è    Œ$0H`lx
- ¨è¤èrmesh       Á  F   F   €€  ÿÿÿÿÿÿ           E     è    Œ$0H`lx
- è3èrmesh       è0 L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ          ªª           
+       (–  F   F   €€  ÿÿÿÿÿÿ          ° ¨     è    Œ$0H`lx
+ ©è¤èrmesh       Á  F   F   €€  ÿÿÿÿÿÿ          À E     è    Œ$0H`lx
+ è3èrmesh       è0 N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ            ªª           
 ÿÿÿÿÿÿ
-       1 L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà          ªª           
+       1 N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ           ªª           
 ÿÿÿÿÿÿ
-       Ï1       Ô€              {2 L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ�          ªª           
+       Ï1       Ô€              {2 N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ�           ªª           
 ÿÿÿÿÿÿ
-       p4 °   °   ƒ<                            ªª    E  €    @  
+       t4 ²   ²   ˆƒ<                              ªª    E  €    @  
 
-À 	 l                                                                                                             „9 L   L   ƒ<                0           ªª           
+À 	 l                                                                                                             ˆ9 N   N   ˆƒ<                0             ªª           
      
-       ª: L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ@         ªª           
+       ®: N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà           ªª           
 ÿÿÿÿÿÿ
-       Õ: L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿð          ªª           
+       Ù: N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ           ªª           
 ÿÿÿÿÿÿ
-       < L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ           ªª           
+       < N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ            ªª           
 ÿÿÿÿÿÿ
-       Ý<       Ô€              “ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿP         ªª           
+       å<       Ô€              “ N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿð           ªª           
 ÿÿÿÿÿÿ
-       ¾ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ          ªª           
+       ¾ N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà           ªª           
 ÿÿÿÿÿÿ
-       ê  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ°          ªª           
+       ê  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ°           ªª           
 ÿÿÿÿÿÿ
-       ­! E   E   Ð€  ÿÿÿÿÿÿ          À ‚%              ˆ                      Ï! ?   ?   Ð€<                ƒ             ,                 w"       Ô€              "# L   L   ƒ<                Ð            ªª           
+       ­! E   E   Ð€  ÿÿÿÿÿÿ          À ‚%              ˆ                      Ï! ?   ?   Ð€<                ð ƒ             ,                 w"       Ô€              "# N   N   ˆƒ<                              ªª           
      
-       2#       Ô€              ’# L   L   ƒ<                           ªª           
+       2#       Ô€              ’# N   N   ˆƒ<                             ªª           
      
-       O$       Ô€              ž$ E   E   Ð€  ÿÿÿÿÿÿ          0‚%            ˆ  –                   Ö% E   E   Ð€  ÿÿÿÿÿÿ          `‚%            ˆ  ,                   &       Ô€              .' ?   ?   Ð€<                pƒ         ˆ  –                  >'       Ô€              Œ' ?   ?   Ð€<                @ƒ         ˆ  ,                 5(       Ô€              ê( L   L   ƒ<                €          ªª           
+       O$       Ô€              ž$ E   E   Ð€  ÿÿÿÿÿÿ           ‚%            ˆ  –                   Ö% E   E   Ð€  ÿÿÿÿÿÿ           ‚%            ˆ  ,                   &       Ô€              .' ?   ?   Ð€<                ƒ         ˆ  –                  >'       Ô€              Œ' ?   ?   Ð€<                ƒ         ˆ  ,                 5(       Ô€              ê( N   N   ˆƒ<                @            ªª           
      
-       ‘*       Ô€              >, °   °   ƒ<                �          ªª    E  €    @  
+       •*       Ô€              F, ²   ²   ˆƒ<                             ªª    E  €    @  
 
 À 
- l                                                                                                             N,       Ô€              ¥, °   °   ƒ<                P          ªª    E  €    @  
+ l                                                                                                             V,       Ô€              ­, ²   ²   ˆƒ<                             ªª    E  €    @  
 
 À 
- l                                                                                                             æ-       Ô€              ‘. L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà           ªª           
+ l                                                                                                             ò-       Ô€              �. N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ            ªª           
 ÿÿÿÿÿÿ
-       :/ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ`         ªª           
+       F/ N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ           ªª           
 ÿÿÿÿÿÿ
-       f0 L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ          ªª           
+       r0 N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ           ªª           
 ÿÿÿÿÿÿ
-       M1       Ô€              2 L   L   ƒ<                °          ªª           
+       Y1       Ô€              2 N   N   ˆƒ<                0            ªª           
      
-       #2       Ô€              o3 L   L   ƒ<                p          ªª           
+       /2       Ô€              {3 N   N   ˆƒ<                            ªª           
      
-       +4       Ô€              Z5 °   °   ƒ<                ð            ªª    E  €    @  
+       74       Ô€              j5 ²   ²   ˆƒ<                             ªª    E  €    @  
 
  
-À l                                                                                                             j5       Ô€              	6 °   °   ƒ<                €          ªª    E  €    @  
+À l                                                                                                             z5       Ô€              6 ²   ²   ˆƒ<                0            ªª    E  €    @  
 
  
-À l                                                                                                             J7       Ô€              y8 °   °   ƒ<                À          ªª    E  €    @  
+À l                                                                                                             ^7       Ô€              ‘8 ²   ²   ˆƒ<                P            ªª    E  €    @  
 
  
-À l                                                                                                             �Å A   A   €€  ÿÿÿÿÿÿ           ­I&     è    Œ$0H`lx èrmesh       H7 F   F   €€  ÿÿÿÿÿÿ          �È»&     è    Œ$0H`lx
- J&èEèrmesh       +b F   F   €€  ÿÿÿÿÿÿ          Ð3æ&     è    Œ$0H`lx
- ¼&èÔèrmesh           °   °   ƒ<                            ªª    E  €   @  
+À l                                                                                                             �Å A   A   €€  ÿÿÿÿÿÿ          à ­I&     è    Œ$0H`lx èrmesh       H7 F   F   €€  ÿÿÿÿÿÿ          0È»&     è    Œ$0H`lx
+ J&èEèrmesh       +b F   F   €€  ÿÿÿÿÿÿ          03æ&     è    Œ$0H`lx
+ ¼&èÔèrmesh           ²   ²   ˆƒ<                @             ªª    E  €   @  
 
-À 	 l                                                                                                             @        Ô€              o  °   °   ƒ<                à          ªª    E  €   @  
+À 	 l                                                                                                             D        Ô€              w  ²   ²   ˆƒ<                `            ªª    E  €   @  
 
-À 	 l                                                                                                                     Ô€              Í  °   °   ƒ<                ð          ªª    E  €   @  
+À 	 l                                                                                                             #        Ô€              Ý  ²   ²   ˆƒ<                @            ªª    E  €   @  
 
- 	À l                                                                                                             Ý        Ô€              }$  A   A   €€  ÿÿÿÿÿÿ          Íê-     è    Œ$0H`lx ¼&èrmesh       (–  F   F   €€  ÿÿÿÿÿÿ          °è\.     è    Œ$0H`lx
- ë-èæ&èrmesh       Á  F   F   €€  ÿÿÿÿÿÿ           S‡.     è    Œ$0H`lx
- ].èu'èrmesh       ô °   °   ƒ<                           ªª    E  €   @  
+ 	À l                                                                                                             í        Ô€              }$  A   A   €€  ÿÿÿÿÿÿ          ð Íê-     è    Œ$0H`lx ¼&èrmesh       (–  F   F   €€  ÿÿÿÿÿÿ          @è\.     è    Œ$0H`lx
+ ë-èæ&èrmesh       Á  F   F   €€  ÿÿÿÿÿÿ          @S‡.     è    Œ$0H`lx
+ ].èu'èrmesh       ø ²   ²   ˆƒ<                p             ªª    E  €   @  
 
-À 	 l                                                                                                             K       Ô€              p       Ô€              Ÿ °   °   ƒ<                           ªª    E  €   @  
+À 	 l                                                                                                             S       Ô€              t       Ô€              § ²   ²   ˆƒ<                P            ªª    E  €   @  
 
 À 
- l                                                                                                             ¯       Ô€               °   °   ƒ<                À          ªª    E  €   @  
+ l                                                                                                             ·       Ô€               ²   ²   ˆƒ<                             ªª    E  €   @  
 
 À 
- l                                                                                                             G       Ô€              v °   °   ƒ<                            ªª    E  €   @  
+ l                                                                                                             S       Ô€              † ²   ²   ˆƒ<                              ªª    E  €   @  
 
  
-À l                                                                                                             †       Ô€              ï °   °   ƒ<                Ð          ªª    E  €   @  
+À l                                                                                                             –       Ô€              ÿ ²   ²   ˆƒ<                P            ªª    E  €   @  
 
  
-À l                                                                                                             /!       Ô€              V" °   °   ƒ<                0          ªª    E  €   @  
+À l                                                                                                             C!       Ô€              n" ²   ²   ˆƒ<                €            ªª    E  €   @  
 
  
-À l                                                                                                             �Å A   A   €€  ÿÿÿÿÿÿ          0í‹5     è    Œ$0H`lx ].èrmesh       H7 F   F   €€  ÿÿÿÿÿÿ          àþ5     è    Œ$0H`lx
- Œ5è‡.èrmesh       +b F   F   €€  ÿÿÿÿÿÿ          @s(6     è    Œ$0H`lx
- þ5è/èrmesh           °   °   ƒ<                ð           ªª    E  €   @  
+À l                                                                                                             �Å A   A   €€  ÿÿÿÿÿÿ           í‹5     è    Œ$0H`lx ].èrmesh       H7 F   F   €€  ÿÿÿÿÿÿ          Pþ5     è    Œ$0H`lx
+ Œ5è‡.èrmesh       +b F   F   €€  ÿÿÿÿÿÿ          Ps(6     è    Œ$0H`lx
+ þ5è/èrmesh           ²   ²   ˆƒ<                `             ªª    E  €   @  
 
-À 	 l                                                                                                             @        Ô€                °   °   ƒ<                P          ªª    E  €   @  
+À 	 l                                                                                                             D        Ô€              '  ²   ²   ˆƒ<                �            ªª    E  €   @  
 
-À 	 l                                                                                                             w        Ô€              Ê  °   °   ƒ<                `          ªª    E  €   @  
+À 	 l                                                                                                             ƒ        Ô€              Ú  ²   ²   ˆƒ<                `            ªª    E  €   @  
 
- 	À l                                                                                                             Ú        Ô€              }$  A   A   €€  ÿÿÿÿÿÿ          @-=     è    Œ$0H`lx þ5èrmesh       (–  F   F   €€  ÿÿÿÿÿÿ           (Ÿ=     è    Œ$0H`lx
- -=è(6èrmesh       Á  F   F   €€  ÿÿÿÿÿÿ          p“É=     è    Œ$0H`lx
- Ÿ=è·6èrmesh       ô °   °   ƒ<                €           ªª    E  €   @  
+ 	À l                                                                                                             ê        Ô€              }$  A   A   €€  ÿÿÿÿÿÿ          -=     è    Œ$0H`lx þ5èrmesh       (–  F   F   €€  ÿÿÿÿÿÿ          `(Ÿ=     è    Œ$0H`lx
+ -=è(6èrmesh       Á  F   F   €€  ÿÿÿÿÿÿ          `“É=     è    Œ$0H`lx
+ Ÿ=è·6èrmesh       ø ²   ²   ˆƒ<                              ªª    E  €   @  
 
-À 	 l                                                                                                             K       Ô€              p       Ô€              O °   °   ƒ<                �          ªª    E  €   @  
+À 	 l                                                                                                             S       Ô€              t       Ô€              W ²   ²   ˆƒ<                p            ªª    E  €   @  
 
 À 
- l                                                                                                             _       Ô€              ¶ °   °   ƒ<                          ªª    E  €   @  
+ l                                                                                                             g       Ô€              ¾ ²   ²   ˆƒ<                0            ªª    E  €   @  
 
 À 
- l                                                                                                             ÷       Ô€              & °   °   ƒ<                P           ªª    E  €   @  
+ l                                                                                                                    Ô€              6 ²   ²   ˆƒ<                0             ªª    E  €   @  
 
  
-À l                                                                                                             6       Ô€              Ÿ °   °   ƒ<                           ªª    E  €   @  
+À l                                                                                                             F       Ô€              ¯ ²   ²   ˆƒ<                p            ªª    E  €   @  
 
  
-À l                                                                                                             �        Ô€              ¿! °   °   ƒ<                           ªª    E  €   @  
+À l                                                                                                             £        Ô€              ×! ²   ²   ˆƒ<                °            ªª    E  €   @  
 
  
-À l                                                                                                             �Å A   A   €€  ÿÿÿÿÿÿ          `-ÎD     è    Œ$0H`lx Ÿ=èrmesh       H7 F   F   €€  ÿÿÿÿÿÿ          0H@E     è    Œ$0H`lx
- ÎDèÊ=èrmesh       +b F   F   €€  ÿÿÿÿÿÿ          °³jE     è    Œ$0H`lx
+À l                                                                                                             �Å A   A   €€  ÿÿÿÿÿÿ           -ÎD     è    Œ$0H`lx Ÿ=èrmesh       H7 F   F   €€  ÿÿÿÿÿÿ          pH@E     è    Œ$0H`lx
+ ÎDèÊ=èrmesh       +b F   F   €€  ÿÿÿÿÿÿ          p³jE     è    Œ$0H`lx
  @EèX>èrmesh    
\ No newline at end of file
diff -Naur ns-3.23/src/mesh/test/dot11s/hwmp-target-flags-regression-test-3-1.pcap ns-3.24/src/mesh/test/dot11s/hwmp-target-flags-regression-test-3-1.pcap
--- ns-3.23/src/mesh/test/dot11s/hwmp-target-flags-regression-test-3-1.pcap	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/test/dot11s/hwmp-target-flags-regression-test-3-1.pcap	2015-09-15 11:18:44.000000000 -0700
@@ -1,76 +1,75 @@
 ÔÃ²¡          ÿÿ  i       $  <   <   €€  ÿÿÿÿÿÿ            $      è    Œ$0H`lx rmesh        %  >   >   Ð€<                    Œ$0H`lrmeshq   9u         %        Ô€               a%  <   <   Ð€<                     Œ$0H`lq   9u          &        Ô€               :&  >   >   Ð€<                    Œ$0H`lrmeshq   9u         ã&        Ô€               v'  <   <   Ð€<                     Œ$0H`lq  9u          †'        Ô€               ˜–  A   A   €€  ÿÿÿÿÿÿ            (–      è    Œ$0H`lx $ èrmesh        c—        Ô€               í—  <   <   Ð€<                0    Œ$0H`lq  9u          ·˜  >   >   Ð€<                @   Œ$0H`lrmeshq  9u         Ì™        Ô€               -Å A   A   €€  ÿÿÿÿÿÿ          0 -Å     è    Œ$0H`lx – èrmesh        À7 F   F   €€  ÿÿÿÿÿÿ          P H7     è    Œ$0H`lx
  ÅèÉ èrmesh       $  A   A   €€  ÿÿÿÿÿÿ          @ Mf     è    Œ$0H`lx 7èrmesh        –  F   F   €€  ÿÿÿÿÿÿ          ` hØ     è    Œ$0H`lx
  fèbèrmesh       -Å A   A   €€  ÿÿÿÿÿÿ          P m     è    Œ$0H`lx Øèrmesh       À7 F   F   €€  ÿÿÿÿÿÿ          p ˆy     è    Œ$0H`lx
- èèrmesh         L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ€           ªª           
+ èèrmesh         N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ€            ªª           
 ÿÿÿÿÿÿ
-       3  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ`          ªª           
+       3  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ`           ªª           
 ÿÿÿÿÿÿ
-       s  ?   ?   Ð€<                � ƒ           ˆ                     H        Ô€              ¤  °   °   ƒ<                             ªª    E  €    @  
+       s  ?   ?   Ð€<                � ƒ           ˆ                     H        Ô€              ¨  ²   ²   ˆƒ<                              ªª    E  €    @  
 
-À 	 l                                                                                                             ±  L   L   ƒ<                °            ªª           
+À 	 l                                                                                                             ¹  N   N   ˆƒ<                             ªª           
      
-       ó#        Ô€              $  A   A   €€  ÿÿÿÿÿÿ          p �¨     è    Œ$0H`lx zèrmesh       :%  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ          ªª           
+       $        Ô€              $  A   A   €€  ÿÿÿÿÿÿ          p �¨     è    Œ$0H`lx zèrmesh       J%  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ            ªª           
 ÿÿÿÿÿÿ
-       e%  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ€          ªª           
+       u%  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ€           ªª           
 ÿÿÿÿÿÿ
-        –  F   F   €€  ÿÿÿÿÿÿ          Ð ¨     è    Œ$0H`lx
- ¨è¤èrmesh       “1 L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà          ªª           
+        –  F   F   €€  ÿÿÿÿÿÿ          ° ¨     è    Œ$0H`lx
+ ©è¤èrmesh       “1 N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ           ªª           
 ÿÿÿÿÿÿ
-       û1 L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ�          ªª           
+       û1 N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ�           ªª           
 ÿÿÿÿÿÿ
-       V; L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿð          ªª           
+       Z; N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ           ªª           
 ÿÿÿÿÿÿ
-       �; L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ           ªª           
+       …; N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ            ªª           
 ÿÿÿÿÿÿ
-       >  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ          ªª           
+       >  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà           ªª           
 ÿÿÿÿÿÿ
-       i  L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ°          ªª           
+       i  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ°           ªª           
 ÿÿÿÿÿÿ
-       8! E   E   Ð€  ÿÿÿÿÿÿ          À ‚%              ˆ                      ;" ?   ?   Ð€<                ƒ             ,                 K"       Ô€              ¢" L   L   ƒ<                Ð            ªª           
+       8! E   E   Ð€  ÿÿÿÿÿÿ          À ‚%              ˆ                      ;" ?   ?   Ð€<                ð ƒ             ,                 K"       Ô€              ¢" N   N   ˆƒ<                              ªª           
      
-       _#       Ô€              $ L   L   ƒ<                           ªª           
+       _#       Ô€              $ N   N   ˆƒ<                             ªª           
      
-       % E   E   Ð€  ÿÿÿÿÿÿ          0‚%            ˆ  –                   k'       Ô€              ù' ?   ?   Ð€<                @ƒ         ˆ  ,                 	(       Ô€              {,       Ô€              ª- °   °   ƒ<                P          ªª    E  €    @  
+       % E   E   Ð€  ÿÿÿÿÿÿ           ‚%            ˆ  –                   k'       Ô€              ù' ?   ?   Ð€<                ƒ         ˆ  ,                 	(       Ô€              ƒ,       Ô€              ¶- ²   ²   ˆƒ<                             ªª    E  €    @  
 
 À 
- l                                                                                                             º-       Ô€              . L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà           ªª           
+ l                                                                                                             Æ-       Ô€              . N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ            ªª           
 ÿÿÿÿÿÿ
-       º/ L   L   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ`         ªª           
+       Æ/ N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ           ªª           
 ÿÿÿÿÿÿ
-       P2       Ô€              ï3 L   L   ƒ<                p          ªª           
+       \2       Ô€              û3 N   N   ˆƒ<                            ªª           
      
-       ÿ3       Ô€              V4 °   °   ƒ<                ð            ªª    E  €    @  
+       4       Ô€              b4 ²   ²   ˆƒ<                             ªª    E  €    @  
 
  
-À l                                                                                                             —5       Ô€              7 °   °   ƒ<                €          ªª    E  €    @  
+À l                                                                                                             §5       Ô€              "7 ²   ²   ˆƒ<                0            ªª    E  €    @  
 
  
-À l                                                                                                             -Å A   A   €€  ÿÿÿÿÿÿ           ­I&     è    Œ$0H`lx èrmesh       À7 F   F   €€  ÿÿÿÿÿÿ          �È»&     è    Œ$0H`lx
- J&èEèrmesh         °   °   ƒ<                            ªª    E  €   @  
+À l                                                                                                             -Å A   A   €€  ÿÿÿÿÿÿ          à ­I&     è    Œ$0H`lx èrmesh       À7 F   F   €€  ÿÿÿÿÿÿ          0È»&     è    Œ$0H`lx
+ J&èEèrmesh         ²   ²   ˆƒ<                @             ªª    E  €   @  
 
-À 	 l                                                                                                             	        Ô€              $  A   A   €€  ÿÿÿÿÿÿ          Íê-     è    Œ$0H`lx ¼&èrmesh        –  F   F   €€  ÿÿÿÿÿÿ          °è\.     è    Œ$0H`lx
- ë-èæ&èrmesh       Û       Ô€              
- °   °   ƒ<                À          ªª    E  €   @  
+À 	 l                                                                                                                     Ô€              $  A   A   €€  ÿÿÿÿÿÿ          ð Íê-     è    Œ$0H`lx ¼&èrmesh        –  F   F   €€  ÿÿÿÿÿÿ          @è\.     è    Œ$0H`lx
+ ë-èæ&èrmesh       ã       Ô€               ²   ²   ˆƒ<                             ªª    E  €   @  
 
 À 
- l                                                                                                                    Ô€              q °   °   ƒ<                            ªª    E  €   @  
+ l                                                                                                             &       Ô€              } ²   ²   ˆƒ<                              ªª    E  €   @  
 
  
-À l                                                                                                             ²       Ô€              ó  °   °   ƒ<                Ð          ªª    E  €   @  
+À l                                                                                                             Â       Ô€              ! ²   ²   ˆƒ<                P            ªª    E  €   @  
 
  
-À l                                                                                                             -Å A   A   €€  ÿÿÿÿÿÿ          0í‹5     è    Œ$0H`lx ].èrmesh       À7 F   F   €€  ÿÿÿÿÿÿ          àþ5     è    Œ$0H`lx
- Œ5è‡.èrmesh         °   °   ƒ<                ð           ªª    E  €   @  
+À l                                                                                                             -Å A   A   €€  ÿÿÿÿÿÿ           í‹5     è    Œ$0H`lx ].èrmesh       À7 F   F   €€  ÿÿÿÿÿÿ          Pþ5     è    Œ$0H`lx
+ Œ5è‡.èrmesh         ²   ²   ˆƒ<                `             ªª    E  €   @  
 
-À 	 l                                                                                                                     Ô€              $  A   A   €€  ÿÿÿÿÿÿ          @-=     è    Œ$0H`lx þ5èrmesh        –  F   F   €€  ÿÿÿÿÿÿ           (Ÿ=     è    Œ$0H`lx
- -=è(6èrmesh       ‹       Ô€              º °   °   ƒ<                          ªª    E  €   @  
+À 	 l                                                                                                                     Ô€              $  A   A   €€  ÿÿÿÿÿÿ          -=     è    Œ$0H`lx þ5èrmesh        –  F   F   €€  ÿÿÿÿÿÿ          `(Ÿ=     è    Œ$0H`lx
+ -=è(6èrmesh       “       Ô€              Æ ²   ²   ˆƒ<                0            ªª    E  €   @  
 
 À 
- l                                                                                                             Ê       Ô€              ! °   °   ƒ<                P           ªª    E  €   @  
+ l                                                                                                             Ö       Ô€              - ²   ²   ˆƒ<                0             ªª    E  €   @  
 
  
-À l                                                                                                             b       Ô€              S  °   °   ƒ<                           ªª    E  €   @  
+À l                                                                                                             r       Ô€              g  ²   ²   ˆƒ<                p            ªª    E  €   @  
 
  
-À l                                                                                                             -Å A   A   €€  ÿÿÿÿÿÿ          `-ÎD     è    Œ$0H`lx Ÿ=èrmesh       À7 F   F   €€  ÿÿÿÿÿÿ          0H@E     è    Œ$0H`lx
+À l                                                                                                             -Å A   A   €€  ÿÿÿÿÿÿ           -ÎD     è    Œ$0H`lx Ÿ=èrmesh       À7 F   F   €€  ÿÿÿÿÿÿ          pH@E     è    Œ$0H`lx
  ÎDèÊ=èrmesh    
\ No newline at end of file
diff -Naur ns-3.23/src/mesh/test/flame/flame-regression.cc ns-3.24/src/mesh/test/flame/flame-regression.cc
--- ns-3.23/src/mesh/test/flame/flame-regression.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/test/flame/flame-regression.cc	2015-09-15 11:18:44.000000000 -0700
@@ -30,7 +30,6 @@
 #include "ns3/ipv4-address-helper.h"
 #include "ns3/abort.h"
 #include "ns3/pcap-test.h"
-#include "ns3/udp-echo-helper.h"
 #include "ns3/mobility-model.h"
 #include <sstream>
 
@@ -44,7 +43,8 @@
 
 FlameRegressionTest::FlameRegressionTest () : TestCase ("FLAME regression test"),
                                               m_nodes (0),
-                                              m_time (Seconds (10))
+                                              m_time (Seconds (10)),
+                                              m_sentPktsCounter (0)
 {
 }
 
@@ -125,17 +125,18 @@
 void
 FlameRegressionTest::InstallApplications ()
 {
-  UdpEchoServerHelper echoServer (9);
-  ApplicationContainer serverApps = echoServer.Install (m_nodes->Get (0));
-  serverApps.Start (Seconds (0.0));
-  serverApps.Stop (m_time);
-  UdpEchoClientHelper echoClient (m_interfaces.GetAddress (0), 9);
-  echoClient.SetAttribute ("MaxPackets", UintegerValue (300));
-  echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.1)));
-  echoClient.SetAttribute ("PacketSize", UintegerValue (20));
-  ApplicationContainer clientApps = echoClient.Install (m_nodes->Get (2));
-  clientApps.Start (Seconds (1.0));
-  clientApps.Stop (m_time);
+  // client socket
+  m_clientSocket = Socket::CreateSocket (m_nodes->Get (2), TypeId::LookupByName ("ns3::UdpSocketFactory"));
+  m_clientSocket->Bind ();
+  m_clientSocket->Connect (InetSocketAddress (m_interfaces.GetAddress (0), 9));
+  m_clientSocket->SetRecvCallback (MakeCallback (&FlameRegressionTest::HandleReadClient, this));
+  Simulator::ScheduleWithContext (m_clientSocket->GetNode ()->GetId (), Seconds (1.0),
+                                  &FlameRegressionTest::SendData, this, m_clientSocket);
+
+  // server socket
+  m_serverSocket = Socket::CreateSocket (m_nodes->Get (0), TypeId::LookupByName ("ns3::UdpSocketFactory"));
+  m_serverSocket->Bind (InetSocketAddress (Ipv4Address::GetAny (), 9));
+  m_serverSocket->SetRecvCallback (MakeCallback (&FlameRegressionTest::HandleReadServer, this));
 }
 
 void
@@ -147,3 +148,38 @@
     }
 }
 
+void
+FlameRegressionTest::SendData (Ptr<Socket> socket)
+{
+  if ((Simulator::Now () < m_time) && (m_sentPktsCounter < 300))
+    {
+      socket->Send (Create<Packet> (20));
+      m_sentPktsCounter ++;
+      Simulator::ScheduleWithContext (socket->GetNode ()->GetId (), Seconds (1.1),
+                                      &FlameRegressionTest::SendData, this, socket);
+    }
+}
+
+void
+FlameRegressionTest::HandleReadServer (Ptr<Socket> socket)
+{
+  Ptr<Packet> packet;
+  Address from;
+  while ((packet = socket->RecvFrom (from)))
+    {
+      packet->RemoveAllPacketTags ();
+      packet->RemoveAllByteTags ();
+
+      socket->SendTo (packet, 0, from);
+    }
+}
+
+void
+FlameRegressionTest::HandleReadClient (Ptr<Socket> socket)
+{
+  Ptr<Packet> packet;
+  Address from;
+  while ((packet = socket->RecvFrom (from)))
+    {
+    }
+}
diff -Naur ns-3.23/src/mesh/test/flame/flame-regression.h ns-3.24/src/mesh/test/flame/flame-regression.h
--- ns-3.23/src/mesh/test/flame/flame-regression.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/test/flame/flame-regression.h	2015-09-15 11:18:44.000000000 -0700
@@ -73,5 +73,37 @@
   void CreateNodes ();
   void CreateDevices ();
   void InstallApplications ();
+
+  /// Server-side socket
+  Ptr<Socket> m_serverSocket;
+  /// Client-side socket
+  Ptr<Socket> m_clientSocket;
+
+  // sent packets counter
+  uint32_t m_sentPktsCounter;
+
+  /**
+   * Send data
+   * \param socket the sending socket
+   */
+  void SendData (Ptr<Socket> socket);
+
+  /**
+   * \brief Handle a packet reception.
+   *
+   * This function is called by lower layers.
+   *
+   * \param socket the socket the packet was received to.
+   */
+  void HandleReadServer (Ptr<Socket> socket);
+
+  /**
+   * \brief Handle a packet reception.
+   *
+   * This function is called by lower layers.
+   *
+   * \param socket the socket the packet was received to.
+   */
+  void HandleReadClient (Ptr<Socket> socket);
 };
 
diff -Naur ns-3.23/src/mesh/test/flame/flame-regression-test-0-1.pcap ns-3.24/src/mesh/test/flame/flame-regression-test-0-1.pcap
--- ns-3.23/src/mesh/test/flame/flame-regression-test-0-1.pcap	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/test/flame/flame-regression-test-0-1.pcap	2015-09-15 11:18:44.000000000 -0700
@@ -1,83 +1,79 @@
-ÔÃ²¡          ÿÿ  i      t$  X   X   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ       ªª   @@  ÿÿÿÿÿÿ             
+ÔÃ²¡          ÿÿ  i      t$  Z   Z   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ         ªª   @@  ÿÿÿÿÿÿ             
 ÿÿÿÿÿÿ
-       Ÿ$  X   X   ƒ<                       ªª   @@                     
+       Ÿ$  Z   Z   ˆƒ<                         ªª   @@                     
      
-       l%        Ô€              B&  X   X   ƒ<                      ªª   @@                    
+       l%        Ô€              B&  Z   Z   ˆƒ<                         ªª   @@                    
      
-       è&  X   X   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ      ªª   @@  ÿÿÿÿÿÿ             
+       è&  Z   Z   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ         ªª   @@  ÿÿÿÿÿÿ             
 ÿÿÿÿÿÿ
-       º)        Ô€              �*  l   l   ƒ<                       ªª   @@             E  0    @  
+       Â)        Ô€              ™*  n   n   ˆƒ<                         ªª   @@             E  0    @  
 
-À 	                              �*        Ô€              ô*  <   <   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ       ªª   @@   ÿÿÿÿÿÿ              A,  <   <   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ0      ªª   @@  ÿÿÿÿÿÿ              µM  X   X   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ0      ªª   @@   ÿÿÿÿÿÿ             
+À 	                              ©*        Ô€               +  >   >   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ        ªª   @@   ÿÿÿÿÿÿ              U,  >   >   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ        ªª   @@  ÿÿÿÿÿÿ              ÁM  Z   Z   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ         ªª   @@   ÿÿÿÿÿÿ             
 ÿÿÿÿÿÿ
-       O  X   X   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ@      ªª   @@  ÿÿÿÿÿÿ             
+       O  Z   Z   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ         ªª   @@  ÿÿÿÿÿÿ             
 ÿÿÿÿÿÿ
-       ùO        Ô€              åQ  X   X   ƒ<                P      ªª   @@                    
+       P        Ô€              ñQ  Z   Z   ˆƒ<                        ªª   @@                    
      
-       õQ        Ô€              LR  l   l   ƒ<                @      ªª   @@              E  0    @  
+       R        Ô€              XR  n   n   ˆƒ<                        ªª   @@              E  0    @  
 
- 	À                              1S        Ô€              (T  l   l   ƒ<                `      ªª   @@             E  0    @  
+ 	À                              AS        Ô€              <T  n   n   ˆƒ<                        ªª   @@             E  0    @  
 
- 	À                              …‡       Ô€              Xˆ l   l   ƒ<                p      ªª   @@             E  0   @  
+ 	À                              ‰‡       Ô€              `ˆ n   n   ˆƒ<                         ªª   @@             E  0   @  
 
-À 	                              hˆ       Ô€              ¿ˆ l   l   ƒ<                P      ªª   @@              E  0   @  
+À 	                              pˆ       Ô€              Çˆ n   n   ˆƒ<                         ªª   @@              E  0   @  
 
- 	À                              ¤‰       Ô€              ›Š l   l   ƒ<                €      ªª   @@             E  0   @  
+ 	À                              °‰       Ô€              «Š n   n   ˆƒ<                         ªª   @@             E  0   @  
 
- 	À                              %       Ô€              ø l   l   ƒ<                �      ªª   @@             E  0   @  
+ 	À                              )       Ô€                n   n   ˆƒ<                0        ªª   @@             E  0   @  
 
-À 	                                     Ô€              _ l   l   ƒ<                `      ªª   @@              E  0   @  
+À 	                                     Ô€              g n   n   ˆƒ<                0        ªª   @@              E  0   @  
 
- 	À                              D       Ô€               l   l   ƒ<                       ªª   @@             E  0   @  
+ 	À                              P       Ô€              ' n   n   ˆƒ<                0        ªª   @@             E  0   @  
 
- 	À                              Å”       Ô€              ˜• l   l   ƒ<                °      ªª   @@             E  0   @  
+ 	À                              É”       Ô€               • n   n   ˆƒ<                @        ªª   @@             E  0   @  
 
-À 	                              ¨•       Ô€              ÿ• l   l   ƒ<                p      ªª   @@              E  0   @  
+À 	                              °•       Ô€              – n   n   ˆƒ<                @        ªª   @@              E  0   @  
 
- 	À                              ä–       Ô€              ˜ l   l   ƒ<                À      ªª   @@             E  0   @  
+ 	À                              ð–       Ô€              !˜ n   n   ˆƒ<                @        ªª   @@             E  0   @  
 
- 	À                              e       Ô€              8 l   l   ƒ<                Ð      ªª   @@             E  0   @  
+ 	À                              i       Ô€              @ n   n   ˆƒ<                P        ªª   @@             E  0   @  
 
-À 	                              H       Ô€              Ÿ l   l   ƒ<                €      ªª   @@              E  0   @  
+À 	                              P       Ô€              § n   n   ˆƒ<                P        ªª   @@              E  0   @  
 
- 	À                              M l   l   ‹<                €      ªª   @@              E  0   @  
+ 	À                              Y n   n   ˆ‹<                P        ªª   @@              E  0   @  
 
- 	À                              2       Ô€                l   l   ƒ<                à      ªª   @@             E  0   @  
+ 	À                              B       Ô€                n   n   ˆƒ<                P        ªª   @@             E  0   @  
 
- 	À                              œ¢ l   l   ƒ  ÿÿÿÿÿÿ          ð      ªª   @@             E  0   @  
+ 	À                              ¤¢ n   n   ˆƒ  ÿÿÿÿÿÿ          0        ªª   @@             E  0   @  
 
-À 	                              Ç¢ <   <   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ�      ªª   @@   	ÿÿÿÿÿÿ              Z£ l   l   ƒ<                       ªª   @@   
+À 	                              Ï¢ >   >   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ0        ªª   @@   	ÿÿÿÿÿÿ              f£ n   n   ˆƒ<                `        ªª   @@   
            E  0   @  
 
- 	À                              ?¤       Ô€              5¥ <   <   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ      ªª   @@  	ÿÿÿÿÿÿ              ö¦ l   l   ƒ<                     ªª   @@  
+ 	À                              O¤       Ô€              I¥ >   >   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ@        ªª   @@  	ÿÿÿÿÿÿ              § n   n   ˆƒ<                `        ªª   @@  
            E  0   @  
 
- 	À                              w¨ l   l   ‹<                     ªª   @@  
+ 	À                              —¨ n   n   ˆ‹<                `        ªª   @@  
            E  0   @  
 
- 	À                              ¥(	       Ô€              x)	 l   l   ƒ<                      ªª   @@  	           E  0   @  
+ 	À                              ©(	       Ô€              €)	 n   n   ˆƒ<                `        ªª   @@  	           E  0   @  
 
-À 	                              ˆ)	       Ô€              ß)	 l   l   ƒ<                °      ªª   @@              E  0   @  
+À 	                              �)	       Ô€              ç)	 n   n   ˆƒ<                p        ªª   @@              E  0   @  
 
- 	À                              Ä*	       Ô€              ²+	 l   l   ƒ<                0     ªª   @@             E  0   @  
+ 	À                              Ð*	       Ô€              Â+	 n   n   ˆƒ<                p        ªª   @@             E  0   @  
 
- 	À                              E¯
-       Ô€              °
- l   l   ƒ<                @     ªª   @@  
+ 	À                              I¯
+       Ô€               °
+ n   n   ˆƒ<                p        ªª   @@  
            E  0   @  
 
-À 	                              (°
-       Ô€              °
- l   l   ƒ<                À      ªª   @@              E  0   @  
+À 	                              0°
+       Ô€              ‡°
+ n   n   ˆƒ<                €        ªª   @@              E  0   @  
 
- 	À                              d±
-       Ô€              @²
- l   l   ƒ<                P     ªª   @@             E  0   @  
+ 	À                              p±
+       Ô€              P²
+ n   n   ˆƒ<                €        ªª   @@             E  0   @  
 
- 	À                           	   �9 l   l   ‹<                `     ªª   @@             E  0   @  
+ 	À                           	   �9 n   n   ˆ‹<                €        ªª   @@             E  0   @  
 
-À 	                           	   �9       Ô€           	   ô9 l   l   ƒ<                Ð      ªª   @@              E  0   @  
-
- 	À                           	   Ù:       Ô€           	   ¾; l   l   ƒ<                p     ªª   @@             E  0   @  
-
- 	À                           
\ No newline at end of file
+À 	                           	   ­9       Ô€           
\ No newline at end of file
diff -Naur ns-3.23/src/mesh/test/flame/flame-regression-test-1-1.pcap ns-3.24/src/mesh/test/flame/flame-regression-test-1-1.pcap
--- ns-3.23/src/mesh/test/flame/flame-regression-test-1-1.pcap	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/test/flame/flame-regression-test-1-1.pcap	2015-09-15 11:18:44.000000000 -0700
@@ -1,108 +1,104 @@
-ÔÃ²¡          ÿÿ  i      ¸#  X   X   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ       ªª   @@   ÿÿÿÿÿÿ             
+ÔÃ²¡          ÿÿ  i      ¸#  Z   Z   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ         ªª   @@   ÿÿÿÿÿÿ             
 ÿÿÿÿÿÿ
-       ã#  X   X   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ       ªª   @@  ÿÿÿÿÿÿ             
+       ã#  Z   Z   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ         ªª   @@  ÿÿÿÿÿÿ             
 ÿÿÿÿÿÿ
-       /%  X   X   ƒ<                       ªª   @@                     
+       /%  Z   Z   ˆƒ<                         ªª   @@                     
      
-       ?%        Ô€              ±%  X   X   ƒ<                      ªª   @@                    
+       ?%        Ô€              ±%  Z   Z   ˆƒ<                         ªª   @@                    
      
-       ~&        Ô€              })  l   l   ‹<                      ªª   @@              E  0    @  
+       ~&        Ô€              …)  n   n   ˆ‹<                         ªª   @@              E  0    @  
 
-À 	                              �)        Ô€              ä)  l   l   ƒ<                       ªª   @@             E  0    @  
+À 	                              •)        Ô€              ì)  n   n   ˆƒ<                         ªª   @@             E  0    @  
 
-À 	                              É*        Ô€              \+  <   <   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ       ªª   @@   ÿÿÿÿÿÿ              Ø+  <   <   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ0      ªª   @@  ÿÿÿÿÿÿ              Ô,  <   <   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ       ªª   @@  ÿÿÿÿÿÿ              EN  X   X   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ0      ªª   @@   ÿÿÿÿÿÿ             
+À 	                              Õ*        Ô€              l+  >   >   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ        ªª   @@   ÿÿÿÿÿÿ              è+  >   >   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ        ªª   @@  ÿÿÿÿÿÿ              ì,  >   >   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ        ªª   @@  ÿÿÿÿÿÿ              QN  Z   Z   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ         ªª   @@   ÿÿÿÿÿÿ             
 ÿÿÿÿÿÿ
-       pN  X   X   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ@      ªª   @@  ÿÿÿÿÿÿ             
+       |N  Z   Z   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ         ªª   @@  ÿÿÿÿÿÿ             
 ÿÿÿÿÿÿ
-       ¼O  X   X   ƒ<                0      ªª   @@                     
+       ÈO  Z   Z   ˆƒ<                        ªª   @@                     
      
-       ÌO        Ô€              áP  X   X   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ@      ªª   @@  ÿÿÿÿÿÿ             
+       ØO        Ô€              íP  Z   Z   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ         ªª   @@  ÿÿÿÿÿÿ             
 ÿÿÿÿÿÿ
-       TQ  X   X   ƒ<                P      ªª   @@                    
+       `Q  Z   Z   ˆƒ<                        ªª   @@                    
      
-       !R        Ô€              ôR  l   l   ƒ<                @      ªª   @@              E  0    @  
+       -R        Ô€              S  n   n   ˆƒ<                        ªª   @@              E  0    @  
 
- 	À                              S        Ô€              S  l   l   ƒ<                `      ªª   @@             E  0    @  
+ 	À                              S        Ô€              �S  n   n   ˆƒ<                        ªª   @@             E  0    @  
 
- 	À                              dT        Ô€              H‡ l   l   ƒ<                P      ªª   @@              E  0   @  
+ 	À                              xT        Ô€              L‡ n   n   ˆƒ<                         ªª   @@              E  0   @  
 
-À 	                              X‡       Ô€              ¯‡ l   l   ƒ<                p      ªª   @@             E  0   @  
+À 	                              \‡       Ô€              ³‡ n   n   ˆƒ<                         ªª   @@             E  0   @  
 
-À 	                              ”ˆ       Ô€              g‰ l   l   ƒ<                P      ªª   @@              E  0   @  
+À 	                              œˆ       Ô€              s‰ n   n   ˆƒ<                         ªª   @@              E  0   @  
 
- 	À                              w‰       Ô€              ò‰ l   l   ƒ<                €      ªª   @@             E  0   @  
+ 	À                              ƒ‰       Ô€              þ‰ n   n   ˆƒ<                         ªª   @@             E  0   @  
 
- 	À                              ×Š       Ô€              è l   l   ƒ<                `      ªª   @@              E  0   @  
+ 	À                              çŠ       Ô€              ì n   n   ˆƒ<                0        ªª   @@              E  0   @  
 
-À 	                              ø       Ô€              O l   l   ƒ<                �      ªª   @@             E  0   @  
+À 	                              ü       Ô€              S n   n   ˆƒ<                0        ªª   @@             E  0   @  
 
-À 	                              4       Ô€               l   l   ƒ<                `      ªª   @@              E  0   @  
+À 	                              <       Ô€               n   n   ˆƒ<                0        ªª   @@              E  0   @  
 
- 	À                                     Ô€              n l   l   ƒ<                       ªª   @@             E  0   @  
+ 	À                              #       Ô€              z n   n   ˆƒ<                0        ªª   @@             E  0   @  
 
- 	À                              S       Ô€              ˆ” l   l   ƒ<                p      ªª   @@              E  0   @  
+ 	À                              c       Ô€              Œ” n   n   ˆƒ<                @        ªª   @@              E  0   @  
 
-À 	                              ˜”       Ô€              ï” l   l   ƒ<                °      ªª   @@             E  0   @  
+À 	                              œ”       Ô€              ó” n   n   ˆƒ<                @        ªª   @@             E  0   @  
 
-À 	                              Ô•       Ô€              §– l   l   ƒ<                p      ªª   @@              E  0   @  
+À 	                              Ü•       Ô€              ³– n   n   ˆƒ<                @        ªª   @@              E  0   @  
 
- 	À                              ·–       Ô€              h— l   l   ƒ<                À      ªª   @@             E  0   @  
+ 	À                              Ã–       Ô€              t— n   n   ˆƒ<                @        ªª   @@             E  0   @  
 
- 	À                              M˜       Ô€              ( l   l   ƒ<                €      ªª   @@              E  0   @  
+ 	À                              ]˜       Ô€              , n   n   ˆƒ<                P        ªª   @@              E  0   @  
 
-À 	                              8       Ô€              � l   l   ƒ<                Ð      ªª   @@             E  0   @  
+À 	                              <       Ô€              “ n   n   ˆƒ<                P        ªª   @@             E  0   @  
 
-À 	                              t       Ô€              õ l   l   ‹<                €      ªª   @@              E  0   @  
+À 	                              |       Ô€               n   n   ˆ‹<                P        ªª   @@              E  0   @  
 
- 	À                                     Ô€              \ l   l   ƒ<                à      ªª   @@             E  0   @  
+ 	À                                     Ô€              l n   n   ˆƒ<                P        ªª   @@             E  0   @  
 
- 	À                              A        Ô€              È¡ l   l   ƒ  ÿÿÿÿÿÿ          �      ªª   @@              E  0   @  
+ 	À                              U        Ô€              Ì¡ n   n   ˆƒ  ÿÿÿÿÿÿ          0        ªª   @@              E  0   @  
 
-À 	                              ó¡ l   l   ƒ  ÿÿÿÿÿÿ          ð      ªª   @@             E  0   @  
+À 	                              ÷¡ n   n   ˆƒ  ÿÿÿÿÿÿ          0        ªª   @@             E  0   @  
 
-À 	                              /£ <   <   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ�      ªª   @@   	ÿÿÿÿÿÿ              ¤ l   l   ƒ<                       ªª   @@   
+À 	                              ;£ >   >   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ0        ªª   @@   	ÿÿÿÿÿÿ              ¤ n   n   ˆƒ<                `        ªª   @@   
            E  0   @  
 
- 	À                              ¤       Ô€              Ì¤ <   <   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ      ªª   @@  	ÿÿÿÿÿÿ              È¥ <   <   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ       ªª   @@  	ÿÿÿÿÿÿ              M¦ l   l   ƒ<                     ªª   @@  
+ 	À                              "¤       Ô€              Ü¤ >   >   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ@        ªª   @@  	ÿÿÿÿÿÿ              à¥ >   >   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ@        ªª   @@  	ÿÿÿÿÿÿ              e¦ n   n   ˆƒ<                `        ªª   @@  
            E  0   @  
 
- 	À                              Î§ l   l   ‹<                     ªª   @@  
+ 	À                              ê§ n   n   ˆ‹<                `        ªª   @@  
            E  0   @  
 
- 	À                              ³¨       Ô€              h(	 l   l   ƒ<                °      ªª   @@   	           E  0   @  
+ 	À                              Ó¨       Ô€              l(	 n   n   ˆƒ<                `        ªª   @@   	           E  0   @  
 
-À 	                              x(	       Ô€              Ï(	 l   l   ƒ<                      ªª   @@  	           E  0   @  
+À 	                              |(	       Ô€              Ó(	 n   n   ˆƒ<                `        ªª   @@  	           E  0   @  
 
-À 	                              ´)	       Ô€              ‡*	 l   l   ƒ<                °      ªª   @@              E  0   @  
+À 	                              ¼)	       Ô€              “*	 n   n   ˆƒ<                p        ªª   @@              E  0   @  
 
- 	À                              —*	       Ô€              	+	 l   l   ƒ<                0     ªª   @@             E  0   @  
+ 	À                              £*	       Ô€              +	 n   n   ˆƒ<                p        ªª   @@             E  0   @  
 
- 	À                              î+	       Ô€              ¯
- l   l   ƒ<                À      ªª   @@   
+ 	À                              þ+	       Ô€              ¯
+ n   n   ˆƒ<                p        ªª   @@   
            E  0   @  
 
-À 	                              ¯
-       Ô€              o¯
- l   l   ƒ<                @     ªª   @@  
+À 	                              ¯
+       Ô€              s¯
+ n   n   ˆƒ<                p        ªª   @@  
            E  0   @  
 
-À 	                              T°
-       Ô€              '±
- l   l   ƒ<                À      ªª   @@              E  0   @  
+À 	                              \°
+       Ô€              3±
+ n   n   ˆƒ<                €        ªª   @@              E  0   @  
 
- 	À                              7±
-       Ô€              —±
- l   l   ƒ<                P     ªª   @@             E  0   @  
+ 	À                              C±
+       Ô€              £±
+ n   n   ˆƒ<                €        ªª   @@             E  0   @  
 
- 	À                              |²
-       Ô€           	   á6 l   l   ‹<                Ð      ªª   @@              E  0   @  
+ 	À                              Œ²
+       Ô€           	   é6 n   n   ˆ‹<                €        ªª   @@              E  0   @  
 
-À 	                           	   ñ6       Ô€           	   H7 l   l   ƒ<                `     ªª   @@             E  0   @  
+À 	                           	   ù6       Ô€           	   P7 n   n   ˆƒ<                €        ªª   @@             E  0   @  
 
-À 	                           	   ä8 l   l   ‹<                `     ªª   @@             E  0   @  
+À 	                           	   ð8 n   n   ˆ‹<                €        ªª   @@             E  0   @  
 
-À 	                           	   É9       Ô€           	   œ: l   l   ƒ<                Ð      ªª   @@              E  0   @  
-
- 	À                           	   ¬:       Ô€           	   ; l   l   ƒ<                p     ªª   @@             E  0   @  
-
- 	À                           	   ú;       Ô€           
\ No newline at end of file
+À 	                           	   Ù9       Ô€           
\ No newline at end of file
diff -Naur ns-3.23/src/mesh/test/flame/flame-regression-test-2-1.pcap ns-3.24/src/mesh/test/flame/flame-regression-test-2-1.pcap
--- ns-3.23/src/mesh/test/flame/flame-regression-test-2-1.pcap	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/test/flame/flame-regression-test-2-1.pcap	2015-09-15 11:18:44.000000000 -0700
@@ -1,84 +1,82 @@
-ÔÃ²¡          ÿÿ  i      (#  X   X   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ       ªª   @@   ÿÿÿÿÿÿ             
+ÔÃ²¡          ÿÿ  i      (#  Z   Z   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ         ªª   @@   ÿÿÿÿÿÿ             
 ÿÿÿÿÿÿ
-       t$  X   X   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ       ªª   @@  ÿÿÿÿÿÿ             
+       t$  Z   Z   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ         ªª   @@  ÿÿÿÿÿÿ             
 ÿÿÿÿÿÿ
-       l%        Ô€              B&  X   X   ƒ<                      ªª   @@                    
+       l%        Ô€              B&  Z   Z   ˆƒ<                         ªª   @@                    
      
-       R&        Ô€              ©&  l   l   ƒ<                      ªª   @@              E  0    @  
+       R&        Ô€              ©&  n   n   ˆƒ<                         ªª   @@              E  0    @  
 
-À 	                              Õ(  l   l   ‹<                      ªª   @@              E  0    @  
+À 	                              Ù(  n   n   ˆ‹<                         ªª   @@              E  0    @  
 
-À 	                              º)        Ô€              �*  l   l   ƒ<                       ªª   @@             E  0    @  
+À 	                              Â)        Ô€              ™*  n   n   ˆƒ<                         ªª   @@             E  0    @  
 
-À 	                              A,  <   <   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ0      ªª   @@  ÿÿÿÿÿÿ              l,  <   <   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ       ªª   @@  ÿÿÿÿÿÿ              O  X   X   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ@      ªª   @@  ÿÿÿÿÿÿ             
+À 	                              U,  >   >   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ        ªª   @@  ÿÿÿÿÿÿ              €,  >   >   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ        ªª   @@  ÿÿÿÿÿÿ              O  Z   Z   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ         ªª   @@  ÿÿÿÿÿÿ             
 ÿÿÿÿÿÿ
-       ,O  X   X   ƒ<                0      ªª   @@                     
+       8O  Z   Z   ˆƒ<                        ªª   @@                     
      
-       ùO        Ô€              QP  X   X   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ@      ªª   @@  ÿÿÿÿÿÿ             
+       P        Ô€              ]P  Z   Z   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ         ªª   @@  ÿÿÿÿÿÿ             
 ÿÿÿÿÿÿ
-       åQ  X   X   ƒ<                P      ªª   @@                    
+       ñQ  Z   Z   ˆƒ<                        ªª   @@                    
      
-       1S        Ô€              (T  l   l   ƒ<                `      ªª   @@             E  0    @  
+       AS        Ô€              <T  n   n   ˆƒ<                        ªª   @@             E  0    @  
 
- 	À                              8T        Ô€               † l   l   ƒ<                P      ªª   @@              E  0   @  
+ 	À                              LT        Ô€               † n   n   ˆƒ<                         ªª   @@              E  0   @  
 
-À 	                              …‡       Ô€              Xˆ l   l   ƒ<                p      ªª   @@             E  0   @  
+À 	                              ‰‡       Ô€              `ˆ n   n   ˆƒ<                         ªª   @@             E  0   @  
 
-À 	                              ¤‰       Ô€              ›Š l   l   ƒ<                €      ªª   @@             E  0   @  
+À 	                              °‰       Ô€              «Š n   n   ˆƒ<                         ªª   @@             E  0   @  
 
- 	À                              «Š       Ô€              @ l   l   ƒ<                `      ªª   @@              E  0   @  
+ 	À                              »Š       Ô€              @ n   n   ˆƒ<                0        ªª   @@              E  0   @  
 
-À 	                              %       Ô€              ø l   l   ƒ<                �      ªª   @@             E  0   @  
+À 	                              )       Ô€                n   n   ˆƒ<                0        ªª   @@             E  0   @  
 
-À 	                              D       Ô€               l   l   ƒ<                       ªª   @@             E  0   @  
+À 	                              P       Ô€              ' n   n   ˆƒ<                0        ªª   @@             E  0   @  
 
- 	À                              '       Ô€              à“ l   l   ƒ<                p      ªª   @@              E  0   @  
+ 	À                              7       Ô€              à“ n   n   ˆƒ<                @        ªª   @@              E  0   @  
 
-À 	                              Å”       Ô€              ˜• l   l   ƒ<                °      ªª   @@             E  0   @  
+À 	                              É”       Ô€               • n   n   ˆƒ<                @        ªª   @@             E  0   @  
 
-À 	                              ä–       Ô€              ˜ l   l   ƒ<                À      ªª   @@             E  0   @  
+À 	                              ð–       Ô€              !˜ n   n   ˆƒ<                @        ªª   @@             E  0   @  
 
- 	À                              !˜       Ô€              € l   l   ƒ<                €      ªª   @@              E  0   @  
+ 	À                              1˜       Ô€              € n   n   ˆƒ<                P        ªª   @@              E  0   @  
 
-À 	                              e       Ô€              8 l   l   ƒ<                Ð      ªª   @@             E  0   @  
+À 	                              i       Ô€              @ n   n   ˆƒ<                P        ªª   @@             E  0   @  
 
-À 	                              2       Ô€                l   l   ƒ<                à      ªª   @@             E  0   @  
+À 	                              B       Ô€                n   n   ˆƒ<                P        ªª   @@             E  0   @  
 
- 	À                                      Ô€               ¡ l   l   ƒ  ÿÿÿÿÿÿ          �      ªª   @@              E  0   @  
+ 	À                              )        Ô€               ¡ n   n   ˆƒ  ÿÿÿÿÿÿ          0        ªª   @@              E  0   @  
 
-À 	                              œ¢ l   l   ƒ  ÿÿÿÿÿÿ          ð      ªª   @@             E  0   @  
+À 	                              ¤¢ n   n   ˆƒ  ÿÿÿÿÿÿ          0        ªª   @@             E  0   @  
 
-À 	                              ?¤       Ô€              5¥ <   <   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ      ªª   @@  	ÿÿÿÿÿÿ              `¥ <   <   ƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ       ªª   @@  	ÿÿÿÿÿÿ              w¨ l   l   ‹<                     ªª   @@  
+À 	                              O¤       Ô€              I¥ >   >   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ@        ªª   @@  	ÿÿÿÿÿÿ              t¥ >   >   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ@        ªª   @@  	ÿÿÿÿÿÿ              —¨ n   n   ˆ‹<                `        ªª   @@  
            E  0   @  
 
- 	À                              ‡¨       Ô€              À'	 l   l   ƒ<                °      ªª   @@   	           E  0   @  
+ 	À                              §¨       Ô€              À'	 n   n   ˆƒ<                `        ªª   @@   	           E  0   @  
 
-À 	                              ¥(	       Ô€              x)	 l   l   ƒ<                      ªª   @@  	           E  0   @  
+À 	                              ©(	       Ô€              €)	 n   n   ˆƒ<                `        ªª   @@  	           E  0   @  
 
-À 	                              Ä*	       Ô€              ²+	 l   l   ƒ<                0     ªª   @@             E  0   @  
+À 	                              Ð*	       Ô€              Â+	 n   n   ˆƒ<                p        ªª   @@             E  0   @  
 
- 	À                              Â+	       Ô€              `®
- l   l   ƒ<                À      ªª   @@   
+ 	À                              Ò+	       Ô€              `®
+ n   n   ˆƒ<                p        ªª   @@   
            E  0   @  
 
-À 	                              E¯
-       Ô€              °
- l   l   ƒ<                @     ªª   @@  
+À 	                              I¯
+       Ô€               °
+ n   n   ˆƒ<                p        ªª   @@  
            E  0   @  
 
-À 	                              d±
-       Ô€              @²
- l   l   ƒ<                P     ªª   @@             E  0   @  
+À 	                              p±
+       Ô€              P²
+ n   n   ˆƒ<                €        ªª   @@             E  0   @  
 
- 	À                              P²
-       Ô€           	    5 l   l   ƒ<                Ð      ªª   @@              E  0   @  
+ 	À                              `²
+       Ô€           	    5 n   n   ˆƒ<                €        ªª   @@              E  0   @  
 
-À 	                           	   96 l   l   ‹<                Ð      ªª   @@              E  0   @  
+À 	                           	   =6 n   n   ˆ‹<                €        ªª   @@              E  0   @  
 
-À 	                           	   7       Ô€           	   ñ7 l   l   ƒ<                `     ªª   @@             E  0   @  
+À 	                           	   &7       Ô€           	   ý7 n   n   ˆƒ<                €        ªª   @@             E  0   @  
 
-À 	                           	   �9 l   l   ‹<                `     ªª   @@             E  0   @  
+À 	                           	   �9 n   n   ˆ‹<                €        ªª   @@             E  0   @  
 
-À 	                           	   Ù:       Ô€           	   ¾; l   l   ƒ<                p     ªª   @@             E  0   @  
-
- 	À                           	   Î;       Ô€           
\ No newline at end of file
+À 	                           
\ No newline at end of file
diff -Naur ns-3.23/src/mesh/wscript ns-3.24/src/mesh/wscript
--- ns-3.23/src/mesh/wscript	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mesh/wscript	2015-09-15 11:18:44.000000000 -0700
@@ -1,7 +1,7 @@
 ## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
 
 def build(bld):
-    obj = bld.create_ns3_module('mesh', ['internet', 'wifi', 'applications'])
+    obj = bld.create_ns3_module('mesh', ['internet', 'wifi'])
 
     obj.source = [
         'model/mesh-information-element-vector.cc',
@@ -34,6 +34,7 @@
         'model/flame/flame-protocol-mac.cc',
         'model/flame/flame-protocol.cc',
         'helper/mesh-helper.cc',
+        'helper/mesh-stack-installer.cc',
         'helper/dot11s/dot11s-installer.cc',
         'helper/flame/flame-installer.cc',
         ]
@@ -56,7 +57,6 @@
     headers = bld(features='ns3header')
     headers.module = 'mesh'
     headers.source = [
-        'model/mesh-information-element.h',
         'model/mesh-information-element-vector.h',
         'model/mesh-point-device.h',
         'model/mesh-l2-routing-protocol.h',
diff -Naur ns-3.23/src/mobility/bindings/modulegen__gcc_ILP32.py ns-3.24/src/mobility/bindings/modulegen__gcc_ILP32.py
--- ns-3.23/src/mobility/bindings/modulegen__gcc_ILP32.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mobility/bindings/modulegen__gcc_ILP32.py	2015-09-15 11:18:44.000000000 -0700
@@ -297,6 +297,12 @@
     nested_module = module.add_cpp_namespace('Hash')
     register_types_ns3_Hash(nested_module)
     
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -332,6 +338,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -612,11 +625,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3ConstantVelocityHelper_methods(root_module, cls):
@@ -2859,11 +2867,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -2973,10 +2991,10 @@
                    'double', 
                    [], 
                    is_virtual=True)
-    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
     cls.add_method('Interpolate', 
                    'double', 
-                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
                    visibility='private', is_virtual=True)
     ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
     cls.add_method('Validate', 
@@ -4639,6 +4657,7 @@
                         [])
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -4651,6 +4670,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.23/src/mobility/bindings/modulegen__gcc_LP64.py ns-3.24/src/mobility/bindings/modulegen__gcc_LP64.py
--- ns-3.23/src/mobility/bindings/modulegen__gcc_LP64.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mobility/bindings/modulegen__gcc_LP64.py	2015-09-15 11:18:44.000000000 -0700
@@ -297,6 +297,12 @@
     nested_module = module.add_cpp_namespace('Hash')
     register_types_ns3_Hash(nested_module)
     
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -332,6 +338,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -612,11 +625,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3ConstantVelocityHelper_methods(root_module, cls):
@@ -2859,11 +2867,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -2973,10 +2991,10 @@
                    'double', 
                    [], 
                    is_virtual=True)
-    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
     cls.add_method('Interpolate', 
                    'double', 
-                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
                    visibility='private', is_virtual=True)
     ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
     cls.add_method('Validate', 
@@ -4639,6 +4657,7 @@
                         [])
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -4651,6 +4670,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.23/src/mobility/model/geographic-positions.cc ns-3.24/src/mobility/model/geographic-positions.cc
--- ns-3.23/src/mobility/model/geographic-positions.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mobility/model/geographic-positions.cc	2015-09-15 11:18:44.000000000 -0700
@@ -26,7 +26,7 @@
 
 namespace ns3 {
 
-// earth's radius in meters if modeled as a perfect sphere
+/// Earth's radius in meters if modeled as a perfect sphere
 static const double EARTH_RADIUS = 6371e3; 
 
 /**
@@ -40,13 +40,13 @@
  * <http://earth-info.nga.mil/GandG/publications/tr8350.2/wgs84fin.pdf>.
  */
 
-// earth's semi-major axis in meters as defined by both GRS80 and WGS84
+/// Earth's semi-major axis in meters as defined by both GRS80 and WGS84
 static const double EARTH_SEMIMAJOR_AXIS = 6378137;
 
-// earth's first eccentricity as defined by GRS80
+/// Earth's first eccentricity as defined by GRS80
 static const double EARTH_GRS80_ECCENTRICITY = 0.0818191910428158;
 
-// earth's first eccentricity as defined by WGS84
+/// Earth's first eccentricity as defined by WGS84
 static const double EARTH_WGS84_ECCENTRICITY = 0.0818191908426215;
 
 Vector
diff -Naur ns-3.23/src/mobility/model/mobility.h ns-3.24/src/mobility/model/mobility.h
--- ns-3.23/src/mobility/model/mobility.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mobility/model/mobility.h	2015-09-15 11:18:44.000000000 -0700
@@ -1,3 +1,23 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2006,2007 INRIA
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
+ */
+
 /**
  * @defgroup mobility Mobility
  */
diff -Naur ns-3.23/src/mobility/model/mobility-model.cc ns-3.24/src/mobility/model/mobility-model.cc
--- ns-3.23/src/mobility/model/mobility-model.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mobility/model/mobility-model.cc	2015-09-15 11:18:44.000000000 -0700
@@ -47,7 +47,7 @@
     .AddTraceSource ("CourseChange", 
                      "The value of the position and/or velocity vector changed",
                      MakeTraceSourceAccessor (&MobilityModel::m_courseChangeTrace),
-                     "ns3::MobilityModel::CourseChangeTracedCallback")
+                     "ns3::MobilityModel::TracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.23/src/mobility/model/mobility-model.h ns-3.24/src/mobility/model/mobility-model.h
--- ns-3.23/src/mobility/model/mobility-model.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mobility/model/mobility-model.h	2015-09-15 11:18:44.000000000 -0700
@@ -83,22 +83,8 @@
    *  TracedCallback signature.
    *
    * \param [in] model Value of the MobilityModel.
-   * @{
    */
-  typedef void (* TracedCallback)(const Ptr<const MobilityModel> model);
-  
-  /**
-   * TracedCallback signature for course change notifications.
-   *
-   * If the callback is connected using Config::ConnectWithoutContext()
-   * omit the \c context argument from the signature.
-   *
-   * \param [in] context The context string, supplied by the Trace source.
-   * \param [in] model The MobilityModel which is changing course.
-   */
-  typedef void (* CourseChangeTracedCallback)
-    (const std::string context, const Ptr<const MobilityModel> model);
-  
+  typedef void (* TracedCallback)(Ptr<const MobilityModel> model);
   
 protected:
   /**
diff -Naur ns-3.23/src/mobility/model/steady-state-random-waypoint-mobility-model.cc ns-3.24/src/mobility/model/steady-state-random-waypoint-mobility-model.cc
--- ns-3.23/src/mobility/model/steady-state-random-waypoint-mobility-model.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mobility/model/steady-state-random-waypoint-mobility-model.cc	2015-09-15 11:18:44.000000000 -0700
@@ -115,13 +115,17 @@
   m_speed->SetAttribute ("Max", DoubleValue (m_maxSpeed));
   NS_ASSERT (m_minX < m_maxX);
   NS_ASSERT (m_minY < m_maxY);
-  m_position = CreateObject<RandomRectanglePositionAllocator> ();
+  m_position = CreateObject<RandomBoxPositionAllocator> ();
   m_x->SetAttribute ("Min", DoubleValue (m_minX));
   m_x->SetAttribute ("Max", DoubleValue (m_maxX));
   m_y->SetAttribute ("Min", DoubleValue (m_minY));
   m_y->SetAttribute ("Max", DoubleValue (m_maxY));
   m_position->SetX (m_x);
   m_position->SetY (m_y);
+  Ptr<ConstantRandomVariable> z = CreateObject<ConstantRandomVariable> ();
+  z->SetAttribute ("Constant", DoubleValue (m_z));
+  m_position->SetZ (z);
+
   NS_ASSERT (m_minPause <= m_maxPause);
   m_pause->SetAttribute ("Min", DoubleValue (m_minPause));
   m_pause->SetAttribute ("Max", DoubleValue (m_maxPause));
diff -Naur ns-3.23/src/mobility/model/steady-state-random-waypoint-mobility-model.h ns-3.24/src/mobility/model/steady-state-random-waypoint-mobility-model.h
--- ns-3.23/src/mobility/model/steady-state-random-waypoint-mobility-model.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mobility/model/steady-state-random-waypoint-mobility-model.h	2015-09-15 11:18:44.000000000 -0700
@@ -98,7 +98,7 @@
   double m_minY; //!< minimum y value of traveling region (m)
   double m_maxY; //!< maximum y value of traveling region (m)
   double m_z; //!< z value of traveling region
-  Ptr<RandomRectanglePositionAllocator> m_position; //!< position allocator
+  Ptr<RandomBoxPositionAllocator> m_position; //!< position allocator
   double m_minPause; //!< minimum pause value (s)
   double m_maxPause; //!< maximum pause value (s)
   Ptr<UniformRandomVariable> m_pause; //!< random variable for pause values
diff -Naur ns-3.23/src/mpi/bindings/modulegen__gcc_ILP32.py ns-3.24/src/mpi/bindings/modulegen__gcc_ILP32.py
--- ns-3.23/src/mpi/bindings/modulegen__gcc_ILP32.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mpi/bindings/modulegen__gcc_ILP32.py	2015-09-15 11:18:44.000000000 -0700
@@ -20,6 +20,10 @@
 def register_types(module):
     root_module = module.get_root()
     
+    ## address.h (module 'network'): ns3::Address [class]
+    module.add_class('Address', import_from_module='ns.network')
+    ## address.h (module 'network'): ns3::Address::MaxSize_e [enumeration]
+    module.add_enum('MaxSize_e', ['MAX_SIZE'], outer_class=root_module['ns3::Address'], import_from_module='ns.network')
     ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList [class]
     module.add_class('AttributeConstructionList', import_from_module='ns.core')
     ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item [struct]
@@ -42,6 +46,22 @@
     module.add_class('CallbackBase', import_from_module='ns.core')
     ## hash.h (module 'core'): ns3::Hasher [class]
     module.add_class('Hasher', import_from_module='ns.core')
+    ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
+    module.add_class('Ipv4Address', import_from_module='ns.network')
+    ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
+    root_module['ns3::Ipv4Address'].implicitly_converts_to(root_module['ns3::Address'])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4Mask [class]
+    module.add_class('Ipv4Mask', import_from_module='ns.network')
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Address [class]
+    module.add_class('Ipv6Address', import_from_module='ns.network')
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Address [class]
+    root_module['ns3::Ipv6Address'].implicitly_converts_to(root_module['ns3::Address'])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix [class]
+    module.add_class('Ipv6Prefix', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    module.add_class('Mac48Address', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    root_module['ns3::Mac48Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## mpi-interface.h (module 'mpi'): ns3::MpiInterface [class]
     module.add_class('MpiInterface')
     ## object-base.h (module 'core'): ns3::ObjectBase [class]
@@ -138,6 +158,26 @@
     module.add_class('CallbackValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
+    module.add_class('Ipv4AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4AddressValue [class]
+    module.add_class('Ipv4AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4MaskChecker [class]
+    module.add_class('Ipv4MaskChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4MaskValue [class]
+    module.add_class('Ipv4MaskValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6AddressChecker [class]
+    module.add_class('Ipv6AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6AddressValue [class]
+    module.add_class('Ipv6AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker [class]
+    module.add_class('Ipv6PrefixChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue [class]
+    module.add_class('Ipv6PrefixValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker [class]
+    module.add_class('Mac48AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue [class]
+    module.add_class('Mac48AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## mpi-receiver.h (module 'mpi'): ns3::MpiReceiver [class]
     module.add_class('MpiReceiver', parent=root_module['ns3::Object'])
     ## nix-vector.h (module 'network'): ns3::NixVector [class]
@@ -150,6 +190,10 @@
     module.add_class('TypeIdChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## type-id.h (module 'core'): ns3::TypeIdValue [class]
     module.add_class('TypeIdValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## address.h (module 'network'): ns3::AddressChecker [class]
+    module.add_class('AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## address.h (module 'network'): ns3::AddressValue [class]
+    module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -162,6 +206,12 @@
     nested_module = module.add_cpp_namespace('Hash')
     register_types_ns3_Hash(nested_module)
     
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -197,7 +247,15 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_methods(root_module):
+    register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
     register_Ns3AttributeConstructionListItem_methods(root_module, root_module['ns3::AttributeConstructionList::Item'])
     register_Ns3Buffer_methods(root_module, root_module['ns3::Buffer'])
@@ -209,6 +267,11 @@
     register_Ns3ByteTagListIteratorItem_methods(root_module, root_module['ns3::ByteTagList::Iterator::Item'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
+    register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
+    register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
+    register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
+    register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
+    register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
     register_Ns3MpiInterface_methods(root_module, root_module['ns3::MpiInterface'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
     register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
@@ -251,12 +314,24 @@
     register_Ns3CallbackImplBase_methods(root_module, root_module['ns3::CallbackImplBase'])
     register_Ns3CallbackValue_methods(root_module, root_module['ns3::CallbackValue'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
+    register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
+    register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
+    register_Ns3Ipv4MaskChecker_methods(root_module, root_module['ns3::Ipv4MaskChecker'])
+    register_Ns3Ipv4MaskValue_methods(root_module, root_module['ns3::Ipv4MaskValue'])
+    register_Ns3Ipv6AddressChecker_methods(root_module, root_module['ns3::Ipv6AddressChecker'])
+    register_Ns3Ipv6AddressValue_methods(root_module, root_module['ns3::Ipv6AddressValue'])
+    register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
+    register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
+    register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
+    register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3MpiReceiver_methods(root_module, root_module['ns3::MpiReceiver'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
+    register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
+    register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
     register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
     register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
@@ -264,6 +339,76 @@
     register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
+def register_Ns3Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## address.h (module 'network'): ns3::Address::Address() [constructor]
+    cls.add_constructor([])
+    ## address.h (module 'network'): ns3::Address::Address(uint8_t type, uint8_t const * buffer, uint8_t len) [constructor]
+    cls.add_constructor([param('uint8_t', 'type'), param('uint8_t const *', 'buffer'), param('uint8_t', 'len')])
+    ## address.h (module 'network'): ns3::Address::Address(ns3::Address const & address) [copy constructor]
+    cls.add_constructor([param('ns3::Address const &', 'address')])
+    ## address.h (module 'network'): bool ns3::Address::CheckCompatible(uint8_t type, uint8_t len) const [member function]
+    cls.add_method('CheckCompatible', 
+                   'bool', 
+                   [param('uint8_t', 'type'), param('uint8_t', 'len')], 
+                   is_const=True)
+    ## address.h (module 'network'): uint32_t ns3::Address::CopyAllFrom(uint8_t const * buffer, uint8_t len) [member function]
+    cls.add_method('CopyAllFrom', 
+                   'uint32_t', 
+                   [param('uint8_t const *', 'buffer'), param('uint8_t', 'len')])
+    ## address.h (module 'network'): uint32_t ns3::Address::CopyAllTo(uint8_t * buffer, uint8_t len) const [member function]
+    cls.add_method('CopyAllTo', 
+                   'uint32_t', 
+                   [param('uint8_t *', 'buffer'), param('uint8_t', 'len')], 
+                   is_const=True)
+    ## address.h (module 'network'): uint32_t ns3::Address::CopyFrom(uint8_t const * buffer, uint8_t len) [member function]
+    cls.add_method('CopyFrom', 
+                   'uint32_t', 
+                   [param('uint8_t const *', 'buffer'), param('uint8_t', 'len')])
+    ## address.h (module 'network'): uint32_t ns3::Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'uint32_t', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## address.h (module 'network'): void ns3::Address::Deserialize(ns3::TagBuffer buffer) [member function]
+    cls.add_method('Deserialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'buffer')])
+    ## address.h (module 'network'): uint8_t ns3::Address::GetLength() const [member function]
+    cls.add_method('GetLength', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## address.h (module 'network'): uint32_t ns3::Address::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## address.h (module 'network'): bool ns3::Address::IsInvalid() const [member function]
+    cls.add_method('IsInvalid', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## address.h (module 'network'): bool ns3::Address::IsMatchingType(uint8_t type) const [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('uint8_t', 'type')], 
+                   is_const=True)
+    ## address.h (module 'network'): static uint8_t ns3::Address::Register() [member function]
+    cls.add_method('Register', 
+                   'uint8_t', 
+                   [], 
+                   is_static=True)
+    ## address.h (module 'network'): void ns3::Address::Serialize(ns3::TagBuffer buffer) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'buffer')], 
+                   is_const=True)
+    return
+
 def register_Ns3AttributeConstructionList_methods(root_module, cls):
     ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::AttributeConstructionList(ns3::AttributeConstructionList const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::AttributeConstructionList const &', 'arg0')])
@@ -312,17 +457,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -344,11 +489,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -358,16 +498,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -605,14 +735,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -673,11 +807,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3Hasher_methods(root_module, cls):
@@ -709,6 +838,506 @@
                    [])
     return
 
+def register_Ns3Ipv4Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## ipv4-address.h (module 'network'): ns3::Ipv4Address::Ipv4Address(ns3::Ipv4Address const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4Address const &', 'arg0')])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4Address::Ipv4Address() [constructor]
+    cls.add_constructor([])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4Address::Ipv4Address(uint32_t address) [constructor]
+    cls.add_constructor([param('uint32_t', 'address')])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4Address::Ipv4Address(char const * address) [constructor]
+    cls.add_constructor([param('char const *', 'address')])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4Address ns3::Ipv4Address::CombineMask(ns3::Ipv4Mask const & mask) const [member function]
+    cls.add_method('CombineMask', 
+                   'ns3::Ipv4Address', 
+                   [param('ns3::Ipv4Mask const &', 'mask')], 
+                   is_const=True)
+    ## ipv4-address.h (module 'network'): static ns3::Ipv4Address ns3::Ipv4Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Ipv4Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## ipv4-address.h (module 'network'): static ns3::Ipv4Address ns3::Ipv4Address::Deserialize(uint8_t const * buf) [member function]
+    cls.add_method('Deserialize', 
+                   'ns3::Ipv4Address', 
+                   [param('uint8_t const *', 'buf')], 
+                   is_static=True)
+    ## ipv4-address.h (module 'network'): uint32_t ns3::Ipv4Address::Get() const [member function]
+    cls.add_method('Get', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## ipv4-address.h (module 'network'): static ns3::Ipv4Address ns3::Ipv4Address::GetAny() [member function]
+    cls.add_method('GetAny', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_static=True)
+    ## ipv4-address.h (module 'network'): static ns3::Ipv4Address ns3::Ipv4Address::GetBroadcast() [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_static=True)
+    ## ipv4-address.h (module 'network'): static ns3::Ipv4Address ns3::Ipv4Address::GetLoopback() [member function]
+    cls.add_method('GetLoopback', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_static=True)
+    ## ipv4-address.h (module 'network'): ns3::Ipv4Address ns3::Ipv4Address::GetSubnetDirectedBroadcast(ns3::Ipv4Mask const & mask) const [member function]
+    cls.add_method('GetSubnetDirectedBroadcast', 
+                   'ns3::Ipv4Address', 
+                   [param('ns3::Ipv4Mask const &', 'mask')], 
+                   is_const=True)
+    ## ipv4-address.h (module 'network'): static ns3::Ipv4Address ns3::Ipv4Address::GetZero() [member function]
+    cls.add_method('GetZero', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsBroadcast() const [member function]
+    cls.add_method('IsBroadcast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsEqual(ns3::Ipv4Address const & other) const [member function]
+    cls.add_method('IsEqual', 
+                   'bool', 
+                   [param('ns3::Ipv4Address const &', 'other')], 
+                   is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsLocalMulticast() const [member function]
+    cls.add_method('IsLocalMulticast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ipv4-address.h (module 'network'): static bool ns3::Ipv4Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsMulticast() const [member function]
+    cls.add_method('IsMulticast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsSubnetDirectedBroadcast(ns3::Ipv4Mask const & mask) const [member function]
+    cls.add_method('IsSubnetDirectedBroadcast', 
+                   'bool', 
+                   [param('ns3::Ipv4Mask const &', 'mask')], 
+                   is_const=True)
+    ## ipv4-address.h (module 'network'): void ns3::Ipv4Address::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True)
+    ## ipv4-address.h (module 'network'): void ns3::Ipv4Address::Serialize(uint8_t * buf) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('uint8_t *', 'buf')], 
+                   is_const=True)
+    ## ipv4-address.h (module 'network'): void ns3::Ipv4Address::Set(uint32_t address) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('uint32_t', 'address')])
+    ## ipv4-address.h (module 'network'): void ns3::Ipv4Address::Set(char const * address) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('char const *', 'address')])
+    return
+
+def register_Ns3Ipv4Mask_methods(root_module, cls):
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## ipv4-address.h (module 'network'): ns3::Ipv4Mask::Ipv4Mask(ns3::Ipv4Mask const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4Mask const &', 'arg0')])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4Mask::Ipv4Mask() [constructor]
+    cls.add_constructor([])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4Mask::Ipv4Mask(uint32_t mask) [constructor]
+    cls.add_constructor([param('uint32_t', 'mask')])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4Mask::Ipv4Mask(char const * mask) [constructor]
+    cls.add_constructor([param('char const *', 'mask')])
+    ## ipv4-address.h (module 'network'): uint32_t ns3::Ipv4Mask::Get() const [member function]
+    cls.add_method('Get', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## ipv4-address.h (module 'network'): uint32_t ns3::Ipv4Mask::GetInverse() const [member function]
+    cls.add_method('GetInverse', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## ipv4-address.h (module 'network'): static ns3::Ipv4Mask ns3::Ipv4Mask::GetLoopback() [member function]
+    cls.add_method('GetLoopback', 
+                   'ns3::Ipv4Mask', 
+                   [], 
+                   is_static=True)
+    ## ipv4-address.h (module 'network'): static ns3::Ipv4Mask ns3::Ipv4Mask::GetOnes() [member function]
+    cls.add_method('GetOnes', 
+                   'ns3::Ipv4Mask', 
+                   [], 
+                   is_static=True)
+    ## ipv4-address.h (module 'network'): uint16_t ns3::Ipv4Mask::GetPrefixLength() const [member function]
+    cls.add_method('GetPrefixLength', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ipv4-address.h (module 'network'): static ns3::Ipv4Mask ns3::Ipv4Mask::GetZero() [member function]
+    cls.add_method('GetZero', 
+                   'ns3::Ipv4Mask', 
+                   [], 
+                   is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Mask::IsEqual(ns3::Ipv4Mask other) const [member function]
+    cls.add_method('IsEqual', 
+                   'bool', 
+                   [param('ns3::Ipv4Mask', 'other')], 
+                   is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Mask::IsMatch(ns3::Ipv4Address a, ns3::Ipv4Address b) const [member function]
+    cls.add_method('IsMatch', 
+                   'bool', 
+                   [param('ns3::Ipv4Address', 'a'), param('ns3::Ipv4Address', 'b')], 
+                   is_const=True)
+    ## ipv4-address.h (module 'network'): void ns3::Ipv4Mask::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True)
+    ## ipv4-address.h (module 'network'): void ns3::Ipv4Mask::Set(uint32_t mask) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('uint32_t', 'mask')])
+    return
+
+def register_Ns3Ipv6Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Address::Ipv6Address() [constructor]
+    cls.add_constructor([])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Address::Ipv6Address(char const * address) [constructor]
+    cls.add_constructor([param('char const *', 'address')])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Address::Ipv6Address(uint8_t * address) [constructor]
+    cls.add_constructor([param('uint8_t *', 'address')])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Address::Ipv6Address(ns3::Ipv6Address const & addr) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv6Address const &', 'addr')])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Address::Ipv6Address(ns3::Ipv6Address const * addr) [constructor]
+    cls.add_constructor([param('ns3::Ipv6Address const *', 'addr')])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Address ns3::Ipv6Address::CombinePrefix(ns3::Ipv6Prefix const & prefix) [member function]
+    cls.add_method('CombinePrefix', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Ipv6Prefix const &', 'prefix')])
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::Deserialize(uint8_t const * buf) [member function]
+    cls.add_method('Deserialize', 
+                   'ns3::Ipv6Address', 
+                   [param('uint8_t const *', 'buf')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::GetAllHostsMulticast() [member function]
+    cls.add_method('GetAllHostsMulticast', 
+                   'ns3::Ipv6Address', 
+                   [], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::GetAllNodesMulticast() [member function]
+    cls.add_method('GetAllNodesMulticast', 
+                   'ns3::Ipv6Address', 
+                   [], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::GetAllRoutersMulticast() [member function]
+    cls.add_method('GetAllRoutersMulticast', 
+                   'ns3::Ipv6Address', 
+                   [], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::GetAny() [member function]
+    cls.add_method('GetAny', 
+                   'ns3::Ipv6Address', 
+                   [], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): void ns3::Ipv6Address::GetBytes(uint8_t * buf) const [member function]
+    cls.add_method('GetBytes', 
+                   'void', 
+                   [param('uint8_t *', 'buf')], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): ns3::Ipv4Address ns3::Ipv6Address::GetIpv4MappedAddress() const [member function]
+    cls.add_method('GetIpv4MappedAddress', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::GetLoopback() [member function]
+    cls.add_method('GetLoopback', 
+                   'ns3::Ipv6Address', 
+                   [], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::GetOnes() [member function]
+    cls.add_method('GetOnes', 
+                   'ns3::Ipv6Address', 
+                   [], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::GetZero() [member function]
+    cls.add_method('GetZero', 
+                   'ns3::Ipv6Address', 
+                   [], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllHostsMulticast() const [member function]
+    cls.add_method('IsAllHostsMulticast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllNodesMulticast() const [member function]
+    cls.add_method('IsAllNodesMulticast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllRoutersMulticast() const [member function]
+    cls.add_method('IsAllRoutersMulticast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAny() const [member function]
+    cls.add_method('IsAny', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
+    cls.add_method('IsEqual', 
+                   'bool', 
+                   [param('ns3::Ipv6Address const &', 'other')], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() const [member function]
+    cls.add_method('IsIpv4MappedAddress', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsLinkLocal() const [member function]
+    cls.add_method('IsLinkLocal', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsLinkLocalMulticast() const [member function]
+    cls.add_method('IsLinkLocalMulticast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsLocalhost() const [member function]
+    cls.add_method('IsLocalhost', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): static bool ns3::Ipv6Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsMulticast() const [member function]
+    cls.add_method('IsMulticast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsSolicitedMulticast() const [member function]
+    cls.add_method('IsSolicitedMulticast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac48Address', 'mac')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
+    cls.add_method('MakeIpv4MappedAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Ipv4Address', 'addr')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeSolicitedAddress(ns3::Ipv6Address addr) [member function]
+    cls.add_method('MakeSolicitedAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Ipv6Address', 'addr')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): void ns3::Ipv6Address::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): void ns3::Ipv6Address::Serialize(uint8_t * buf) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('uint8_t *', 'buf')], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): void ns3::Ipv6Address::Set(char const * address) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('char const *', 'address')])
+    ## ipv6-address.h (module 'network'): void ns3::Ipv6Address::Set(uint8_t * address) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('uint8_t *', 'address')])
+    return
+
+def register_Ns3Ipv6Prefix_methods(root_module, cls):
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix::Ipv6Prefix() [constructor]
+    cls.add_constructor([])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix::Ipv6Prefix(uint8_t * prefix) [constructor]
+    cls.add_constructor([param('uint8_t *', 'prefix')])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix::Ipv6Prefix(char const * prefix) [constructor]
+    cls.add_constructor([param('char const *', 'prefix')])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix::Ipv6Prefix(uint8_t prefix) [constructor]
+    cls.add_constructor([param('uint8_t', 'prefix')])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix::Ipv6Prefix(ns3::Ipv6Prefix const & prefix) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv6Prefix const &', 'prefix')])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix::Ipv6Prefix(ns3::Ipv6Prefix const * prefix) [constructor]
+    cls.add_constructor([param('ns3::Ipv6Prefix const *', 'prefix')])
+    ## ipv6-address.h (module 'network'): void ns3::Ipv6Prefix::GetBytes(uint8_t * buf) const [member function]
+    cls.add_method('GetBytes', 
+                   'void', 
+                   [param('uint8_t *', 'buf')], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Prefix ns3::Ipv6Prefix::GetLoopback() [member function]
+    cls.add_method('GetLoopback', 
+                   'ns3::Ipv6Prefix', 
+                   [], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Prefix ns3::Ipv6Prefix::GetOnes() [member function]
+    cls.add_method('GetOnes', 
+                   'ns3::Ipv6Prefix', 
+                   [], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): uint8_t ns3::Ipv6Prefix::GetPrefixLength() const [member function]
+    cls.add_method('GetPrefixLength', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Prefix ns3::Ipv6Prefix::GetZero() [member function]
+    cls.add_method('GetZero', 
+                   'ns3::Ipv6Prefix', 
+                   [], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Prefix::IsEqual(ns3::Ipv6Prefix const & other) const [member function]
+    cls.add_method('IsEqual', 
+                   'bool', 
+                   [param('ns3::Ipv6Prefix const &', 'other')], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Prefix::IsMatch(ns3::Ipv6Address a, ns3::Ipv6Address b) const [member function]
+    cls.add_method('IsMatch', 
+                   'bool', 
+                   [param('ns3::Ipv6Address', 'a'), param('ns3::Ipv6Address', 'b')], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): void ns3::Ipv6Prefix::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True)
+    return
+
+def register_Ns3Mac48Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(ns3::Mac48Address const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetBroadcast() [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv4Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv4Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv6Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast6Prefix() [member function]
+    cls.add_method('GetMulticast6Prefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticastPrefix() [member function]
+    cls.add_method('GetMulticastPrefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsBroadcast() const [member function]
+    cls.add_method('IsBroadcast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsGroup() const [member function]
+    cls.add_method('IsGroup', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static bool ns3::Mac48Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
 def register_Ns3MpiInterface_methods(root_module, cls):
     ## mpi-interface.h (module 'mpi'): ns3::MpiInterface::MpiInterface() [constructor]
     cls.add_constructor([])
@@ -1008,7 +1637,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -2029,11 +2658,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -2086,6 +2725,206 @@
                    is_const=True, visibility='private', is_virtual=True)
     return
 
+def register_Ns3Ipv4AddressChecker_methods(root_module, cls):
+    ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker::Ipv4AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker::Ipv4AddressChecker(ns3::Ipv4AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Ipv4AddressValue_methods(root_module, cls):
+    ## ipv4-address.h (module 'network'): ns3::Ipv4AddressValue::Ipv4AddressValue() [constructor]
+    cls.add_constructor([])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4AddressValue::Ipv4AddressValue(ns3::Ipv4AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4AddressValue const &', 'arg0')])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4AddressValue::Ipv4AddressValue(ns3::Ipv4Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Ipv4Address const &', 'value')])
+    ## ipv4-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Ipv4AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## ipv4-address.h (module 'network'): ns3::Ipv4Address ns3::Ipv4AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## ipv4-address.h (module 'network'): std::string ns3::Ipv4AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-address.h (module 'network'): void ns3::Ipv4AddressValue::Set(ns3::Ipv4Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Ipv4Address const &', 'value')])
+    return
+
+def register_Ns3Ipv4MaskChecker_methods(root_module, cls):
+    ## ipv4-address.h (module 'network'): ns3::Ipv4MaskChecker::Ipv4MaskChecker() [constructor]
+    cls.add_constructor([])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4MaskChecker::Ipv4MaskChecker(ns3::Ipv4MaskChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4MaskChecker const &', 'arg0')])
+    return
+
+def register_Ns3Ipv4MaskValue_methods(root_module, cls):
+    ## ipv4-address.h (module 'network'): ns3::Ipv4MaskValue::Ipv4MaskValue() [constructor]
+    cls.add_constructor([])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4MaskValue::Ipv4MaskValue(ns3::Ipv4MaskValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4MaskValue const &', 'arg0')])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4MaskValue::Ipv4MaskValue(ns3::Ipv4Mask const & value) [constructor]
+    cls.add_constructor([param('ns3::Ipv4Mask const &', 'value')])
+    ## ipv4-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Ipv4MaskValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4MaskValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## ipv4-address.h (module 'network'): ns3::Ipv4Mask ns3::Ipv4MaskValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Ipv4Mask', 
+                   [], 
+                   is_const=True)
+    ## ipv4-address.h (module 'network'): std::string ns3::Ipv4MaskValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-address.h (module 'network'): void ns3::Ipv4MaskValue::Set(ns3::Ipv4Mask const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Ipv4Mask const &', 'value')])
+    return
+
+def register_Ns3Ipv6AddressChecker_methods(root_module, cls):
+    ## ipv6-address.h (module 'network'): ns3::Ipv6AddressChecker::Ipv6AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6AddressChecker::Ipv6AddressChecker(ns3::Ipv6AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv6AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Ipv6AddressValue_methods(root_module, cls):
+    ## ipv6-address.h (module 'network'): ns3::Ipv6AddressValue::Ipv6AddressValue() [constructor]
+    cls.add_constructor([])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6AddressValue::Ipv6AddressValue(ns3::Ipv6AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv6AddressValue const &', 'arg0')])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6AddressValue::Ipv6AddressValue(ns3::Ipv6Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Ipv6Address const &', 'value')])
+    ## ipv6-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Ipv6AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Address ns3::Ipv6AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Ipv6Address', 
+                   [], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): std::string ns3::Ipv6AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-address.h (module 'network'): void ns3::Ipv6AddressValue::Set(ns3::Ipv6Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Ipv6Address const &', 'value')])
+    return
+
+def register_Ns3Ipv6PrefixChecker_methods(root_module, cls):
+    ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker::Ipv6PrefixChecker() [constructor]
+    cls.add_constructor([])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker::Ipv6PrefixChecker(ns3::Ipv6PrefixChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv6PrefixChecker const &', 'arg0')])
+    return
+
+def register_Ns3Ipv6PrefixValue_methods(root_module, cls):
+    ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue::Ipv6PrefixValue() [constructor]
+    cls.add_constructor([])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue::Ipv6PrefixValue(ns3::Ipv6PrefixValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv6PrefixValue const &', 'arg0')])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue::Ipv6PrefixValue(ns3::Ipv6Prefix const & value) [constructor]
+    cls.add_constructor([param('ns3::Ipv6Prefix const &', 'value')])
+    ## ipv6-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Ipv6PrefixValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6PrefixValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix ns3::Ipv6PrefixValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Ipv6Prefix', 
+                   [], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): std::string ns3::Ipv6PrefixValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-address.h (module 'network'): void ns3::Ipv6PrefixValue::Set(ns3::Ipv6Prefix const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Ipv6Prefix const &', 'value')])
+    return
+
+def register_Ns3Mac48AddressChecker_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker(ns3::Mac48AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac48AddressValue_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressValue const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'value')])
+    ## mac48-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac48AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## mac48-address.h (module 'network'): ns3::Mac48Address ns3::Mac48AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): std::string ns3::Mac48AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48AddressValue::Set(ns3::Mac48Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac48Address const &', 'value')])
+    return
+
 def register_Ns3MpiReceiver_methods(root_module, cls):
     ## mpi-receiver.h (module 'mpi'): ns3::MpiReceiver::MpiReceiver() [constructor]
     cls.add_constructor([])
@@ -2413,6 +3252,46 @@
                    [param('ns3::TypeId const &', 'value')])
     return
 
+def register_Ns3AddressChecker_methods(root_module, cls):
+    ## address.h (module 'network'): ns3::AddressChecker::AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## address.h (module 'network'): ns3::AddressChecker::AddressChecker(ns3::AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3AddressValue_methods(root_module, cls):
+    ## address.h (module 'network'): ns3::AddressValue::AddressValue() [constructor]
+    cls.add_constructor([])
+    ## address.h (module 'network'): ns3::AddressValue::AddressValue(ns3::AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AddressValue const &', 'arg0')])
+    ## address.h (module 'network'): ns3::AddressValue::AddressValue(ns3::Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Address const &', 'value')])
+    ## address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## address.h (module 'network'): bool ns3::AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## address.h (module 'network'): ns3::Address ns3::AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Address', 
+                   [], 
+                   is_const=True)
+    ## address.h (module 'network'): std::string ns3::AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## address.h (module 'network'): void ns3::AddressValue::Set(ns3::Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Address const &', 'value')])
+    return
+
 def register_Ns3HashImplementation_methods(root_module, cls):
     ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
@@ -2522,6 +3401,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -2534,6 +3414,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.23/src/mpi/bindings/modulegen__gcc_LP64.py ns-3.24/src/mpi/bindings/modulegen__gcc_LP64.py
--- ns-3.23/src/mpi/bindings/modulegen__gcc_LP64.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mpi/bindings/modulegen__gcc_LP64.py	2015-09-15 11:18:44.000000000 -0700
@@ -20,6 +20,10 @@
 def register_types(module):
     root_module = module.get_root()
     
+    ## address.h (module 'network'): ns3::Address [class]
+    module.add_class('Address', import_from_module='ns.network')
+    ## address.h (module 'network'): ns3::Address::MaxSize_e [enumeration]
+    module.add_enum('MaxSize_e', ['MAX_SIZE'], outer_class=root_module['ns3::Address'], import_from_module='ns.network')
     ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList [class]
     module.add_class('AttributeConstructionList', import_from_module='ns.core')
     ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item [struct]
@@ -42,6 +46,22 @@
     module.add_class('CallbackBase', import_from_module='ns.core')
     ## hash.h (module 'core'): ns3::Hasher [class]
     module.add_class('Hasher', import_from_module='ns.core')
+    ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
+    module.add_class('Ipv4Address', import_from_module='ns.network')
+    ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
+    root_module['ns3::Ipv4Address'].implicitly_converts_to(root_module['ns3::Address'])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4Mask [class]
+    module.add_class('Ipv4Mask', import_from_module='ns.network')
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Address [class]
+    module.add_class('Ipv6Address', import_from_module='ns.network')
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Address [class]
+    root_module['ns3::Ipv6Address'].implicitly_converts_to(root_module['ns3::Address'])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix [class]
+    module.add_class('Ipv6Prefix', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    module.add_class('Mac48Address', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    root_module['ns3::Mac48Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## mpi-interface.h (module 'mpi'): ns3::MpiInterface [class]
     module.add_class('MpiInterface')
     ## object-base.h (module 'core'): ns3::ObjectBase [class]
@@ -138,6 +158,26 @@
     module.add_class('CallbackValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
+    module.add_class('Ipv4AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4AddressValue [class]
+    module.add_class('Ipv4AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4MaskChecker [class]
+    module.add_class('Ipv4MaskChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4MaskValue [class]
+    module.add_class('Ipv4MaskValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6AddressChecker [class]
+    module.add_class('Ipv6AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6AddressValue [class]
+    module.add_class('Ipv6AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker [class]
+    module.add_class('Ipv6PrefixChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue [class]
+    module.add_class('Ipv6PrefixValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker [class]
+    module.add_class('Mac48AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue [class]
+    module.add_class('Mac48AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## mpi-receiver.h (module 'mpi'): ns3::MpiReceiver [class]
     module.add_class('MpiReceiver', parent=root_module['ns3::Object'])
     ## nix-vector.h (module 'network'): ns3::NixVector [class]
@@ -150,6 +190,10 @@
     module.add_class('TypeIdChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## type-id.h (module 'core'): ns3::TypeIdValue [class]
     module.add_class('TypeIdValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## address.h (module 'network'): ns3::AddressChecker [class]
+    module.add_class('AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## address.h (module 'network'): ns3::AddressValue [class]
+    module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -162,6 +206,12 @@
     nested_module = module.add_cpp_namespace('Hash')
     register_types_ns3_Hash(nested_module)
     
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -197,7 +247,15 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_methods(root_module):
+    register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
     register_Ns3AttributeConstructionListItem_methods(root_module, root_module['ns3::AttributeConstructionList::Item'])
     register_Ns3Buffer_methods(root_module, root_module['ns3::Buffer'])
@@ -209,6 +267,11 @@
     register_Ns3ByteTagListIteratorItem_methods(root_module, root_module['ns3::ByteTagList::Iterator::Item'])
     register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
     register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
+    register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
+    register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
+    register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
+    register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
+    register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
     register_Ns3MpiInterface_methods(root_module, root_module['ns3::MpiInterface'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
     register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
@@ -251,12 +314,24 @@
     register_Ns3CallbackImplBase_methods(root_module, root_module['ns3::CallbackImplBase'])
     register_Ns3CallbackValue_methods(root_module, root_module['ns3::CallbackValue'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
+    register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
+    register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
+    register_Ns3Ipv4MaskChecker_methods(root_module, root_module['ns3::Ipv4MaskChecker'])
+    register_Ns3Ipv4MaskValue_methods(root_module, root_module['ns3::Ipv4MaskValue'])
+    register_Ns3Ipv6AddressChecker_methods(root_module, root_module['ns3::Ipv6AddressChecker'])
+    register_Ns3Ipv6AddressValue_methods(root_module, root_module['ns3::Ipv6AddressValue'])
+    register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
+    register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
+    register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
+    register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3MpiReceiver_methods(root_module, root_module['ns3::MpiReceiver'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
+    register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
+    register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
     register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
     register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
@@ -264,6 +339,76 @@
     register_Ns3HashFunctionMurmur3_methods(root_module, root_module['ns3::Hash::Function::Murmur3'])
     return
 
+def register_Ns3Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## address.h (module 'network'): ns3::Address::Address() [constructor]
+    cls.add_constructor([])
+    ## address.h (module 'network'): ns3::Address::Address(uint8_t type, uint8_t const * buffer, uint8_t len) [constructor]
+    cls.add_constructor([param('uint8_t', 'type'), param('uint8_t const *', 'buffer'), param('uint8_t', 'len')])
+    ## address.h (module 'network'): ns3::Address::Address(ns3::Address const & address) [copy constructor]
+    cls.add_constructor([param('ns3::Address const &', 'address')])
+    ## address.h (module 'network'): bool ns3::Address::CheckCompatible(uint8_t type, uint8_t len) const [member function]
+    cls.add_method('CheckCompatible', 
+                   'bool', 
+                   [param('uint8_t', 'type'), param('uint8_t', 'len')], 
+                   is_const=True)
+    ## address.h (module 'network'): uint32_t ns3::Address::CopyAllFrom(uint8_t const * buffer, uint8_t len) [member function]
+    cls.add_method('CopyAllFrom', 
+                   'uint32_t', 
+                   [param('uint8_t const *', 'buffer'), param('uint8_t', 'len')])
+    ## address.h (module 'network'): uint32_t ns3::Address::CopyAllTo(uint8_t * buffer, uint8_t len) const [member function]
+    cls.add_method('CopyAllTo', 
+                   'uint32_t', 
+                   [param('uint8_t *', 'buffer'), param('uint8_t', 'len')], 
+                   is_const=True)
+    ## address.h (module 'network'): uint32_t ns3::Address::CopyFrom(uint8_t const * buffer, uint8_t len) [member function]
+    cls.add_method('CopyFrom', 
+                   'uint32_t', 
+                   [param('uint8_t const *', 'buffer'), param('uint8_t', 'len')])
+    ## address.h (module 'network'): uint32_t ns3::Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'uint32_t', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## address.h (module 'network'): void ns3::Address::Deserialize(ns3::TagBuffer buffer) [member function]
+    cls.add_method('Deserialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'buffer')])
+    ## address.h (module 'network'): uint8_t ns3::Address::GetLength() const [member function]
+    cls.add_method('GetLength', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## address.h (module 'network'): uint32_t ns3::Address::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## address.h (module 'network'): bool ns3::Address::IsInvalid() const [member function]
+    cls.add_method('IsInvalid', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## address.h (module 'network'): bool ns3::Address::IsMatchingType(uint8_t type) const [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('uint8_t', 'type')], 
+                   is_const=True)
+    ## address.h (module 'network'): static uint8_t ns3::Address::Register() [member function]
+    cls.add_method('Register', 
+                   'uint8_t', 
+                   [], 
+                   is_static=True)
+    ## address.h (module 'network'): void ns3::Address::Serialize(ns3::TagBuffer buffer) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'buffer')], 
+                   is_const=True)
+    return
+
 def register_Ns3AttributeConstructionList_methods(root_module, cls):
     ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::AttributeConstructionList(ns3::AttributeConstructionList const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::AttributeConstructionList const &', 'arg0')])
@@ -312,17 +457,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -344,11 +489,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -358,16 +498,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -605,14 +735,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -673,11 +807,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3Hasher_methods(root_module, cls):
@@ -709,6 +838,506 @@
                    [])
     return
 
+def register_Ns3Ipv4Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## ipv4-address.h (module 'network'): ns3::Ipv4Address::Ipv4Address(ns3::Ipv4Address const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4Address const &', 'arg0')])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4Address::Ipv4Address() [constructor]
+    cls.add_constructor([])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4Address::Ipv4Address(uint32_t address) [constructor]
+    cls.add_constructor([param('uint32_t', 'address')])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4Address::Ipv4Address(char const * address) [constructor]
+    cls.add_constructor([param('char const *', 'address')])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4Address ns3::Ipv4Address::CombineMask(ns3::Ipv4Mask const & mask) const [member function]
+    cls.add_method('CombineMask', 
+                   'ns3::Ipv4Address', 
+                   [param('ns3::Ipv4Mask const &', 'mask')], 
+                   is_const=True)
+    ## ipv4-address.h (module 'network'): static ns3::Ipv4Address ns3::Ipv4Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Ipv4Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## ipv4-address.h (module 'network'): static ns3::Ipv4Address ns3::Ipv4Address::Deserialize(uint8_t const * buf) [member function]
+    cls.add_method('Deserialize', 
+                   'ns3::Ipv4Address', 
+                   [param('uint8_t const *', 'buf')], 
+                   is_static=True)
+    ## ipv4-address.h (module 'network'): uint32_t ns3::Ipv4Address::Get() const [member function]
+    cls.add_method('Get', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## ipv4-address.h (module 'network'): static ns3::Ipv4Address ns3::Ipv4Address::GetAny() [member function]
+    cls.add_method('GetAny', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_static=True)
+    ## ipv4-address.h (module 'network'): static ns3::Ipv4Address ns3::Ipv4Address::GetBroadcast() [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_static=True)
+    ## ipv4-address.h (module 'network'): static ns3::Ipv4Address ns3::Ipv4Address::GetLoopback() [member function]
+    cls.add_method('GetLoopback', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_static=True)
+    ## ipv4-address.h (module 'network'): ns3::Ipv4Address ns3::Ipv4Address::GetSubnetDirectedBroadcast(ns3::Ipv4Mask const & mask) const [member function]
+    cls.add_method('GetSubnetDirectedBroadcast', 
+                   'ns3::Ipv4Address', 
+                   [param('ns3::Ipv4Mask const &', 'mask')], 
+                   is_const=True)
+    ## ipv4-address.h (module 'network'): static ns3::Ipv4Address ns3::Ipv4Address::GetZero() [member function]
+    cls.add_method('GetZero', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsBroadcast() const [member function]
+    cls.add_method('IsBroadcast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsEqual(ns3::Ipv4Address const & other) const [member function]
+    cls.add_method('IsEqual', 
+                   'bool', 
+                   [param('ns3::Ipv4Address const &', 'other')], 
+                   is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsLocalMulticast() const [member function]
+    cls.add_method('IsLocalMulticast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ipv4-address.h (module 'network'): static bool ns3::Ipv4Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsMulticast() const [member function]
+    cls.add_method('IsMulticast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsSubnetDirectedBroadcast(ns3::Ipv4Mask const & mask) const [member function]
+    cls.add_method('IsSubnetDirectedBroadcast', 
+                   'bool', 
+                   [param('ns3::Ipv4Mask const &', 'mask')], 
+                   is_const=True)
+    ## ipv4-address.h (module 'network'): void ns3::Ipv4Address::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True)
+    ## ipv4-address.h (module 'network'): void ns3::Ipv4Address::Serialize(uint8_t * buf) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('uint8_t *', 'buf')], 
+                   is_const=True)
+    ## ipv4-address.h (module 'network'): void ns3::Ipv4Address::Set(uint32_t address) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('uint32_t', 'address')])
+    ## ipv4-address.h (module 'network'): void ns3::Ipv4Address::Set(char const * address) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('char const *', 'address')])
+    return
+
+def register_Ns3Ipv4Mask_methods(root_module, cls):
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## ipv4-address.h (module 'network'): ns3::Ipv4Mask::Ipv4Mask(ns3::Ipv4Mask const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4Mask const &', 'arg0')])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4Mask::Ipv4Mask() [constructor]
+    cls.add_constructor([])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4Mask::Ipv4Mask(uint32_t mask) [constructor]
+    cls.add_constructor([param('uint32_t', 'mask')])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4Mask::Ipv4Mask(char const * mask) [constructor]
+    cls.add_constructor([param('char const *', 'mask')])
+    ## ipv4-address.h (module 'network'): uint32_t ns3::Ipv4Mask::Get() const [member function]
+    cls.add_method('Get', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## ipv4-address.h (module 'network'): uint32_t ns3::Ipv4Mask::GetInverse() const [member function]
+    cls.add_method('GetInverse', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## ipv4-address.h (module 'network'): static ns3::Ipv4Mask ns3::Ipv4Mask::GetLoopback() [member function]
+    cls.add_method('GetLoopback', 
+                   'ns3::Ipv4Mask', 
+                   [], 
+                   is_static=True)
+    ## ipv4-address.h (module 'network'): static ns3::Ipv4Mask ns3::Ipv4Mask::GetOnes() [member function]
+    cls.add_method('GetOnes', 
+                   'ns3::Ipv4Mask', 
+                   [], 
+                   is_static=True)
+    ## ipv4-address.h (module 'network'): uint16_t ns3::Ipv4Mask::GetPrefixLength() const [member function]
+    cls.add_method('GetPrefixLength', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ipv4-address.h (module 'network'): static ns3::Ipv4Mask ns3::Ipv4Mask::GetZero() [member function]
+    cls.add_method('GetZero', 
+                   'ns3::Ipv4Mask', 
+                   [], 
+                   is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Mask::IsEqual(ns3::Ipv4Mask other) const [member function]
+    cls.add_method('IsEqual', 
+                   'bool', 
+                   [param('ns3::Ipv4Mask', 'other')], 
+                   is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Mask::IsMatch(ns3::Ipv4Address a, ns3::Ipv4Address b) const [member function]
+    cls.add_method('IsMatch', 
+                   'bool', 
+                   [param('ns3::Ipv4Address', 'a'), param('ns3::Ipv4Address', 'b')], 
+                   is_const=True)
+    ## ipv4-address.h (module 'network'): void ns3::Ipv4Mask::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True)
+    ## ipv4-address.h (module 'network'): void ns3::Ipv4Mask::Set(uint32_t mask) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('uint32_t', 'mask')])
+    return
+
+def register_Ns3Ipv6Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Address::Ipv6Address() [constructor]
+    cls.add_constructor([])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Address::Ipv6Address(char const * address) [constructor]
+    cls.add_constructor([param('char const *', 'address')])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Address::Ipv6Address(uint8_t * address) [constructor]
+    cls.add_constructor([param('uint8_t *', 'address')])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Address::Ipv6Address(ns3::Ipv6Address const & addr) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv6Address const &', 'addr')])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Address::Ipv6Address(ns3::Ipv6Address const * addr) [constructor]
+    cls.add_constructor([param('ns3::Ipv6Address const *', 'addr')])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Address ns3::Ipv6Address::CombinePrefix(ns3::Ipv6Prefix const & prefix) [member function]
+    cls.add_method('CombinePrefix', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Ipv6Prefix const &', 'prefix')])
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::Deserialize(uint8_t const * buf) [member function]
+    cls.add_method('Deserialize', 
+                   'ns3::Ipv6Address', 
+                   [param('uint8_t const *', 'buf')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::GetAllHostsMulticast() [member function]
+    cls.add_method('GetAllHostsMulticast', 
+                   'ns3::Ipv6Address', 
+                   [], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::GetAllNodesMulticast() [member function]
+    cls.add_method('GetAllNodesMulticast', 
+                   'ns3::Ipv6Address', 
+                   [], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::GetAllRoutersMulticast() [member function]
+    cls.add_method('GetAllRoutersMulticast', 
+                   'ns3::Ipv6Address', 
+                   [], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::GetAny() [member function]
+    cls.add_method('GetAny', 
+                   'ns3::Ipv6Address', 
+                   [], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): void ns3::Ipv6Address::GetBytes(uint8_t * buf) const [member function]
+    cls.add_method('GetBytes', 
+                   'void', 
+                   [param('uint8_t *', 'buf')], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): ns3::Ipv4Address ns3::Ipv6Address::GetIpv4MappedAddress() const [member function]
+    cls.add_method('GetIpv4MappedAddress', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::GetLoopback() [member function]
+    cls.add_method('GetLoopback', 
+                   'ns3::Ipv6Address', 
+                   [], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::GetOnes() [member function]
+    cls.add_method('GetOnes', 
+                   'ns3::Ipv6Address', 
+                   [], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::GetZero() [member function]
+    cls.add_method('GetZero', 
+                   'ns3::Ipv6Address', 
+                   [], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllHostsMulticast() const [member function]
+    cls.add_method('IsAllHostsMulticast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllNodesMulticast() const [member function]
+    cls.add_method('IsAllNodesMulticast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllRoutersMulticast() const [member function]
+    cls.add_method('IsAllRoutersMulticast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAny() const [member function]
+    cls.add_method('IsAny', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsDocumentation() const [member function]
+    cls.add_method('IsDocumentation', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsEqual(ns3::Ipv6Address const & other) const [member function]
+    cls.add_method('IsEqual', 
+                   'bool', 
+                   [param('ns3::Ipv6Address const &', 'other')], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsIpv4MappedAddress() const [member function]
+    cls.add_method('IsIpv4MappedAddress', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsLinkLocal() const [member function]
+    cls.add_method('IsLinkLocal', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsLinkLocalMulticast() const [member function]
+    cls.add_method('IsLinkLocalMulticast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsLocalhost() const [member function]
+    cls.add_method('IsLocalhost', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): static bool ns3::Ipv6Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsMulticast() const [member function]
+    cls.add_method('IsMulticast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsSolicitedMulticast() const [member function]
+    cls.add_method('IsSolicitedMulticast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac16Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac48Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac48Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredAddress(ns3::Mac64Address addr, ns3::Ipv6Address prefix) [member function]
+    cls.add_method('MakeAutoconfiguredAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'addr'), param('ns3::Ipv6Address', 'prefix')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac16Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac16Address', 'mac')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac48Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac48Address', 'mac')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeAutoconfiguredLinkLocalAddress(ns3::Mac64Address mac) [member function]
+    cls.add_method('MakeAutoconfiguredLinkLocalAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Mac64Address', 'mac')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeIpv4MappedAddress(ns3::Ipv4Address addr) [member function]
+    cls.add_method('MakeIpv4MappedAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Ipv4Address', 'addr')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Address ns3::Ipv6Address::MakeSolicitedAddress(ns3::Ipv6Address addr) [member function]
+    cls.add_method('MakeSolicitedAddress', 
+                   'ns3::Ipv6Address', 
+                   [param('ns3::Ipv6Address', 'addr')], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): void ns3::Ipv6Address::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): void ns3::Ipv6Address::Serialize(uint8_t * buf) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('uint8_t *', 'buf')], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): void ns3::Ipv6Address::Set(char const * address) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('char const *', 'address')])
+    ## ipv6-address.h (module 'network'): void ns3::Ipv6Address::Set(uint8_t * address) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('uint8_t *', 'address')])
+    return
+
+def register_Ns3Ipv6Prefix_methods(root_module, cls):
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix::Ipv6Prefix() [constructor]
+    cls.add_constructor([])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix::Ipv6Prefix(uint8_t * prefix) [constructor]
+    cls.add_constructor([param('uint8_t *', 'prefix')])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix::Ipv6Prefix(char const * prefix) [constructor]
+    cls.add_constructor([param('char const *', 'prefix')])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix::Ipv6Prefix(uint8_t prefix) [constructor]
+    cls.add_constructor([param('uint8_t', 'prefix')])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix::Ipv6Prefix(ns3::Ipv6Prefix const & prefix) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv6Prefix const &', 'prefix')])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix::Ipv6Prefix(ns3::Ipv6Prefix const * prefix) [constructor]
+    cls.add_constructor([param('ns3::Ipv6Prefix const *', 'prefix')])
+    ## ipv6-address.h (module 'network'): void ns3::Ipv6Prefix::GetBytes(uint8_t * buf) const [member function]
+    cls.add_method('GetBytes', 
+                   'void', 
+                   [param('uint8_t *', 'buf')], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Prefix ns3::Ipv6Prefix::GetLoopback() [member function]
+    cls.add_method('GetLoopback', 
+                   'ns3::Ipv6Prefix', 
+                   [], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Prefix ns3::Ipv6Prefix::GetOnes() [member function]
+    cls.add_method('GetOnes', 
+                   'ns3::Ipv6Prefix', 
+                   [], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): uint8_t ns3::Ipv6Prefix::GetPrefixLength() const [member function]
+    cls.add_method('GetPrefixLength', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): static ns3::Ipv6Prefix ns3::Ipv6Prefix::GetZero() [member function]
+    cls.add_method('GetZero', 
+                   'ns3::Ipv6Prefix', 
+                   [], 
+                   is_static=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Prefix::IsEqual(ns3::Ipv6Prefix const & other) const [member function]
+    cls.add_method('IsEqual', 
+                   'bool', 
+                   [param('ns3::Ipv6Prefix const &', 'other')], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6Prefix::IsMatch(ns3::Ipv6Address a, ns3::Ipv6Address b) const [member function]
+    cls.add_method('IsMatch', 
+                   'bool', 
+                   [param('ns3::Ipv6Address', 'a'), param('ns3::Ipv6Address', 'b')], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): void ns3::Ipv6Prefix::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True)
+    return
+
+def register_Ns3Mac48Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(ns3::Mac48Address const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetBroadcast() [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv4Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv4Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv6Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast6Prefix() [member function]
+    cls.add_method('GetMulticast6Prefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticastPrefix() [member function]
+    cls.add_method('GetMulticastPrefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsBroadcast() const [member function]
+    cls.add_method('IsBroadcast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsGroup() const [member function]
+    cls.add_method('IsGroup', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static bool ns3::Mac48Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
 def register_Ns3MpiInterface_methods(root_module, cls):
     ## mpi-interface.h (module 'mpi'): ns3::MpiInterface::MpiInterface() [constructor]
     cls.add_constructor([])
@@ -1008,7 +1637,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -2029,11 +2658,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -2086,6 +2725,206 @@
                    is_const=True, visibility='private', is_virtual=True)
     return
 
+def register_Ns3Ipv4AddressChecker_methods(root_module, cls):
+    ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker::Ipv4AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker::Ipv4AddressChecker(ns3::Ipv4AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Ipv4AddressValue_methods(root_module, cls):
+    ## ipv4-address.h (module 'network'): ns3::Ipv4AddressValue::Ipv4AddressValue() [constructor]
+    cls.add_constructor([])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4AddressValue::Ipv4AddressValue(ns3::Ipv4AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4AddressValue const &', 'arg0')])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4AddressValue::Ipv4AddressValue(ns3::Ipv4Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Ipv4Address const &', 'value')])
+    ## ipv4-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Ipv4AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## ipv4-address.h (module 'network'): ns3::Ipv4Address ns3::Ipv4AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## ipv4-address.h (module 'network'): std::string ns3::Ipv4AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-address.h (module 'network'): void ns3::Ipv4AddressValue::Set(ns3::Ipv4Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Ipv4Address const &', 'value')])
+    return
+
+def register_Ns3Ipv4MaskChecker_methods(root_module, cls):
+    ## ipv4-address.h (module 'network'): ns3::Ipv4MaskChecker::Ipv4MaskChecker() [constructor]
+    cls.add_constructor([])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4MaskChecker::Ipv4MaskChecker(ns3::Ipv4MaskChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4MaskChecker const &', 'arg0')])
+    return
+
+def register_Ns3Ipv4MaskValue_methods(root_module, cls):
+    ## ipv4-address.h (module 'network'): ns3::Ipv4MaskValue::Ipv4MaskValue() [constructor]
+    cls.add_constructor([])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4MaskValue::Ipv4MaskValue(ns3::Ipv4MaskValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4MaskValue const &', 'arg0')])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4MaskValue::Ipv4MaskValue(ns3::Ipv4Mask const & value) [constructor]
+    cls.add_constructor([param('ns3::Ipv4Mask const &', 'value')])
+    ## ipv4-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Ipv4MaskValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4MaskValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## ipv4-address.h (module 'network'): ns3::Ipv4Mask ns3::Ipv4MaskValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Ipv4Mask', 
+                   [], 
+                   is_const=True)
+    ## ipv4-address.h (module 'network'): std::string ns3::Ipv4MaskValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-address.h (module 'network'): void ns3::Ipv4MaskValue::Set(ns3::Ipv4Mask const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Ipv4Mask const &', 'value')])
+    return
+
+def register_Ns3Ipv6AddressChecker_methods(root_module, cls):
+    ## ipv6-address.h (module 'network'): ns3::Ipv6AddressChecker::Ipv6AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6AddressChecker::Ipv6AddressChecker(ns3::Ipv6AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv6AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Ipv6AddressValue_methods(root_module, cls):
+    ## ipv6-address.h (module 'network'): ns3::Ipv6AddressValue::Ipv6AddressValue() [constructor]
+    cls.add_constructor([])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6AddressValue::Ipv6AddressValue(ns3::Ipv6AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv6AddressValue const &', 'arg0')])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6AddressValue::Ipv6AddressValue(ns3::Ipv6Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Ipv6Address const &', 'value')])
+    ## ipv6-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Ipv6AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Address ns3::Ipv6AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Ipv6Address', 
+                   [], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): std::string ns3::Ipv6AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-address.h (module 'network'): void ns3::Ipv6AddressValue::Set(ns3::Ipv6Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Ipv6Address const &', 'value')])
+    return
+
+def register_Ns3Ipv6PrefixChecker_methods(root_module, cls):
+    ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker::Ipv6PrefixChecker() [constructor]
+    cls.add_constructor([])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker::Ipv6PrefixChecker(ns3::Ipv6PrefixChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv6PrefixChecker const &', 'arg0')])
+    return
+
+def register_Ns3Ipv6PrefixValue_methods(root_module, cls):
+    ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue::Ipv6PrefixValue() [constructor]
+    cls.add_constructor([])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue::Ipv6PrefixValue(ns3::Ipv6PrefixValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv6PrefixValue const &', 'arg0')])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue::Ipv6PrefixValue(ns3::Ipv6Prefix const & value) [constructor]
+    cls.add_constructor([param('ns3::Ipv6Prefix const &', 'value')])
+    ## ipv6-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Ipv6PrefixValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-address.h (module 'network'): bool ns3::Ipv6PrefixValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix ns3::Ipv6PrefixValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Ipv6Prefix', 
+                   [], 
+                   is_const=True)
+    ## ipv6-address.h (module 'network'): std::string ns3::Ipv6PrefixValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-address.h (module 'network'): void ns3::Ipv6PrefixValue::Set(ns3::Ipv6Prefix const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Ipv6Prefix const &', 'value')])
+    return
+
+def register_Ns3Mac48AddressChecker_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker(ns3::Mac48AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac48AddressValue_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressValue const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'value')])
+    ## mac48-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac48AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## mac48-address.h (module 'network'): ns3::Mac48Address ns3::Mac48AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): std::string ns3::Mac48AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48AddressValue::Set(ns3::Mac48Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac48Address const &', 'value')])
+    return
+
 def register_Ns3MpiReceiver_methods(root_module, cls):
     ## mpi-receiver.h (module 'mpi'): ns3::MpiReceiver::MpiReceiver() [constructor]
     cls.add_constructor([])
@@ -2413,6 +3252,46 @@
                    [param('ns3::TypeId const &', 'value')])
     return
 
+def register_Ns3AddressChecker_methods(root_module, cls):
+    ## address.h (module 'network'): ns3::AddressChecker::AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## address.h (module 'network'): ns3::AddressChecker::AddressChecker(ns3::AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3AddressValue_methods(root_module, cls):
+    ## address.h (module 'network'): ns3::AddressValue::AddressValue() [constructor]
+    cls.add_constructor([])
+    ## address.h (module 'network'): ns3::AddressValue::AddressValue(ns3::AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AddressValue const &', 'arg0')])
+    ## address.h (module 'network'): ns3::AddressValue::AddressValue(ns3::Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Address const &', 'value')])
+    ## address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## address.h (module 'network'): bool ns3::AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## address.h (module 'network'): ns3::Address ns3::AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Address', 
+                   [], 
+                   is_const=True)
+    ## address.h (module 'network'): std::string ns3::AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## address.h (module 'network'): void ns3::AddressValue::Set(ns3::Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Address const &', 'value')])
+    return
+
 def register_Ns3HashImplementation_methods(root_module, cls):
     ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
@@ -2522,6 +3401,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -2534,6 +3414,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.23/src/mpi/examples/third-distributed.cc ns-3.24/src/mpi/examples/third-distributed.cc
--- ns-3.23/src/mpi/examples/third-distributed.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mpi/examples/third-distributed.cc	2015-09-15 11:18:44.000000000 -0700
@@ -15,26 +15,24 @@
  */
 
 #include "ns3/core-module.h"
+#include "ns3/point-to-point-module.h"
 #include "ns3/network-module.h"
+#include "ns3/applications-module.h"
 #include "ns3/wifi-module.h"
 #include "ns3/mobility-module.h"
-#include "ns3/mpi-interface.h"
-#include "ns3/ipv4-global-routing-helper.h"
-#include "ns3/udp-echo-helper.h"
-#include "ns3/point-to-point-helper.h"
-#include "ns3/csma-helper.h"
-#include "ns3/internet-stack-helper.h"
-#include "ns3/ipv4-address-helper.h"
-#include "ns3/ipv4-interface-container.h"
+#include "ns3/csma-module.h"
+#include "ns3/internet-module.h"
 
-#ifdef NS3_MPI
-#include <mpi.h>
-#endif
+#include "ns3/mpi-module.h"
 
-// Default Network Topology (same as third.cc from tutorial)
+// Default Network Topology
+//
+// (same as third.cc from tutorial)
 // Distributed simulation, split along the p2p link
 // Number of wifi or csma nodes can be increased up to 250
-//
+//                          |
+//                 Rank 0   |   Rank 1
+// -------------------------|----------------------------
 //   Wifi 10.1.3.0
 //                 AP
 //  *    *    *    *
@@ -42,10 +40,7 @@
 // n5   n6   n7   n0 -------------- n1   n2   n3   n4
 //                   point-to-point  |    |    |    |
 //                                   ================
-//                          |          LAN 10.1.2.0
-//                          |
-//                 Rank 0   |   Rank 1
-// -------------------------|----------------------------
+//                                     LAN 10.1.2.0
 
 using namespace ns3;
 
@@ -54,20 +49,19 @@
 int 
 main (int argc, char *argv[])
 {
-#ifdef NS3_MPI
-
   bool verbose = true;
   uint32_t nCsma = 3;
   uint32_t nWifi = 3;
-  bool nullmsg = false;
   bool tracing = false;
+  bool nullmsg = false;
 
   CommandLine cmd;
   cmd.AddValue ("nCsma", "Number of \"extra\" CSMA nodes/devices", nCsma);
   cmd.AddValue ("nWifi", "Number of wifi STA devices", nWifi);
   cmd.AddValue ("verbose", "Tell echo applications to log if true", verbose);
-  cmd.AddValue ("nullmsg", "Enable the use of null-message synchronization", nullmsg);
   cmd.AddValue ("tracing", "Enable pcap tracing", tracing);
+  cmd.AddValue ("nullmsg", "Enable the use of null-message synchronization", nullmsg);
+
   cmd.Parse (argc,argv);
 
   // Check for valid number of csma or wifi nodes
@@ -75,7 +69,7 @@
   // soon become an issue
   if (nWifi > 250 || nCsma > 250)
     {
-      std::cout << "Too many wifi or csma nodes, max 200 each." << std::endl;
+      std::cout << "Too many wifi or csma nodes, no more than 250 each." << std::endl;
       return 1;
     }
 
@@ -85,6 +79,12 @@
       LogComponentEnable ("UdpEchoServerApplication", LOG_LEVEL_INFO);
     }
 
+  // Sequential fallback values
+  uint32_t systemId = 0;
+  uint32_t systemCount = 1;
+
+#ifdef NS3_MPI
+
   // Distributed simulation setup; by default use granted time window algorithm.
   if(nullmsg) 
     {
@@ -99,8 +99,8 @@
 
   MpiInterface::Enable (&argc, &argv);
 
-  uint32_t systemId = MpiInterface::GetSystemId ();
-  uint32_t systemCount = MpiInterface::GetSize ();
+  systemId = MpiInterface::GetSystemId ();
+  systemCount = MpiInterface::GetSize ();
 
   // Check for valid distributed parameters.
   // Must have 2 and only 2 Logical Processors (LPs)
@@ -110,10 +110,17 @@
       return 1;
     }
 
+#endif // NS3_MPI
 
+  // System id of Wifi side
+  uint32_t systemWifi = 0;
+  
+  // System id of CSMA side
+  uint32_t systemCsma = systemCount - 1;
+  
   NodeContainer p2pNodes;
-  Ptr<Node> p2pNode1 = CreateObject<Node> (0); // Create node with rank 0
-  Ptr<Node> p2pNode2 = CreateObject<Node> (1); // Create node with rank 1
+  Ptr<Node> p2pNode1 = CreateObject<Node> (systemWifi); // Create node with rank 0
+  Ptr<Node> p2pNode2 = CreateObject<Node> (systemCsma); // Create node with rank 1
   p2pNodes.Add (p2pNode1);
   p2pNodes.Add (p2pNode2);
 
@@ -126,7 +133,7 @@
 
   NodeContainer csmaNodes;
   csmaNodes.Add (p2pNodes.Get (1));
-  csmaNodes.Create (nCsma, 1);  // Create csma nodes with rank 1
+  csmaNodes.Create (nCsma, systemCsma);  // Create csma nodes with rank 1
 
   CsmaHelper csma;
   csma.SetChannelAttribute ("DataRate", StringValue ("100Mbps"));
@@ -136,7 +143,7 @@
   csmaDevices = csma.Install (csmaNodes);
 
   NodeContainer wifiStaNodes;
-  wifiStaNodes.Create (nWifi, 0); // Create wifi nodes with rank 0
+  wifiStaNodes.Create (nWifi, systemWifi); // Create wifi nodes with rank 0
   NodeContainer wifiApNode = p2pNodes.Get (0);
 
   YansWifiChannelHelper channel = YansWifiChannelHelper::Default ();
@@ -168,12 +175,12 @@
                                  "MinX", DoubleValue (0.0),
                                  "MinY", DoubleValue (0.0),
                                  "DeltaX", DoubleValue (5.0),
-                                 "DeltaY", DoubleValue (5.0),
-                                 "GridWidth", UintegerValue (10),
+                                 "DeltaY", DoubleValue (10.0),
+                                 "GridWidth", UintegerValue (3),
                                  "LayoutType", StringValue ("RowFirst"));
 
   mobility.SetMobilityModel ("ns3::RandomWalk2dMobilityModel",
-                             "Bounds", RectangleValue (Rectangle (-250, 250, -250, 250)));
+                             "Bounds", RectangleValue (Rectangle (-50, 50, -50, 50)));
   mobility.Install (wifiStaNodes);
 
   mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
@@ -198,25 +205,26 @@
   address.Assign (staDevices);
   address.Assign (apDevices);
 
-  // If this simulator has system id 1, then 
+  // If this rank is systemCsma, 
   // it should contain the server application, 
   // since it is on one of the csma nodes
-  if (systemId == 1)
+  if (systemId == systemCsma)
     {
       UdpEchoServerHelper echoServer (9);
+
       ApplicationContainer serverApps = echoServer.Install (csmaNodes.Get (nCsma));
       serverApps.Start (Seconds (1.0));
       serverApps.Stop (Seconds (10.0));
     }
 
-  // If the simulator has system id 0, then 
+  // If this rank is systemWifi
   // it should contain the client application, 
   // since it is on one of the wifi nodes
-  if (systemId == 0)
+  if (systemId == systemWifi)
     {
       UdpEchoClientHelper echoClient (csmaInterfaces.GetAddress (nCsma), 9);
       echoClient.SetAttribute ("MaxPackets", UintegerValue (1));
-      echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.)));
+      echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.0)));
       echoClient.SetAttribute ("PacketSize", UintegerValue (1024));
 
       ApplicationContainer clientApps = 
@@ -235,28 +243,28 @@
       // traced will be different.  For example, the ethernet pcap
       // will be empty for rank0, since these nodes are placed on 
       // on rank 1.  All ethernet traffic will take place on rank 1.
-      // Similar differences are seen in the p2p and wirless pcaps.
-      if (systemId == 0)
+      // Similar differences are seen in the p2p and wireless pcaps.
+      if (systemId == systemWifi)
         {
-          pointToPoint.EnablePcapAll ("third-distributed-rank0");
-          phy.EnablePcap ("third-distributed-rank0", apDevices.Get (0));
-          csma.EnablePcap ("third-distributed-rank0", csmaDevices.Get (0), true);
+          pointToPoint.EnablePcapAll ("third-distributed-wifi");
+          phy.EnablePcap ("third-distributed-wifi", apDevices.Get (0));
+          csma.EnablePcap ("third-distributed-wifi", csmaDevices.Get (0), true);
         }
-      else
+      else // systemCsma
         {
-          pointToPoint.EnablePcapAll ("third-distributed-rank1");
-          phy.EnablePcap ("third-distributed-rank1", apDevices.Get (0));
-          csma.EnablePcap ("third-distributed-rank1", csmaDevices.Get (0), true);
+          pointToPoint.EnablePcapAll ("third-distributed-csma");
+          phy.EnablePcap ("third-distributed-csma", apDevices.Get (0));
+          csma.EnablePcap ("third-distributed-csma", csmaDevices.Get (0), true);
         }
     }
 
   Simulator::Run ();
   Simulator::Destroy ();
+
+#ifdef NS3_MPI
   // Exit the MPI execution environment
   MpiInterface::Disable ();
-  return 0;
-
-#else
-  NS_FATAL_ERROR ("Can't use distributed simulator without MPI compiled in");
 #endif
+  
+  return 0;
 }
diff -Naur ns-3.23/src/mpi/model/distributed-simulator-impl.cc ns-3.24/src/mpi/model/distributed-simulator-impl.cc
--- ns-3.23/src/mpi/model/distributed-simulator-impl.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mpi/model/distributed-simulator-impl.cc	2015-09-15 11:18:44.000000000 -0700
@@ -82,7 +82,7 @@
 DistributedSimulatorImpl::GetTypeId (void)
 {
   static TypeId tid = TypeId ("ns3::DistributedSimulatorImpl")
-    .SetParent<Object> ()
+    .SetParent<SimulatorImpl> ()
     .SetGroupName ("Mpi")
     .AddConstructor<DistributedSimulatorImpl> ()
   ;
@@ -462,22 +462,22 @@
 }
 
 void
-DistributedSimulatorImpl::Stop (Time const &time)
+DistributedSimulatorImpl::Stop (Time const &delay)
 {
-  NS_LOG_FUNCTION (this << time.GetTimeStep ());
+  NS_LOG_FUNCTION (this << delay.GetTimeStep ());
 
-  Simulator::Schedule (time, &Simulator::Stop);
+  Simulator::Schedule (delay, &Simulator::Stop);
 }
 
 //
 // Schedule an event for a _relative_ time in the future.
 //
 EventId
-DistributedSimulatorImpl::Schedule (Time const &time, EventImpl *event)
+DistributedSimulatorImpl::Schedule (Time const &delay, EventImpl *event)
 {
-  NS_LOG_FUNCTION (this << time.GetTimeStep () << event);
+  NS_LOG_FUNCTION (this << delay.GetTimeStep () << event);
 
-  Time tAbsolute = time + TimeStep (m_currentTs);
+  Time tAbsolute = delay + TimeStep (m_currentTs);
 
   NS_ASSERT (tAbsolute.IsPositive ());
   NS_ASSERT (tAbsolute >= TimeStep (m_currentTs));
@@ -493,13 +493,13 @@
 }
 
 void
-DistributedSimulatorImpl::ScheduleWithContext (uint32_t context, Time const &time, EventImpl *event)
+DistributedSimulatorImpl::ScheduleWithContext (uint32_t context, Time const &delay, EventImpl *event)
 {
-  NS_LOG_FUNCTION (this << context << time.GetTimeStep () << m_currentTs << event);
+  NS_LOG_FUNCTION (this << context << delay.GetTimeStep () << m_currentTs << event);
 
   Scheduler::Event ev;
   ev.impl = event;
-  ev.key.m_ts = m_currentTs + time.GetTimeStep ();
+  ev.key.m_ts = m_currentTs + delay.GetTimeStep ();
   ev.key.m_context = context;
   ev.key.m_uid = m_uid;
   m_uid++;
diff -Naur ns-3.23/src/mpi/model/distributed-simulator-impl.h ns-3.24/src/mpi/model/distributed-simulator-impl.h
--- ns-3.23/src/mpi/model/distributed-simulator-impl.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mpi/model/distributed-simulator-impl.h	2015-09-15 11:18:44.000000000 -0700
@@ -110,9 +110,9 @@
   virtual void Destroy ();
   virtual bool IsFinished (void) const;
   virtual void Stop (void);
-  virtual void Stop (Time const &time);
-  virtual EventId Schedule (Time const &time, EventImpl *event);
-  virtual void ScheduleWithContext (uint32_t context, Time const &time, EventImpl *event);
+  virtual void Stop (Time const &delay);
+  virtual EventId Schedule (Time const &delay, EventImpl *event);
+  virtual void ScheduleWithContext (uint32_t context, Time const &delay, EventImpl *event);
   virtual EventId ScheduleNow (EventImpl *event);
   virtual EventId ScheduleDestroy (EventImpl *event);
   virtual void Remove (const EventId &id);
diff -Naur ns-3.23/src/mpi/model/null-message-simulator-impl.cc ns-3.24/src/mpi/model/null-message-simulator-impl.cc
--- ns-3.23/src/mpi/model/null-message-simulator-impl.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mpi/model/null-message-simulator-impl.cc	2015-09-15 11:18:44.000000000 -0700
@@ -54,7 +54,7 @@
 NullMessageSimulatorImpl::GetTypeId (void)
 {
   static TypeId tid = TypeId ("ns3::NullMessageSimulatorImpl")
-    .SetParent<Object> ()
+    .SetParent<SimulatorImpl> ()
     .SetGroupName ("Mpi")
     .AddConstructor<NullMessageSimulatorImpl> ()
     .AddAttribute ("SchedulerTune", "Null Message scheduler tuning parameter",
@@ -266,9 +266,9 @@
 {
   NS_LOG_FUNCTION (this << bundle);
 
-  Time time (m_schedulerTune * bundle->GetDelay ().GetTimeStep ());
+  Time delay (m_schedulerTune * bundle->GetDelay ().GetTimeStep ());
 
-  bundle->SetEventId (Simulator::Schedule (time, &NullMessageSimulatorImpl::NullMessageEventHandler, 
+  bundle->SetEventId (Simulator::Schedule (delay, &NullMessageSimulatorImpl::NullMessageEventHandler, 
                                            this, PeekPointer(bundle)));
 }
 
@@ -279,9 +279,9 @@
 
   Simulator::Cancel (bundle->GetEventId ());
 
-  Time time (m_schedulerTune * bundle->GetDelay ().GetTimeStep ());
+  Time delay (m_schedulerTune * bundle->GetDelay ().GetTimeStep ());
 
-  bundle->SetEventId (Simulator::Schedule (time, &NullMessageSimulatorImpl::NullMessageEventHandler, 
+  bundle->SetEventId (Simulator::Schedule (delay, &NullMessageSimulatorImpl::NullMessageEventHandler, 
                                            this, PeekPointer(bundle)));
 }
 
@@ -389,22 +389,22 @@
 }
 
 void
-NullMessageSimulatorImpl::Stop (Time const &time)
+NullMessageSimulatorImpl::Stop (Time const &delay)
 {
-  NS_LOG_FUNCTION (this << time.GetTimeStep ());
+  NS_LOG_FUNCTION (this << delay.GetTimeStep ());
 
-  Simulator::Schedule (time, &Simulator::Stop);
+  Simulator::Schedule (delay, &Simulator::Stop);
 }
 
 //
 // Schedule an event for a _relative_ time in the future.
 //
 EventId
-NullMessageSimulatorImpl::Schedule (Time const &time, EventImpl *event)
+NullMessageSimulatorImpl::Schedule (Time const &delay, EventImpl *event)
 {
-  NS_LOG_FUNCTION (this << time.GetTimeStep () << event);
+  NS_LOG_FUNCTION (this << delay.GetTimeStep () << event);
 
-  Time tAbsolute = time + TimeStep (m_currentTs);
+  Time tAbsolute = delay + TimeStep (m_currentTs);
 
   NS_ASSERT (tAbsolute.IsPositive ());
   NS_ASSERT (tAbsolute >= TimeStep (m_currentTs));
@@ -420,11 +420,11 @@
 }
 
 void
-NullMessageSimulatorImpl::ScheduleWithContext (uint32_t context, Time const &time, EventImpl *event)
+NullMessageSimulatorImpl::ScheduleWithContext (uint32_t context, Time const &delay, EventImpl *event)
 {
-  NS_LOG_FUNCTION (this << context << time.GetTimeStep () << m_currentTs << event);
+  NS_LOG_FUNCTION (this << context << delay.GetTimeStep () << m_currentTs << event);
 
-  Time tAbsolute(m_currentTs + time.GetTimeStep ());
+  Time tAbsolute(m_currentTs + delay.GetTimeStep ());
 
   NS_ASSERT (tAbsolute.IsPositive ());
   NS_ASSERT (tAbsolute >= TimeStep (m_currentTs));
diff -Naur ns-3.23/src/mpi/model/null-message-simulator-impl.h ns-3.24/src/mpi/model/null-message-simulator-impl.h
--- ns-3.23/src/mpi/model/null-message-simulator-impl.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/mpi/model/null-message-simulator-impl.h	2015-09-15 11:18:44.000000000 -0700
@@ -55,9 +55,9 @@
   virtual void Destroy ();
   virtual bool IsFinished (void) const;
   virtual void Stop (void);
-  virtual void Stop (Time const &time);
-  virtual EventId Schedule (Time const &time, EventImpl *event);
-  virtual void ScheduleWithContext (uint32_t context, Time const &time, EventImpl *event);
+  virtual void Stop (Time const &delay);
+  virtual EventId Schedule (Time const &delay, EventImpl *event);
+  virtual void ScheduleWithContext (uint32_t context, Time const &delay, EventImpl *event);
   virtual EventId ScheduleNow (EventImpl *event);
   virtual EventId ScheduleDestroy (EventImpl *event);
   virtual void Remove (const EventId &id);
diff -Naur ns-3.23/src/netanim/model/animation-interface.cc ns-3.24/src/netanim/model/animation-interface.cc
--- ns-3.23/src/netanim/model/animation-interface.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/netanim/model/animation-interface.cc	2015-09-15 11:18:44.000000000 -0700
@@ -1,4 +1,6 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indeni * This program is free software; you can redistribute it and/or modify
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation;
  *
@@ -1986,8 +1988,9 @@
 
 // XML 
 
-AnimationInterface::AnimXmlElement::AnimXmlElement (std::string tagName):
-                                m_tagName (tagName)
+AnimationInterface::AnimXmlElement::AnimXmlElement (std::string tagName, bool emptyElement):
+                                m_tagName (tagName),
+                                m_emptyElement (emptyElement)
 {
   m_elementString = "<" + tagName + " ";
 }
@@ -2010,6 +2013,19 @@
 }
 
 void
+AnimationInterface::AnimXmlElement::CloseElement ()
+{
+  if (m_emptyElement)
+    {
+      m_elementString += "/>\n";
+    }
+  else
+   {
+     m_elementString += "</" + m_tagName + ">\n";
+   }
+}
+
+void
 AnimationInterface::AnimXmlElement::CloseTag ()
 {
   m_elementString += ">";
@@ -2075,7 +2091,7 @@
   element.AddAttribute ("sysId", sysId);
   element.AddAttribute ("locX", locX);
   element.AddAttribute ("locY", locY);
-  element.Close ();
+  element.CloseElement ();
   WriteN (element.GetElementString (), m_f);
 }
 
@@ -2087,7 +2103,7 @@
   element.AddAttribute ("fromId", fromId);
   element.AddAttribute ("toId", toId);
   element.AddAttribute ("ld", linkDescription);
-  element.Close ();
+  element.CloseElement ();
   WriteN (element.GetElementString (), m_f);
 }
 
@@ -2117,7 +2133,7 @@
   element.AddAttribute ("fd", lprop.fromNodeDescription); 
   element.AddAttribute ("td", lprop.toNodeDescription); 
   element.AddAttribute ("ld", lprop.linkDescription); 
-  element.Close ();
+  element.CloseElement ();
   WriteN (element.GetElementString (), m_f);
 }
 
@@ -2128,14 +2144,15 @@
   element.AddAttribute ("t", Simulator::Now ().GetSeconds ());
   element.AddAttribute ("id", nodeId);
   element.AddAttribute ("info", routingInfo.c_str ());
-  element.Close ();
+  element.CloseElement ();
   WriteN (element.GetElementString (), m_routingF);
 }
 
 void 
 AnimationInterface::WriteXmlRp (uint32_t nodeId, std::string destination, Ipv4RoutePathElements rpElements)
 {
-  AnimXmlElement element ("rp");
+  std::string tagName = "rp";
+  AnimXmlElement element (tagName, false);
   element.AddAttribute ("t", Simulator::Now ().GetSeconds ());
   element.AddAttribute ("id", nodeId);
   element.AddAttribute ("d", destination.c_str ());
@@ -2150,9 +2167,10 @@
       AnimXmlElement rpeElement ("rpe");
       rpeElement.AddAttribute ("n", rpElement.nodeId);
       rpeElement.AddAttribute ("nH", rpElement.nextHop.c_str ());
-      rpeElement.Close ();
+      rpeElement.CloseElement ();
       element.Add (rpeElement);
     }
+  element.CloseElement ();
   WriteN (element.GetElementString (),  m_routingF);
 }
 
@@ -2168,7 +2186,7 @@
     {
       element.AddAttribute ("meta-info", metaInfo.c_str ());
     }
-  element.Close ();
+  element.CloseElement ();
   WriteN (element.GetElementString (),  m_f);
 }
 
@@ -2180,7 +2198,7 @@
   element.AddAttribute ("tId", tId);
   element.AddAttribute ("fbRx", fbRx);
   element.AddAttribute ("lbRx", lbRx);
-  element.Close ();
+  element.CloseElement ();
   WriteN (element.GetElementString (),  m_f);
 }
 
@@ -2199,7 +2217,7 @@
   element.AddAttribute ("tId", tId);
   element.AddAttribute ("fbRx", fbRx);
   element.AddAttribute ("lbRx", lbRx);
-  element.Close ();
+  element.CloseElement ();
   WriteN (element.GetElementString (),  m_f);
 }
 
@@ -2210,7 +2228,7 @@
   element.AddAttribute ("ncId", nodeCounterId);
   element.AddAttribute ("n", counterName);
   element.AddAttribute ("t", CounterTypeToString (counterType));
-  element.Close ();
+  element.CloseElement ();
   WriteN (element.GetElementString (), m_f);
 }
 
@@ -2220,7 +2238,7 @@
   AnimXmlElement element ("res");
   element.AddAttribute ("rid", resourceId);
   element.AddAttribute ("p", resourcePath);
-  element.Close ();
+  element.CloseElement ();
   WriteN (element.GetElementString (), m_f);
 }
 
@@ -2232,7 +2250,7 @@
   element.AddAttribute ("t", Simulator::Now ().GetSeconds ());
   element.AddAttribute ("id", nodeId);
   element.AddAttribute ("rid", resourceId);
-  element.Close ();
+  element.CloseElement ();
   WriteN (element.GetElementString (), m_f);
 }
 
@@ -2245,7 +2263,7 @@
   element.AddAttribute ("id", nodeId);
   element.AddAttribute ("w", width);
   element.AddAttribute ("h", height);
-  element.Close ();
+  element.CloseElement ();
   WriteN (element.GetElementString (),  m_f);
 }
 
@@ -2258,7 +2276,7 @@
   element.AddAttribute ("id", nodeId);
   element.AddAttribute ("x", x);
   element.AddAttribute ("y", y);
-  element.Close ();
+  element.CloseElement ();
   WriteN (element.GetElementString (), m_f);
 }
 
@@ -2272,7 +2290,7 @@
   element.AddAttribute ("r", (uint32_t) r);
   element.AddAttribute ("g", (uint32_t) g);
   element.AddAttribute ("b", (uint32_t) b);
-  element.Close ();
+  element.CloseElement ();
   WriteN (element.GetElementString (), m_f);
 }
 
@@ -2287,7 +2305,7 @@
     {
       element.AddAttribute ("descr", m_nodeDescriptions[nodeId]); 
     }
-  element.Close ();
+  element.CloseElement ();
   WriteN (element.GetElementString (), m_f);
 }
 
@@ -2300,7 +2318,7 @@
   element.AddAttribute ("i", nodeId);
   element.AddAttribute ("t", Simulator::Now ().GetSeconds ());
   element.AddAttribute ("v", counterValue);
-  element.Close ();
+  element.CloseElement ();
   WriteN (element.GetElementString (), m_f);
 }
 
@@ -2314,7 +2332,7 @@
   element.AddAttribute ("sx", scaleX);
   element.AddAttribute ("sy", scaleY);
   element.AddAttribute ("o", opacity);
-  element.Close ();
+  element.CloseElement ();
   WriteN (element.GetElementString (), m_f);
 }
 
@@ -2325,7 +2343,7 @@
   element.AddAttribute ("id", id);
   element.AddAttribute ("ipv4Address", ipv4Address);
   element.AddAttribute ("channelType", channelType);
-  element.Close ();
+  element.CloseElement ();
   WriteN (element.GetElementString (), m_f);
 }
 
diff -Naur ns-3.23/src/netanim/model/animation-interface.h ns-3.24/src/netanim/model/animation-interface.h
--- ns-3.23/src/netanim/model/animation-interface.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/netanim/model/animation-interface.h	2015-09-15 11:18:44.000000000 -0700
@@ -1,3 +1,4 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
@@ -517,10 +518,11 @@
   class AnimXmlElement
   {
     public:
-    AnimXmlElement (std::string tagName);
+    AnimXmlElement (std::string tagName, bool emptyElement=true);
     template <typename T>
     void AddAttribute (std::string attribute, T value);
     void Close ();
+    void CloseElement ();
     void CloseTag ();
     void AddLineBreak ();
     void Add (AnimXmlElement e);
@@ -528,6 +530,7 @@
   private:
     std::string m_tagName;
     std::string m_elementString;
+    bool m_emptyElement;
 
   };
 
diff -Naur ns-3.23/src/netanim/wscript ns-3.24/src/netanim/wscript
--- ns-3.23/src/netanim/wscript	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/netanim/wscript	2015-09-15 11:18:44.000000000 -0700
@@ -5,24 +5,15 @@
 # Required NetAnim version
 NETANIM_RELEASE_NAME = "netanim-3.106"
 
-
 def build (bld) :
-	module = bld.create_ns3_module ('netanim', ['internet', 'mobility', 'wimax', 'wifi', 'csma', 'lte', 'uan', 'energy'])
-	module.includes = '.'
-	module.source = [
-			  'model/animation-interface.cc',
-		        ]
-    	netanim_test = bld.create_ns3_module_test_library('netanim')
-    	netanim_test.source = [
-        	'test/netanim-test.cc',
-        ]
-
-	headers = bld(features='ns3header')
-	headers.module = 'netanim'
-	headers.source = [
-			  'model/animation-interface.h',
-  			 ]
-
-	if (bld.env['ENABLE_EXAMPLES']) :
-		bld.recurse('examples')
+    module = bld.create_ns3_module ('netanim', ['internet', 'mobility', 'wimax', 'wifi', 'csma', 'lte', 'uan', 'energy'])
+    module.includes = '.'
+    module.source = [ 'model/animation-interface.cc', ]
+    netanim_test = bld.create_ns3_module_test_library('netanim')
+    netanim_test.source = ['test/netanim-test.cc', ]
+    headers = bld(features='ns3header')
+    headers.module = 'netanim'
+    headers.source = ['model/animation-interface.h', ]
+    if (bld.env['ENABLE_EXAMPLES']) :
+       bld.recurse('examples')
 
diff -Naur ns-3.23/src/network/bindings/modulegen__gcc_ILP32.py ns-3.24/src/network/bindings/modulegen__gcc_ILP32.py
--- ns-3.23/src/network/bindings/modulegen__gcc_ILP32.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/bindings/modulegen__gcc_ILP32.py	2015-09-15 11:18:44.000000000 -0700
@@ -106,6 +106,8 @@
     module.add_class('NodeContainer')
     ## node-list.h (module 'network'): ns3::NodeList [class]
     module.add_class('NodeList')
+    ## non-copyable.h (module 'core'): ns3::NonCopyable [class]
+    module.add_class('NonCopyable', destructor_visibility='protected', import_from_module='ns.core')
     ## object-base.h (module 'core'): ns3::ObjectBase [class]
     module.add_class('ObjectBase', allow_subclassing=True, import_from_module='ns.core')
     ## object.h (module 'core'): ns3::ObjectDeleter [struct]
@@ -145,7 +147,7 @@
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], outer_class=root_module['ns3::PcapHelper'])
+    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SSL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'])
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True)
     ## sequence-number.h (module 'network'): ns3::SequenceNumber<unsigned int, int> [class]
@@ -212,6 +214,16 @@
     module.add_enum('', ['FRAME_FLAG_NONE', 'FRAME_FLAG_CFP', 'FRAME_FLAG_SHORT_PREAMBLE', 'FRAME_FLAG_WEP', 'FRAME_FLAG_FRAGMENTED', 'FRAME_FLAG_FCS_INCLUDED', 'FRAME_FLAG_DATA_PADDING', 'FRAME_FLAG_BAD_FCS', 'FRAME_FLAG_SHORT_GUARD'], outer_class=root_module['ns3::RadiotapHeader'])
     ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
     module.add_enum('', ['CHANNEL_FLAG_NONE', 'CHANNEL_FLAG_TURBO', 'CHANNEL_FLAG_CCK', 'CHANNEL_FLAG_OFDM', 'CHANNEL_FLAG_SPECTRUM_2GHZ', 'CHANNEL_FLAG_SPECTRUM_5GHZ', 'CHANNEL_FLAG_PASSIVE', 'CHANNEL_FLAG_DYNAMIC', 'CHANNEL_FLAG_GFSK'], outer_class=root_module['ns3::RadiotapHeader'])
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
+    module.add_enum('', ['MCS_KNOWN_NONE', 'MCS_KNOWN_BANDWIDTH', 'MCS_KNOWN_INDEX', 'MCS_KNOWN_GUARD_INTERVAL', 'MCS_KNOWN_HT_FORMAT', 'MCS_KNOWN_FEC_TYPE', 'MCS_KNOWN_STBC', 'MCS_KNOWN_NESS', 'MCS_KNOWN_NESS_BIT_1'], outer_class=root_module['ns3::RadiotapHeader'])
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
+    module.add_enum('', ['MCS_FLAGS_NONE', 'MCS_FLAGS_BANDWIDTH_40', 'MCS_FLAGS_BANDWIDTH_20L', 'MCS_FLAGS_BANDWIDTH_20U', 'MCS_FLAGS_GUARD_INTERVAL', 'MCS_FLAGS_HT_GREENFIELD', 'MCS_FLAGS_FEC_TYPE', 'MCS_FLAGS_STBC_STREAMS', 'MCS_FLAGS_NESS_BIT_0'], outer_class=root_module['ns3::RadiotapHeader'])
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
+    module.add_enum('', ['A_MPDU_STATUS_NONE', 'A_MPDU_STATUS_REPORT_ZERO_LENGTH', 'A_MPDU_STATUS_IS_ZERO_LENGTH', 'A_MPDU_STATUS_LAST_KNOWN', 'A_MPDU_STATUS_LAST', 'A_MPDU_STATUS_DELIMITER_CRC_ERROR', 'A_MPDU_STATUS_DELIMITER_CRC_KNOWN'], outer_class=root_module['ns3::RadiotapHeader'])
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
+    module.add_enum('', ['VHT_KNOWN_NONE', 'VHT_KNOWN_STBC', 'VHT_KNOWN_TXOP_PS_NOT_ALLOWED', 'VHT_KNOWN_GUARD_INTERVAL', 'VHT_KNOWN_SHORT_GI_NSYM_DISAMBIGUATION', 'VHT_KNOWN_LDPC_EXTRA_OFDM_SYMBOL', 'VHT_KNOWN_BEAMFORMED', 'VHT_KNOWN_BANDWIDTH', 'VHT_KNOWN_GROUP_ID', 'VHT_KNOWN_PARTIAL_AID'], outer_class=root_module['ns3::RadiotapHeader'])
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
+    module.add_enum('', ['VHT_FLAGS_NONE', 'VHT_FLAGS_STBC', 'VHT_FLAGS_TXOP_PS_NOT_ALLOWED', 'VHT_FLAGS_GUARD_INTERVAL', 'VHT_FLAGS_SHORT_GI_NSYM_DISAMBIGUATION', 'VHT_FLAGS__LDPC_EXTRA_OFDM_SYMBOL', 'VHT_FLAGS_BEAMFORMED'], outer_class=root_module['ns3::RadiotapHeader'])
     ## random-variable-stream.h (module 'core'): ns3::RandomVariableStream [class]
     module.add_class('RandomVariableStream', import_from_module='ns.core', parent=root_module['ns3::Object'])
     ## red-queue.h (module 'network'): ns3::RedQueue [class]
@@ -483,9 +495,6 @@
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >', u'ns3::SequenceNumber8')
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >*', u'ns3::SequenceNumber8*')
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >&', u'ns3::SequenceNumber8&')
-    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *', u'ns3::SequenceNumber32TracedValueCallback')
-    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) **', u'ns3::SequenceNumber32TracedValueCallback*')
-    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *&', u'ns3::SequenceNumber32TracedValueCallback&')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::GenericPhyRxEndErrorCallback')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::GenericPhyRxEndErrorCallback*')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::GenericPhyRxEndErrorCallback&')
@@ -508,6 +517,12 @@
     register_types_ns3_Hash(nested_module)
     
     
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
+    
     ## Register a nested module for the namespace addressUtils
     
     nested_module = module.add_cpp_namespace('addressUtils')
@@ -554,6 +569,40 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *', u'ns3::TracedValueCallback::Double')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) **', u'ns3::TracedValueCallback::Double*')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *&', u'ns3::TracedValueCallback::Double&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *', u'ns3::TracedValueCallback::SequenceNumber32')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) **', u'ns3::TracedValueCallback::SequenceNumber32*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *&', u'ns3::TracedValueCallback::SequenceNumber32&')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *', u'ns3::TracedValueCallback::Int8')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) **', u'ns3::TracedValueCallback::Int8*')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *&', u'ns3::TracedValueCallback::Int8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *', u'ns3::TracedValueCallback::Uint8')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) **', u'ns3::TracedValueCallback::Uint8*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *&', u'ns3::TracedValueCallback::Uint8&')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *', u'ns3::TracedValueCallback::Int32')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) **', u'ns3::TracedValueCallback::Int32*')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *&', u'ns3::TracedValueCallback::Int32&')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *', u'ns3::TracedValueCallback::Bool')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) **', u'ns3::TracedValueCallback::Bool*')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *&', u'ns3::TracedValueCallback::Bool&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *', u'ns3::TracedValueCallback::Uint16')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) **', u'ns3::TracedValueCallback::Uint16*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *&', u'ns3::TracedValueCallback::Uint16&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *', u'ns3::TracedValueCallback::Uint32')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) **', u'ns3::TracedValueCallback::Uint32*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *&', u'ns3::TracedValueCallback::Uint32&')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *', u'ns3::TracedValueCallback::Int16')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) **', u'ns3::TracedValueCallback::Int16*')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *&', u'ns3::TracedValueCallback::Int16&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_types_ns3_addressUtils(module):
     root_module = module.get_root()
     
@@ -596,6 +645,7 @@
     register_Ns3NetDeviceContainer_methods(root_module, root_module['ns3::NetDeviceContainer'])
     register_Ns3NodeContainer_methods(root_module, root_module['ns3::NodeContainer'])
     register_Ns3NodeList_methods(root_module, root_module['ns3::NodeList'])
+    register_Ns3NonCopyable_methods(root_module, root_module['ns3::NonCopyable'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
     register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
     register_Ns3ObjectFactory_methods(root_module, root_module['ns3::ObjectFactory'])
@@ -1087,17 +1137,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -1119,11 +1169,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -1133,16 +1178,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -1380,14 +1415,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -1448,11 +1487,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3ChannelList_methods(root_module, cls):
@@ -2463,6 +2497,12 @@
                    is_static=True)
     return
 
+def register_Ns3NonCopyable_methods(root_module, cls):
+    ## non-copyable.h (module 'core'): ns3::NonCopyable::NonCopyable() [constructor]
+    cls.add_constructor([], 
+                        visibility='protected')
+    return
+
 def register_Ns3ObjectBase_methods(root_module, cls):
     ## object-base.h (module 'core'): ns3::ObjectBase::ObjectBase() [constructor]
     cls.add_constructor([])
@@ -2831,7 +2871,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -3055,10 +3095,10 @@
     cls.add_method('Close', 
                    'void', 
                    [])
-    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
+    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t & packets, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
     cls.add_method('Diff', 
                    'bool', 
-                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
+                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t &', 'packets'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
                    is_static=True)
     ## pcap-file.h (module 'network'): bool ns3::PcapFile::Eof() const [member function]
     cls.add_method('Eof', 
@@ -3122,10 +3162,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header & header, ns3::Ptr<ns3::Packet const> p) [member function]
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header const & header, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file.h (module 'network'): ns3::PcapFile::SNAPLEN_DEFAULT [variable]
     cls.add_static_attribute('SNAPLEN_DEFAULT', 'uint32_t const', is_const=True)
     ## pcap-file.h (module 'network'): ns3::PcapFile::ZONE_DEFAULT [variable]
@@ -3369,10 +3409,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -3715,6 +3755,11 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetParent() [member function]
+    cls.add_method('SetParent', 
+                   'ns3::TypeId', 
+                   [], 
+                   template_parameters=['ns3::Object'])
     ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
     cls.add_method('SetSize', 
                    'ns3::TypeId', 
@@ -4244,10 +4289,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header & header, ns3::Ptr<ns3::Packet const> p) [member function]
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header const & header, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('ns3::Time', 't'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('ns3::Time', 't'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, uint8_t const * buffer, uint32_t length) [member function]
     cls.add_method('Write', 
                    'void', 
@@ -4380,6 +4425,16 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_virtual=True)
+    ## radiotap-header.h (module 'network'): uint16_t ns3::RadiotapHeader::GetAmpduStatusFlags() const [member function]
+    cls.add_method('GetAmpduStatusFlags', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint32_t ns3::RadiotapHeader::GetAmpduStatusRef() const [member function]
+    cls.add_method('GetAmpduStatusRef', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetAntennaNoisePower() const [member function]
     cls.add_method('GetAntennaNoisePower', 
                    'uint8_t', 
@@ -4410,6 +4465,21 @@
                    'ns3::TypeId', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetMcsFlags() const [member function]
+    cls.add_method('GetMcsFlags', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetMcsKnown() const [member function]
+    cls.add_method('GetMcsKnown', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetMcsRate() const [member function]
+    cls.add_method('GetMcsRate', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetRate() const [member function]
     cls.add_method('GetRate', 
                    'uint8_t', 
@@ -4430,6 +4500,56 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetVhtBandwidth() const [member function]
+    cls.add_method('GetVhtBandwidth', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetVhtCoding() const [member function]
+    cls.add_method('GetVhtCoding', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetVhtFlags() const [member function]
+    cls.add_method('GetVhtFlags', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetVhtGroupId() const [member function]
+    cls.add_method('GetVhtGroupId', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint16_t ns3::RadiotapHeader::GetVhtKnown() const [member function]
+    cls.add_method('GetVhtKnown', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetVhtMcsNssUser1() const [member function]
+    cls.add_method('GetVhtMcsNssUser1', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetVhtMcsNssUser2() const [member function]
+    cls.add_method('GetVhtMcsNssUser2', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetVhtMcsNssUser3() const [member function]
+    cls.add_method('GetVhtMcsNssUser3', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetVhtMcsNssUser4() const [member function]
+    cls.add_method('GetVhtMcsNssUser4', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetVhtPartialAid() const [member function]
+    cls.add_method('GetVhtPartialAid', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## radiotap-header.h (module 'network'): void ns3::RadiotapHeader::Print(std::ostream & os) const [member function]
     cls.add_method('Print', 
                    'void', 
@@ -4440,6 +4560,10 @@
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
+    ## radiotap-header.h (module 'network'): void ns3::RadiotapHeader::SetAmpduStatus(uint32_t referenceNumber, uint16_t flags, uint8_t crc) [member function]
+    cls.add_method('SetAmpduStatus', 
+                   'void', 
+                   [param('uint32_t', 'referenceNumber'), param('uint16_t', 'flags'), param('uint8_t', 'crc')])
     ## radiotap-header.h (module 'network'): void ns3::RadiotapHeader::SetAntennaNoisePower(double noise) [member function]
     cls.add_method('SetAntennaNoisePower', 
                    'void', 
@@ -4456,6 +4580,10 @@
     cls.add_method('SetFrameFlags', 
                    'void', 
                    [param('uint8_t', 'flags')])
+    ## radiotap-header.h (module 'network'): void ns3::RadiotapHeader::SetMcsFields(uint8_t known, uint8_t flags, uint8_t mcs) [member function]
+    cls.add_method('SetMcsFields', 
+                   'void', 
+                   [param('uint8_t', 'known'), param('uint8_t', 'flags'), param('uint8_t', 'mcs')])
     ## radiotap-header.h (module 'network'): void ns3::RadiotapHeader::SetRate(uint8_t rate) [member function]
     cls.add_method('SetRate', 
                    'void', 
@@ -4464,6 +4592,10 @@
     cls.add_method('SetTsft', 
                    'void', 
                    [param('uint64_t', 'tsft')])
+    ## radiotap-header.h (module 'network'): void ns3::RadiotapHeader::SetVhtFields(uint16_t known, uint8_t flags, uint8_t bandwidth, uint8_t * mcs_nss, uint8_t coding, uint8_t group_id, uint16_t partial_aid) [member function]
+    cls.add_method('SetVhtFields', 
+                   'void', 
+                   [param('uint16_t', 'known'), param('uint8_t', 'flags'), param('uint8_t', 'bandwidth'), param('uint8_t *', 'mcs_nss'), param('uint8_t', 'coding'), param('uint8_t', 'group_id'), param('uint16_t', 'partial_aid')])
     return
 
 def register_Ns3RandomVariableStream_methods(root_module, cls):
@@ -6059,11 +6191,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -6182,6 +6324,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## data-calculator.h (module 'stats'): static ns3::TypeId ns3::DataCalculator::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Output(ns3::DataOutputCallback & callback) const [member function]
     cls.add_method('Output', 
                    'void', 
@@ -6256,6 +6403,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## data-output-interface.h (module 'stats'): static ns3::TypeId ns3::DataOutputInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## data-output-interface.h (module 'stats'): void ns3::DataOutputInterface::Output(ns3::DataCollector & dc) [member function]
     cls.add_method('Output', 
                    'void', 
@@ -6374,10 +6526,11 @@
     cls.add_constructor([param('ns3::DropTailQueue const &', 'arg0')])
     ## drop-tail-queue.h (module 'network'): ns3::DropTailQueue::DropTailQueue() [constructor]
     cls.add_constructor([])
-    ## drop-tail-queue.h (module 'network'): ns3::Queue::QueueMode ns3::DropTailQueue::GetMode() [member function]
+    ## drop-tail-queue.h (module 'network'): ns3::Queue::QueueMode ns3::DropTailQueue::GetMode() const [member function]
     cls.add_method('GetMode', 
                    'ns3::Queue::QueueMode', 
-                   [])
+                   [], 
+                   is_const=True)
     ## drop-tail-queue.h (module 'network'): static ns3::TypeId ns3::DropTailQueue::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -6426,10 +6579,10 @@
                    'double', 
                    [], 
                    is_virtual=True)
-    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
     cls.add_method('Interpolate', 
                    'double', 
-                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
                    visibility='private', is_virtual=True)
     ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
     cls.add_method('Validate', 
@@ -7254,6 +7407,11 @@
     cls.add_constructor([param('ns3::MinMaxAvgTotalCalculator< unsigned int > const &', 'arg0')])
     ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<unsigned int>::MinMaxAvgTotalCalculator() [constructor]
     cls.add_constructor([])
+    ## basic-data-calculators.h (module 'stats'): static ns3::TypeId ns3::MinMaxAvgTotalCalculator<unsigned int>::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::Output(ns3::DataOutputCallback & callback) const [member function]
     cls.add_method('Output', 
                    'void', 
@@ -7865,6 +8023,11 @@
     cls.add_method('FrameUpdate', 
                    'void', 
                    [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Mac48Address', 'realto')])
+    ## packet-data-calculators.h (module 'network'): static ns3::TypeId ns3::PacketSizeMinMaxAvgTotalCalculator::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## packet-data-calculators.h (module 'network'): void ns3::PacketSizeMinMaxAvgTotalCalculator::PacketUpdate(std::string path, ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('PacketUpdate', 
                    'void', 
@@ -9235,6 +9398,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::SimpleNetDevice >', 'device')], 
                    is_virtual=True)
+    ## simple-channel.h (module 'network'): void ns3::SimpleChannel::BlackList(ns3::Ptr<ns3::SimpleNetDevice> from, ns3::Ptr<ns3::SimpleNetDevice> to) [member function]
+    cls.add_method('BlackList', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SimpleNetDevice >', 'from'), param('ns3::Ptr< ns3::SimpleNetDevice >', 'to')], 
+                   is_virtual=True)
     ## simple-channel.h (module 'network'): ns3::Ptr<ns3::NetDevice> ns3::SimpleChannel::GetDevice(uint32_t i) const [member function]
     cls.add_method('GetDevice', 
                    'ns3::Ptr< ns3::NetDevice >', 
@@ -9255,6 +9423,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::Packet >', 'p'), param('uint16_t', 'protocol'), param('ns3::Mac48Address', 'to'), param('ns3::Mac48Address', 'from'), param('ns3::Ptr< ns3::SimpleNetDevice >', 'sender')], 
                    is_virtual=True)
+    ## simple-channel.h (module 'network'): void ns3::SimpleChannel::UnBlackList(ns3::Ptr<ns3::SimpleNetDevice> from, ns3::Ptr<ns3::SimpleNetDevice> to) [member function]
+    cls.add_method('UnBlackList', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SimpleNetDevice >', 'from'), param('ns3::Ptr< ns3::SimpleNetDevice >', 'to')], 
+                   is_virtual=True)
     return
 
 def register_Ns3SimpleNetDevice_methods(root_module, cls):
@@ -9614,6 +9787,11 @@
                    'unsigned int', 
                    [], 
                    is_const=True)
+    ## basic-data-calculators.h (module 'stats'): static ns3::TypeId ns3::CounterCalculator<unsigned int>::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## basic-data-calculators.h (module 'stats'): void ns3::CounterCalculator<unsigned int>::Output(ns3::DataOutputCallback & callback) const [member function]
     cls.add_method('Output', 
                    'void', 
@@ -9643,6 +9821,11 @@
     cls.add_method('FrameUpdate', 
                    'void', 
                    [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Mac48Address', 'realto')])
+    ## packet-data-calculators.h (module 'network'): static ns3::TypeId ns3::PacketCounterCalculator::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## packet-data-calculators.h (module 'network'): void ns3::PacketCounterCalculator::PacketUpdate(std::string path, ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('PacketUpdate', 
                    'void', 
@@ -9926,6 +10109,7 @@
                         [param('ns3::Buffer::Iterator &', 'i'), param('ns3::Mac64Address', 'ad')])
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     register_functions_ns3_addressUtils(module.get_submodule('addressUtils'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
@@ -9940,6 +10124,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def register_functions_ns3_addressUtils(module, root_module):
     ## address-utils.h (module 'network'): extern bool ns3::addressUtils::IsMulticast(ns3::Address const & ad) [free function]
     module.add_function('IsMulticast', 
diff -Naur ns-3.23/src/network/bindings/modulegen__gcc_LP64.py ns-3.24/src/network/bindings/modulegen__gcc_LP64.py
--- ns-3.23/src/network/bindings/modulegen__gcc_LP64.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/bindings/modulegen__gcc_LP64.py	2015-09-15 11:18:44.000000000 -0700
@@ -106,6 +106,8 @@
     module.add_class('NodeContainer')
     ## node-list.h (module 'network'): ns3::NodeList [class]
     module.add_class('NodeList')
+    ## non-copyable.h (module 'core'): ns3::NonCopyable [class]
+    module.add_class('NonCopyable', destructor_visibility='protected', import_from_module='ns.core')
     ## object-base.h (module 'core'): ns3::ObjectBase [class]
     module.add_class('ObjectBase', allow_subclassing=True, import_from_module='ns.core')
     ## object.h (module 'core'): ns3::ObjectDeleter [struct]
@@ -145,7 +147,7 @@
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], outer_class=root_module['ns3::PcapHelper'])
+    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SSL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'])
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True)
     ## sequence-number.h (module 'network'): ns3::SequenceNumber<unsigned int, int> [class]
@@ -212,6 +214,16 @@
     module.add_enum('', ['FRAME_FLAG_NONE', 'FRAME_FLAG_CFP', 'FRAME_FLAG_SHORT_PREAMBLE', 'FRAME_FLAG_WEP', 'FRAME_FLAG_FRAGMENTED', 'FRAME_FLAG_FCS_INCLUDED', 'FRAME_FLAG_DATA_PADDING', 'FRAME_FLAG_BAD_FCS', 'FRAME_FLAG_SHORT_GUARD'], outer_class=root_module['ns3::RadiotapHeader'])
     ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
     module.add_enum('', ['CHANNEL_FLAG_NONE', 'CHANNEL_FLAG_TURBO', 'CHANNEL_FLAG_CCK', 'CHANNEL_FLAG_OFDM', 'CHANNEL_FLAG_SPECTRUM_2GHZ', 'CHANNEL_FLAG_SPECTRUM_5GHZ', 'CHANNEL_FLAG_PASSIVE', 'CHANNEL_FLAG_DYNAMIC', 'CHANNEL_FLAG_GFSK'], outer_class=root_module['ns3::RadiotapHeader'])
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
+    module.add_enum('', ['MCS_KNOWN_NONE', 'MCS_KNOWN_BANDWIDTH', 'MCS_KNOWN_INDEX', 'MCS_KNOWN_GUARD_INTERVAL', 'MCS_KNOWN_HT_FORMAT', 'MCS_KNOWN_FEC_TYPE', 'MCS_KNOWN_STBC', 'MCS_KNOWN_NESS', 'MCS_KNOWN_NESS_BIT_1'], outer_class=root_module['ns3::RadiotapHeader'])
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
+    module.add_enum('', ['MCS_FLAGS_NONE', 'MCS_FLAGS_BANDWIDTH_40', 'MCS_FLAGS_BANDWIDTH_20L', 'MCS_FLAGS_BANDWIDTH_20U', 'MCS_FLAGS_GUARD_INTERVAL', 'MCS_FLAGS_HT_GREENFIELD', 'MCS_FLAGS_FEC_TYPE', 'MCS_FLAGS_STBC_STREAMS', 'MCS_FLAGS_NESS_BIT_0'], outer_class=root_module['ns3::RadiotapHeader'])
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
+    module.add_enum('', ['A_MPDU_STATUS_NONE', 'A_MPDU_STATUS_REPORT_ZERO_LENGTH', 'A_MPDU_STATUS_IS_ZERO_LENGTH', 'A_MPDU_STATUS_LAST_KNOWN', 'A_MPDU_STATUS_LAST', 'A_MPDU_STATUS_DELIMITER_CRC_ERROR', 'A_MPDU_STATUS_DELIMITER_CRC_KNOWN'], outer_class=root_module['ns3::RadiotapHeader'])
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
+    module.add_enum('', ['VHT_KNOWN_NONE', 'VHT_KNOWN_STBC', 'VHT_KNOWN_TXOP_PS_NOT_ALLOWED', 'VHT_KNOWN_GUARD_INTERVAL', 'VHT_KNOWN_SHORT_GI_NSYM_DISAMBIGUATION', 'VHT_KNOWN_LDPC_EXTRA_OFDM_SYMBOL', 'VHT_KNOWN_BEAMFORMED', 'VHT_KNOWN_BANDWIDTH', 'VHT_KNOWN_GROUP_ID', 'VHT_KNOWN_PARTIAL_AID'], outer_class=root_module['ns3::RadiotapHeader'])
+    ## radiotap-header.h (module 'network'): ns3::RadiotapHeader [enumeration]
+    module.add_enum('', ['VHT_FLAGS_NONE', 'VHT_FLAGS_STBC', 'VHT_FLAGS_TXOP_PS_NOT_ALLOWED', 'VHT_FLAGS_GUARD_INTERVAL', 'VHT_FLAGS_SHORT_GI_NSYM_DISAMBIGUATION', 'VHT_FLAGS__LDPC_EXTRA_OFDM_SYMBOL', 'VHT_FLAGS_BEAMFORMED'], outer_class=root_module['ns3::RadiotapHeader'])
     ## random-variable-stream.h (module 'core'): ns3::RandomVariableStream [class]
     module.add_class('RandomVariableStream', import_from_module='ns.core', parent=root_module['ns3::Object'])
     ## red-queue.h (module 'network'): ns3::RedQueue [class]
@@ -483,9 +495,6 @@
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >', u'ns3::SequenceNumber8')
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >*', u'ns3::SequenceNumber8*')
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >&', u'ns3::SequenceNumber8&')
-    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *', u'ns3::SequenceNumber32TracedValueCallback')
-    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) **', u'ns3::SequenceNumber32TracedValueCallback*')
-    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *&', u'ns3::SequenceNumber32TracedValueCallback&')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::GenericPhyRxEndErrorCallback')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::GenericPhyRxEndErrorCallback*')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::GenericPhyRxEndErrorCallback&')
@@ -508,6 +517,12 @@
     register_types_ns3_Hash(nested_module)
     
     
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
+    
     ## Register a nested module for the namespace addressUtils
     
     nested_module = module.add_cpp_namespace('addressUtils')
@@ -554,6 +569,40 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *', u'ns3::TracedValueCallback::Double')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) **', u'ns3::TracedValueCallback::Double*')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *&', u'ns3::TracedValueCallback::Double&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *', u'ns3::TracedValueCallback::SequenceNumber32')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) **', u'ns3::TracedValueCallback::SequenceNumber32*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *&', u'ns3::TracedValueCallback::SequenceNumber32&')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *', u'ns3::TracedValueCallback::Int8')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) **', u'ns3::TracedValueCallback::Int8*')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *&', u'ns3::TracedValueCallback::Int8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *', u'ns3::TracedValueCallback::Uint8')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) **', u'ns3::TracedValueCallback::Uint8*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *&', u'ns3::TracedValueCallback::Uint8&')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *', u'ns3::TracedValueCallback::Int32')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) **', u'ns3::TracedValueCallback::Int32*')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *&', u'ns3::TracedValueCallback::Int32&')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *', u'ns3::TracedValueCallback::Bool')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) **', u'ns3::TracedValueCallback::Bool*')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *&', u'ns3::TracedValueCallback::Bool&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *', u'ns3::TracedValueCallback::Uint16')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) **', u'ns3::TracedValueCallback::Uint16*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *&', u'ns3::TracedValueCallback::Uint16&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *', u'ns3::TracedValueCallback::Uint32')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) **', u'ns3::TracedValueCallback::Uint32*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *&', u'ns3::TracedValueCallback::Uint32&')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *', u'ns3::TracedValueCallback::Int16')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) **', u'ns3::TracedValueCallback::Int16*')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *&', u'ns3::TracedValueCallback::Int16&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_types_ns3_addressUtils(module):
     root_module = module.get_root()
     
@@ -596,6 +645,7 @@
     register_Ns3NetDeviceContainer_methods(root_module, root_module['ns3::NetDeviceContainer'])
     register_Ns3NodeContainer_methods(root_module, root_module['ns3::NodeContainer'])
     register_Ns3NodeList_methods(root_module, root_module['ns3::NodeList'])
+    register_Ns3NonCopyable_methods(root_module, root_module['ns3::NonCopyable'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
     register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
     register_Ns3ObjectFactory_methods(root_module, root_module['ns3::ObjectFactory'])
@@ -769,8 +819,8 @@
 
 def register_Ns3Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('<')
+    cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     ## address.h (module 'network'): ns3::Address::Address() [constructor]
     cls.add_constructor([])
@@ -1087,17 +1137,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -1119,11 +1169,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -1133,16 +1178,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -1380,14 +1415,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -1448,11 +1487,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3ChannelList_methods(root_module, cls):
@@ -1750,8 +1784,8 @@
 
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('<')
+    cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address::Ipv4Address(ns3::Ipv4Address const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Ipv4Address const &', 'arg0')])
@@ -1921,8 +1955,8 @@
 
 def register_Ns3Ipv6Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('<')
+    cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     ## ipv6-address.h (module 'network'): ns3::Ipv6Address::Ipv6Address() [constructor]
     cls.add_constructor([])
@@ -2178,8 +2212,8 @@
 
 def register_Ns3Mac16Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('<')
+    cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     ## mac16-address.h (module 'network'): ns3::Mac16Address::Mac16Address(ns3::Mac16Address const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Mac16Address const &', 'arg0')])
@@ -2215,8 +2249,8 @@
 
 def register_Ns3Mac48Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('<')
+    cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(ns3::Mac48Address const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Mac48Address const &', 'arg0')])
@@ -2287,8 +2321,8 @@
 
 def register_Ns3Mac64Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('<')
+    cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     ## mac64-address.h (module 'network'): ns3::Mac64Address::Mac64Address(ns3::Mac64Address const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Mac64Address const &', 'arg0')])
@@ -2463,6 +2497,12 @@
                    is_static=True)
     return
 
+def register_Ns3NonCopyable_methods(root_module, cls):
+    ## non-copyable.h (module 'core'): ns3::NonCopyable::NonCopyable() [constructor]
+    cls.add_constructor([], 
+                        visibility='protected')
+    return
+
 def register_Ns3ObjectBase_methods(root_module, cls):
     ## object-base.h (module 'core'): ns3::ObjectBase::ObjectBase() [constructor]
     cls.add_constructor([])
@@ -2831,7 +2871,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -3055,10 +3095,10 @@
     cls.add_method('Close', 
                    'void', 
                    [])
-    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
+    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t & packets, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
     cls.add_method('Diff', 
                    'bool', 
-                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
+                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t &', 'packets'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
                    is_static=True)
     ## pcap-file.h (module 'network'): bool ns3::PcapFile::Eof() const [member function]
     cls.add_method('Eof', 
@@ -3122,10 +3162,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header & header, ns3::Ptr<ns3::Packet const> p) [member function]
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header const & header, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file.h (module 'network'): ns3::PcapFile::SNAPLEN_DEFAULT [variable]
     cls.add_static_attribute('SNAPLEN_DEFAULT', 'uint32_t const', is_const=True)
     ## pcap-file.h (module 'network'): ns3::PcapFile::ZONE_DEFAULT [variable]
@@ -3369,10 +3409,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -3558,8 +3598,8 @@
 
 def register_Ns3TypeId_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('<')
+    cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     ## type-id.h (module 'core'): ns3::TypeId::TypeId(char const * name) [constructor]
     cls.add_constructor([param('char const *', 'name')])
@@ -3715,6 +3755,11 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetParent() [member function]
+    cls.add_method('SetParent', 
+                   'ns3::TypeId', 
+                   [], 
+                   template_parameters=['ns3::Object'])
     ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
     cls.add_method('SetSize', 
                    'ns3::TypeId', 
@@ -3772,7 +3817,6 @@
     cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
     cls.add_inplace_numeric_operator('+=', param('ns3::int64x64_t const &', u'right'))
-    cls.add_output_stream_operator()
     cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
     cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
     cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
@@ -3783,6 +3827,7 @@
     cls.add_inplace_numeric_operator('*=', param('ns3::int64x64_t const &', u'right'))
     cls.add_inplace_numeric_operator('-=', param('ns3::int64x64_t const &', u'right'))
     cls.add_inplace_numeric_operator('/=', param('ns3::int64x64_t const &', u'right'))
+    cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     cls.add_binary_comparison_operator('>=')
     ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t() [constructor]
@@ -4244,10 +4289,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header & header, ns3::Ptr<ns3::Packet const> p) [member function]
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header const & header, ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('ns3::Time', 't'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('ns3::Time', 't'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, uint8_t const * buffer, uint32_t length) [member function]
     cls.add_method('Write', 
                    'void', 
@@ -4380,6 +4425,16 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_virtual=True)
+    ## radiotap-header.h (module 'network'): uint16_t ns3::RadiotapHeader::GetAmpduStatusFlags() const [member function]
+    cls.add_method('GetAmpduStatusFlags', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint32_t ns3::RadiotapHeader::GetAmpduStatusRef() const [member function]
+    cls.add_method('GetAmpduStatusRef', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
     ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetAntennaNoisePower() const [member function]
     cls.add_method('GetAntennaNoisePower', 
                    'uint8_t', 
@@ -4410,6 +4465,21 @@
                    'ns3::TypeId', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetMcsFlags() const [member function]
+    cls.add_method('GetMcsFlags', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetMcsKnown() const [member function]
+    cls.add_method('GetMcsKnown', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetMcsRate() const [member function]
+    cls.add_method('GetMcsRate', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetRate() const [member function]
     cls.add_method('GetRate', 
                    'uint8_t', 
@@ -4430,6 +4500,56 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetVhtBandwidth() const [member function]
+    cls.add_method('GetVhtBandwidth', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetVhtCoding() const [member function]
+    cls.add_method('GetVhtCoding', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetVhtFlags() const [member function]
+    cls.add_method('GetVhtFlags', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetVhtGroupId() const [member function]
+    cls.add_method('GetVhtGroupId', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint16_t ns3::RadiotapHeader::GetVhtKnown() const [member function]
+    cls.add_method('GetVhtKnown', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetVhtMcsNssUser1() const [member function]
+    cls.add_method('GetVhtMcsNssUser1', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetVhtMcsNssUser2() const [member function]
+    cls.add_method('GetVhtMcsNssUser2', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetVhtMcsNssUser3() const [member function]
+    cls.add_method('GetVhtMcsNssUser3', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetVhtMcsNssUser4() const [member function]
+    cls.add_method('GetVhtMcsNssUser4', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radiotap-header.h (module 'network'): uint8_t ns3::RadiotapHeader::GetVhtPartialAid() const [member function]
+    cls.add_method('GetVhtPartialAid', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## radiotap-header.h (module 'network'): void ns3::RadiotapHeader::Print(std::ostream & os) const [member function]
     cls.add_method('Print', 
                    'void', 
@@ -4440,6 +4560,10 @@
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
+    ## radiotap-header.h (module 'network'): void ns3::RadiotapHeader::SetAmpduStatus(uint32_t referenceNumber, uint16_t flags, uint8_t crc) [member function]
+    cls.add_method('SetAmpduStatus', 
+                   'void', 
+                   [param('uint32_t', 'referenceNumber'), param('uint16_t', 'flags'), param('uint8_t', 'crc')])
     ## radiotap-header.h (module 'network'): void ns3::RadiotapHeader::SetAntennaNoisePower(double noise) [member function]
     cls.add_method('SetAntennaNoisePower', 
                    'void', 
@@ -4456,6 +4580,10 @@
     cls.add_method('SetFrameFlags', 
                    'void', 
                    [param('uint8_t', 'flags')])
+    ## radiotap-header.h (module 'network'): void ns3::RadiotapHeader::SetMcsFields(uint8_t known, uint8_t flags, uint8_t mcs) [member function]
+    cls.add_method('SetMcsFields', 
+                   'void', 
+                   [param('uint8_t', 'known'), param('uint8_t', 'flags'), param('uint8_t', 'mcs')])
     ## radiotap-header.h (module 'network'): void ns3::RadiotapHeader::SetRate(uint8_t rate) [member function]
     cls.add_method('SetRate', 
                    'void', 
@@ -4464,6 +4592,10 @@
     cls.add_method('SetTsft', 
                    'void', 
                    [param('uint64_t', 'tsft')])
+    ## radiotap-header.h (module 'network'): void ns3::RadiotapHeader::SetVhtFields(uint16_t known, uint8_t flags, uint8_t bandwidth, uint8_t * mcs_nss, uint8_t coding, uint8_t group_id, uint16_t partial_aid) [member function]
+    cls.add_method('SetVhtFields', 
+                   'void', 
+                   [param('uint16_t', 'known'), param('uint8_t', 'flags'), param('uint8_t', 'bandwidth'), param('uint8_t *', 'mcs_nss'), param('uint8_t', 'coding'), param('uint8_t', 'group_id'), param('uint16_t', 'partial_aid')])
     return
 
 def register_Ns3RandomVariableStream_methods(root_module, cls):
@@ -5417,7 +5549,6 @@
     cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
     cls.add_inplace_numeric_operator('+=', param('ns3::Time const &', u'right'))
-    cls.add_output_stream_operator()
     cls.add_binary_numeric_operator('*', root_module['ns3::Time'], root_module['ns3::Time'], param('int64_t const &', u'right'))
     cls.add_binary_numeric_operator('+', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', u'right'))
     cls.add_binary_numeric_operator('-', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', u'right'))
@@ -5425,6 +5556,7 @@
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('>')
     cls.add_inplace_numeric_operator('-=', param('ns3::Time const &', u'right'))
+    cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     cls.add_binary_comparison_operator('>=')
     ## nstime.h (module 'core'): ns3::Time::Time() [constructor]
@@ -6059,11 +6191,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -6182,6 +6324,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## data-calculator.h (module 'stats'): static ns3::TypeId ns3::DataCalculator::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Output(ns3::DataOutputCallback & callback) const [member function]
     cls.add_method('Output', 
                    'void', 
@@ -6256,6 +6403,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## data-output-interface.h (module 'stats'): static ns3::TypeId ns3::DataOutputInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## data-output-interface.h (module 'stats'): void ns3::DataOutputInterface::Output(ns3::DataCollector & dc) [member function]
     cls.add_method('Output', 
                    'void', 
@@ -6374,10 +6526,11 @@
     cls.add_constructor([param('ns3::DropTailQueue const &', 'arg0')])
     ## drop-tail-queue.h (module 'network'): ns3::DropTailQueue::DropTailQueue() [constructor]
     cls.add_constructor([])
-    ## drop-tail-queue.h (module 'network'): ns3::Queue::QueueMode ns3::DropTailQueue::GetMode() [member function]
+    ## drop-tail-queue.h (module 'network'): ns3::Queue::QueueMode ns3::DropTailQueue::GetMode() const [member function]
     cls.add_method('GetMode', 
                    'ns3::Queue::QueueMode', 
-                   [])
+                   [], 
+                   is_const=True)
     ## drop-tail-queue.h (module 'network'): static ns3::TypeId ns3::DropTailQueue::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -6426,10 +6579,10 @@
                    'double', 
                    [], 
                    is_virtual=True)
-    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
     cls.add_method('Interpolate', 
                    'double', 
-                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
                    visibility='private', is_virtual=True)
     ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
     cls.add_method('Validate', 
@@ -7254,6 +7407,11 @@
     cls.add_constructor([param('ns3::MinMaxAvgTotalCalculator< unsigned int > const &', 'arg0')])
     ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<unsigned int>::MinMaxAvgTotalCalculator() [constructor]
     cls.add_constructor([])
+    ## basic-data-calculators.h (module 'stats'): static ns3::TypeId ns3::MinMaxAvgTotalCalculator<unsigned int>::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::Output(ns3::DataOutputCallback & callback) const [member function]
     cls.add_method('Output', 
                    'void', 
@@ -7865,6 +8023,11 @@
     cls.add_method('FrameUpdate', 
                    'void', 
                    [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Mac48Address', 'realto')])
+    ## packet-data-calculators.h (module 'network'): static ns3::TypeId ns3::PacketSizeMinMaxAvgTotalCalculator::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## packet-data-calculators.h (module 'network'): void ns3::PacketSizeMinMaxAvgTotalCalculator::PacketUpdate(std::string path, ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('PacketUpdate', 
                    'void', 
@@ -9235,6 +9398,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::SimpleNetDevice >', 'device')], 
                    is_virtual=True)
+    ## simple-channel.h (module 'network'): void ns3::SimpleChannel::BlackList(ns3::Ptr<ns3::SimpleNetDevice> from, ns3::Ptr<ns3::SimpleNetDevice> to) [member function]
+    cls.add_method('BlackList', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SimpleNetDevice >', 'from'), param('ns3::Ptr< ns3::SimpleNetDevice >', 'to')], 
+                   is_virtual=True)
     ## simple-channel.h (module 'network'): ns3::Ptr<ns3::NetDevice> ns3::SimpleChannel::GetDevice(uint32_t i) const [member function]
     cls.add_method('GetDevice', 
                    'ns3::Ptr< ns3::NetDevice >', 
@@ -9255,6 +9423,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::Packet >', 'p'), param('uint16_t', 'protocol'), param('ns3::Mac48Address', 'to'), param('ns3::Mac48Address', 'from'), param('ns3::Ptr< ns3::SimpleNetDevice >', 'sender')], 
                    is_virtual=True)
+    ## simple-channel.h (module 'network'): void ns3::SimpleChannel::UnBlackList(ns3::Ptr<ns3::SimpleNetDevice> from, ns3::Ptr<ns3::SimpleNetDevice> to) [member function]
+    cls.add_method('UnBlackList', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::SimpleNetDevice >', 'from'), param('ns3::Ptr< ns3::SimpleNetDevice >', 'to')], 
+                   is_virtual=True)
     return
 
 def register_Ns3SimpleNetDevice_methods(root_module, cls):
@@ -9614,6 +9787,11 @@
                    'unsigned int', 
                    [], 
                    is_const=True)
+    ## basic-data-calculators.h (module 'stats'): static ns3::TypeId ns3::CounterCalculator<unsigned int>::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## basic-data-calculators.h (module 'stats'): void ns3::CounterCalculator<unsigned int>::Output(ns3::DataOutputCallback & callback) const [member function]
     cls.add_method('Output', 
                    'void', 
@@ -9643,6 +9821,11 @@
     cls.add_method('FrameUpdate', 
                    'void', 
                    [param('std::string', 'path'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Mac48Address', 'realto')])
+    ## packet-data-calculators.h (module 'network'): static ns3::TypeId ns3::PacketCounterCalculator::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## packet-data-calculators.h (module 'network'): void ns3::PacketCounterCalculator::PacketUpdate(std::string path, ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('PacketUpdate', 
                    'void', 
@@ -9926,6 +10109,7 @@
                         [param('ns3::Buffer::Iterator &', 'i'), param('ns3::Mac64Address', 'ad')])
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     register_functions_ns3_addressUtils(module.get_submodule('addressUtils'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
@@ -9940,6 +10124,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def register_functions_ns3_addressUtils(module, root_module):
     ## address-utils.h (module 'network'): extern bool ns3::addressUtils::IsMulticast(ns3::Address const & ad) [free function]
     module.add_function('IsMulticast', 
diff -Naur ns-3.23/src/network/helper/trace-helper.cc ns-3.24/src/network/helper/trace-helper.cc
--- ns-3.23/src/network/helper/trace-helper.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/helper/trace-helper.cc	2015-09-15 11:18:44.000000000 -0700
@@ -170,6 +170,13 @@
   file->Write (Simulator::Now (), p);
 }
 
+void
+PcapHelper::SinkWithHeader (Ptr<PcapFileWrapper> file, const Header &header, Ptr<const Packet> p)
+{
+  NS_LOG_FUNCTION (file << p);
+  file->Write (Simulator::Now (), header, p);
+}
+
 AsciiTraceHelper::AsciiTraceHelper ()
 {
   NS_LOG_FUNCTION_NOARGS ();
diff -Naur ns-3.23/src/network/helper/trace-helper.h ns-3.24/src/network/helper/trace-helper.h
--- ns-3.23/src/network/helper/trace-helper.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/helper/trace-helper.h	2015-09-15 11:18:44.000000000 -0700
@@ -50,9 +50,11 @@
     DLT_PPP = 9,
     DLT_RAW = 101,
     DLT_IEEE802_11 = 105,
+    DLT_LINUX_SSL = 113,
     DLT_PRISM_HEADER = 119,
     DLT_IEEE802_11_RADIO = 127,
-    DLT_IEEE802_15_4 = 195
+    DLT_IEEE802_15_4 = 195,
+    DLT_NETLINK = 253
   };
 
   /**
@@ -121,6 +123,18 @@
    * @param p the packet to write
    */
   static void DefaultSink (Ptr<PcapFileWrapper> file, Ptr<const Packet> p);
+
+  /**
+   * This trace sink passes a header separately from the packet to prevent creating a new packet
+   * (for performance reasons)
+   *
+   * @param file the file to write to
+   * @param header header of the packet
+   * @param p the packet to write
+   *
+   * @see DefaultSink
+   */
+  static void SinkWithHeader (Ptr<PcapFileWrapper> file, const Header& header, Ptr<const Packet> p);
 };
 
 template <typename T> void
diff -Naur ns-3.23/src/network/model/buffer.cc ns-3.24/src/network/model/buffer.cc
--- ns-3.23/src/network/model/buffer.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/model/buffer.cc	2015-09-15 11:18:44.000000000 -0700
@@ -305,11 +305,10 @@
   return m_end - (m_zeroAreaEnd - m_zeroAreaStart);
 }
 
-bool
+void
 Buffer::AddAtStart (uint32_t start)
 {
   NS_LOG_FUNCTION (this << start);
-  bool dirty;
   NS_ASSERT (CheckInternalState ());
   bool isDirty = m_data->m_count > 1 && m_start > m_data->m_dirtyStart;
   if (m_start >= start && !isDirty)
@@ -321,7 +320,6 @@
        */
       NS_ASSERT (m_data->m_count == 1 || m_start == m_data->m_dirtyStart);
       m_start -= start;
-      dirty = m_start > m_data->m_dirtyStart;
       // update dirty area
       m_data->m_dirtyStart = m_start;
     } 
@@ -347,20 +345,15 @@
       // update dirty area
       m_data->m_dirtyStart = m_start;
       m_data->m_dirtyEnd = m_end;
-
-      dirty = true;
-
     }
   m_maxZeroAreaStart = std::max (m_maxZeroAreaStart, m_zeroAreaStart);
   LOG_INTERNAL_STATE ("add start=" << start << ", ");
   NS_ASSERT (CheckInternalState ());
-  return dirty;
 }
-bool
+void
 Buffer::AddAtEnd (uint32_t end)
 {
   NS_LOG_FUNCTION (this << end);
-  bool dirty;
   NS_ASSERT (CheckInternalState ());
   bool isDirty = m_data->m_count > 1 && m_end < m_data->m_dirtyEnd;
   if (GetInternalEnd () + end <= m_data->m_size && !isDirty)
@@ -374,9 +367,6 @@
       m_end += end;
       // update dirty area.
       m_data->m_dirtyEnd = m_end;
-
-      dirty = m_end < m_data->m_dirtyEnd;
-
     } 
   else
     {
@@ -400,15 +390,10 @@
       // update dirty area
       m_data->m_dirtyStart = m_start;
       m_data->m_dirtyEnd = m_end;
-
-      dirty = true;
-
     } 
   m_maxZeroAreaStart = std::max (m_maxZeroAreaStart, m_zeroAreaStart);
   LOG_INTERNAL_STATE ("add end=" << end << ", ");
   NS_ASSERT (CheckInternalState ());
-
-  return dirty;
 }
 
 void
@@ -704,19 +689,6 @@
   return (sizeCheck != 0) ? 0 : 1;
 }
 
-int32_t 
-Buffer::GetCurrentStartOffset (void) const
-{
-  NS_LOG_FUNCTION (this);
-  return m_start;
-}
-int32_t 
-Buffer::GetCurrentEndOffset (void) const
-{
-  NS_LOG_FUNCTION (this);
-  return m_end;
-}
-
 
 void
 Buffer::TransformIntoRealBuffer (void) const
@@ -840,15 +812,14 @@
 Buffer::Iterator::CheckNoZero (uint32_t start, uint32_t end) const
 {
   NS_LOG_FUNCTION (this << &start << &end);
-  bool ok = true;
   for (uint32_t i = start; i < end; i++)
     {
       if (!Check (i))
         {
-          ok = false;
+          return false;
         }
     }
-  return ok;
+  return true;
 }
 bool 
 Buffer::Iterator::Check (uint32_t i) const
diff -Naur ns-3.23/src/network/model/buffer.h ns-3.24/src/network/model/buffer.h
--- ns-3.23/src/network/model/buffer.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/model/buffer.h	2015-09-15 11:18:44.000000000 -0700
@@ -496,7 +496,6 @@
 
   /**
    * \param start size to reserve
-   * \returns true if the buffer needed resizing, false otherwise.
    *
    * Add bytes at the start of the Buffer. The
    * content of these bytes is undefined but debugging
@@ -504,10 +503,9 @@
    * Any call to this method invalidates any Iterator
    * pointing to this Buffer.
    */
-  bool AddAtStart (uint32_t start);
+  void AddAtStart (uint32_t start);
   /**
    * \param end size to reserve
-   * \returns true if the buffer needed resizing, false otherwise.
    *
    * Add bytes at the end of the Buffer. The
    * content of these bytes is undefined but debugging
@@ -515,7 +513,7 @@
    * Any call to this method invalidates any Iterator
    * pointing to this Buffer.
    */
-  bool AddAtEnd (uint32_t end);
+  void AddAtEnd (uint32_t end);
 
   /**
    * \param o the buffer to append to the end of this buffer.
@@ -563,14 +561,6 @@
   inline Buffer::Iterator End (void) const;
 
   /**
-   * \brief Create a full copy of the buffer, including
-   * all the internal structures.
-   *
-   * \returns a copy of the buffer
-   */
-  Buffer CreateFullCopy (void) const;
-
-  /**
    * \brief Return the number of bytes required for serialization.
    * \return the number of bytes.
    */
@@ -598,17 +588,6 @@
    */
   uint32_t Deserialize (const uint8_t* buffer, uint32_t size);
 
-  /**
-   * \brief Returns the current buffer start offset
-   * \return the offset
-   */
-  int32_t GetCurrentStartOffset (void) const;
-  /**
-   * \brief Returns the current buffer end offset
-   * \return the offset
-   */
-  int32_t GetCurrentEndOffset (void) const;
-
   /** 
    * Copy the specified amount of data from the buffer to the given output stream.
    * 
@@ -701,6 +680,14 @@
   };
 
   /**
+   * \brief Create a full copy of the buffer, including
+   * all the internal structures.
+   *
+   * \returns a copy of the buffer
+   */
+  Buffer CreateFullCopy (void) const;
+
+  /**
    * \brief Transform a "Virtual byte buffer" into a "Real byte buffer"
    */
   void TransformIntoRealBuffer (void) const;
@@ -1005,7 +992,7 @@
 Buffer::Iterator::PeekU8 (void)
 {
   NS_ASSERT_MSG (m_current >= m_dataStart &&
-                 m_current <= m_dataEnd,
+                 m_current < m_dataEnd,
                  GetReadErrorMessage ());
 
   if (m_current < m_zeroStart)
diff -Naur ns-3.23/src/network/model/byte-tag-list.cc ns-3.24/src/network/model/byte-tag-list.cc
--- ns-3.23/src/network/model/byte-tag-list.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/model/byte-tag-list.cc	2015-09-15 11:18:44.000000000 -0700
@@ -106,8 +106,8 @@
       TagBuffer buf = TagBuffer (m_current, m_end);
       m_nextTid = buf.ReadU32 ();
       m_nextSize = buf.ReadU32 ();
-      m_nextStart = buf.ReadU32 ();
-      m_nextEnd = buf.ReadU32 ();
+      m_nextStart = buf.ReadU32 () + m_adjustment;
+      m_nextEnd = buf.ReadU32 () + m_adjustment;
       if (m_nextStart >= m_offsetEnd || m_nextEnd <= m_offsetStart)
         {
           m_current += 4 + 4 + 4 + 4 + m_nextSize;
@@ -118,13 +118,14 @@
         }
     }
 }
-ByteTagList::Iterator::Iterator (uint8_t *start, uint8_t *end, int32_t offsetStart, int32_t offsetEnd)
+ByteTagList::Iterator::Iterator (uint8_t *start, uint8_t *end, int32_t offsetStart, int32_t offsetEnd, int32_t adjustment)
   : m_current (start),
     m_end (end),
     m_offsetStart (offsetStart),
-    m_offsetEnd (offsetEnd)
+    m_offsetEnd (offsetEnd),
+    m_adjustment (adjustment)
 {
-  NS_LOG_FUNCTION (this << &start << &end << offsetStart << offsetEnd);
+  NS_LOG_FUNCTION (this << &start << &end << offsetStart << offsetEnd << adjustment);
   PrepareForNext ();
 }
 
@@ -137,13 +138,19 @@
 
 
 ByteTagList::ByteTagList ()
-  : m_used (0),
+  : m_minStart (INT32_MAX),
+    m_maxEnd (INT32_MIN),
+    m_adjustment (0),
+    m_used (0),
     m_data (0)
 {
   NS_LOG_FUNCTION (this);
 }
 ByteTagList::ByteTagList (const ByteTagList &o)
-  : m_used (o.m_used),
+  : m_minStart (o.m_minStart),
+    m_maxEnd (o.m_maxEnd),
+    m_adjustment (o.m_adjustment),
+    m_used (o.m_used),
     m_data (o.m_data)
 {
   NS_LOG_FUNCTION (this << &o);
@@ -161,6 +168,9 @@
     }
 
   Deallocate (m_data);
+  m_minStart = o.m_minStart;
+  m_maxEnd = o.m_maxEnd;
+  m_adjustment = o.m_adjustment;
   m_data = o.m_data;
   m_used = o.m_used;
   if (m_data != 0)
@@ -200,8 +210,16 @@
                              &m_data->data[spaceNeeded]);
   tag.WriteU32 (tid.GetUid ());
   tag.WriteU32 (bufferSize);
-  tag.WriteU32 (start);
-  tag.WriteU32 (end);
+  tag.WriteU32 (start - m_adjustment);
+  tag.WriteU32 (end - m_adjustment);
+  if (start - m_adjustment < m_minStart)
+    {
+      m_minStart = start - m_adjustment;
+    }
+  if (end - m_adjustment > m_maxEnd)
+    {
+      m_maxEnd = end - m_adjustment;
+    }
   m_used = spaceNeeded;
   m_data->dirty = m_used;
   return tag;
@@ -225,6 +243,9 @@
 {
   NS_LOG_FUNCTION (this);
   Deallocate (m_data);
+  m_minStart = INT32_MAX;
+  m_maxEnd = INT32_MIN;
+  m_adjustment = 0;
   m_data = 0;
   m_used = 0;
 }
@@ -244,51 +265,19 @@
   NS_LOG_FUNCTION (this << offsetStart << offsetEnd);
   if (m_data == 0)
     {
-      return Iterator (0, 0, offsetStart, offsetEnd);
+      return Iterator (0, 0, offsetStart, offsetEnd, 0);
     }
   else
     {
-      return Iterator (m_data->data, &m_data->data[m_used], offsetStart, offsetEnd);
-    }
-}
-
-bool 
-ByteTagList::IsDirtyAtEnd (int32_t appendOffset)
-{
-  NS_LOG_FUNCTION (this << appendOffset);
-  ByteTagList::Iterator i = BeginAll ();
-  while (i.HasNext ())
-    {
-      ByteTagList::Iterator::Item item = i.Next ();
-      if (item.end > appendOffset)
-        {
-          return true;
-        }
-    }
-  return false;
-}
-
-bool 
-ByteTagList::IsDirtyAtStart (int32_t prependOffset)
-{
-  NS_LOG_FUNCTION (this << prependOffset);
-  ByteTagList::Iterator i = BeginAll ();
-  while (i.HasNext ())
-    {
-      ByteTagList::Iterator::Item item = i.Next ();
-      if (item.start < prependOffset)
-        {
-          return true;
-        }
+      return Iterator (m_data->data, &m_data->data[m_used], offsetStart, offsetEnd, m_adjustment);
     }
-  return false;
 }
 
 void 
-ByteTagList::AddAtEnd (int32_t adjustment, int32_t appendOffset)
+ByteTagList::AddAtEnd (int32_t appendOffset)
 {
-  NS_LOG_FUNCTION (this << adjustment << appendOffset);
-  if (adjustment == 0 && !IsDirtyAtEnd (appendOffset))
+  NS_LOG_FUNCTION (this << appendOffset);
+  if (m_maxEnd <= appendOffset - m_adjustment)
     {
       return;
     }
@@ -297,57 +286,54 @@
   while (i.HasNext ())
     {
       ByteTagList::Iterator::Item item = i.Next ();
-      item.start += adjustment;
-      item.end += adjustment;
 
       if (item.start >= appendOffset)
         {
           continue;
         }
-      else if (item.start < appendOffset && item.end > appendOffset)
+      if (item.end > appendOffset)
         {
           item.end = appendOffset;
         }
-      else
-        {
-          // nothing to do.
-        }
       TagBuffer buf = list.Add (item.tid, item.size, item.start, item.end);
       buf.CopyFrom (item.buf);
+      if (item.end > m_maxEnd)
+        {
+          m_maxEnd = item.end;
+        }
     }
   *this = list;
 }
 
 void 
-ByteTagList::AddAtStart (int32_t adjustment, int32_t prependOffset)
+ByteTagList::AddAtStart (int32_t prependOffset)
 {
-  NS_LOG_FUNCTION (this << adjustment << prependOffset);
-  if (adjustment == 0 && !IsDirtyAtStart (prependOffset))
+  NS_LOG_FUNCTION (this << prependOffset);
+  if (m_minStart >= prependOffset - m_adjustment)
     {
       return;
     }
+  m_minStart = INT32_MAX;
   ByteTagList list;
   ByteTagList::Iterator i = BeginAll ();
   while (i.HasNext ())
     {
       ByteTagList::Iterator::Item item = i.Next ();
-      item.start += adjustment;
-      item.end += adjustment;
 
       if (item.end <= prependOffset)
         {
           continue;
         }
-      else if (item.end > prependOffset && item.start < prependOffset)
+      if (item.start < prependOffset)
         {
           item.start = prependOffset;
         }
-      else
-        {
-          // nothing to do.
-        }
       TagBuffer buf = list.Add (item.tid, item.size, item.start, item.end);
       buf.CopyFrom (item.buf);
+      if (item.start < m_minStart)
+        {
+          m_minStart = item.start;
+        }
     }
   *this = list;
 }
diff -Naur ns-3.23/src/network/model/byte-tag-list.h ns-3.24/src/network/model/byte-tag-list.h
--- ns-3.23/src/network/model/byte-tag-list.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/model/byte-tag-list.h	2015-09-15 11:18:44.000000000 -0700
@@ -20,6 +20,7 @@
 #ifndef BYTE_TAG_LIST_H
 #define BYTE_TAG_LIST_H
 
+#define __STDC_LIMIT_MACROS
 #include <stdint.h>
 #include "ns3/type-id.h"
 #include "tag-buffer.h"
@@ -49,21 +50,15 @@
  *     as-needed to emulate COW semantics.
  *
  *   - Each tag tags a unique set of bytes identified by the pair of offsets
- *     (start,end). These offsets are provided by Buffer::GetCurrentStartOffset
- *     and Buffer::GetCurrentEndOffset which means that they are relative to 
- *     the start of the 'virtual byte buffer' as explained in the documentation
- *     for the ns3::Buffer class. Whenever the origin of the offset of the Buffer
- *     instance associated to this ByteTagList instance changes, the Buffer class
- *     reports this to its container Packet class as a bool return value
- *     in Buffer::AddAtStart and Buffer::AddAtEnd. In both cases, when this happens
- *     the Packet class calls ByteTagList::AddAtEnd and ByteTagList::AddAtStart to update
- *     the byte offsets of each tag in the ByteTagList.
- *
- *   - Whenever bytes are removed from the packet byte buffer, the ByteTagList offsets
- *     are never updated because we rely on the fact that they will be updated in
- *     either the next call to Packet::AddHeader or Packet::AddTrailer or when
- *     the user iterates the tag list with Packet::GetTagIterator and 
- *     TagIterator::Next.
+ *     (start,end). These offsets are relative to the start of the packet
+ *     Whenever the origin of the offset changes, the Packet adjusts all
+ *     byte tags using ByteTagList::Adjust method.
+ *
+ *   - When packet is reduced in size, byte tags that span outside the packet
+ *     boundaries remain in ByteTagList. It is not a problem as iterator fixes
+ *     the boundaries before returning item. However, when packet is extending,
+ *     it calls ByteTagList::AddAtStart or ByteTagList::AddAtEnd to cut byte
+ *     tags that will otherwise cover new bytes.
  */
 class ByteTagList
 {
@@ -125,8 +120,9 @@
      * \param end End tag
      * \param offsetStart offset to the start of the tag from the virtual byte buffer
      * \param offsetEnd offset to the end of the tag from the virtual byte buffer
+     * \param adjustment adjustment to byte tag offsets
      */
-    Iterator (uint8_t *start, uint8_t *end, int32_t offsetStart, int32_t offsetEnd);
+    Iterator (uint8_t *start, uint8_t *end, int32_t offsetStart, int32_t offsetEnd, int32_t m_adjustment);
 
     /**
      * \brief Prepare the iterator for the next tag
@@ -136,6 +132,7 @@
     uint8_t *m_end;         //!< End tag
     int32_t m_offsetStart;  //!< Offset to the start of the tag from the virtual byte buffer
     int32_t m_offsetEnd;    //!< Offset to the end of the tag from the virtual byte buffer
+    int32_t m_adjustment;   //!< Adjustment to byte tag offsets
     uint32_t m_nextTid;     //!< TypeId of the next tag
     uint32_t m_nextSize;    //!< Size of the next tag
     int32_t m_nextStart;    //!< Start of the next tag
@@ -204,42 +201,32 @@
    */
   ByteTagList::Iterator Begin (int32_t offsetStart, int32_t offsetEnd) const;
 
+  /*
+   * Adjust the offsets stored internally by the adjustment delta.
+   *
+   * \param adjustment value to change stored offsets by
+   */
+  inline void Adjust (int32_t adjustment);
+
   /**
-   * Adjust the offsets stored internally by the adjustment delta and
-   * make sure that all offsets are smaller than appendOffset which represents
+   * Make sure that all offsets are smaller than appendOffset which represents
    * the location where new bytes have been added to the byte buffer.
    * 
-   * \param adjustment value to change stored offsets by
    * \param appendOffset maximum offset value
    *
    */
-  void AddAtEnd (int32_t adjustment, int32_t appendOffset);
+  void AddAtEnd (int32_t appendOffset);
   /**
-   * Adjust the offsets stored internally by the adjustment delta and
-   * make sure that all offsets are bigger than prependOffset which represents
+   * Make sure that all offsets are bigger than prependOffset which represents
    * the location where new bytes have been added to the byte buffer.
    *
-   * \param adjustment value to change stored offsets byte
    * \param prependOffset minimum offset value
    *
    */
-  void AddAtStart (int32_t adjustment, int32_t prependOffset);
+  void AddAtStart (int32_t prependOffset);
 
 private:
   /**
-   * \brief Check that all offsets are smaller than appendOffset
-   * \param appendOffset the append offset to check
-   * \returns true if the check is false
-   */
-  bool IsDirtyAtEnd (int32_t appendOffset);
-  /**
-   * \brief Check that all offsets are bigger than prependOffset
-   * \param prependOffset the prepend offset to check
-   * \returns true if the check is false
-   */
-  bool IsDirtyAtStart (int32_t prependOffset);
-
-  /**
    * \brief Returns an iterator pointing to the very first tag in this list.
    *
    * \returns an iterator
@@ -259,10 +246,19 @@
    */
   void Deallocate (struct ByteTagListData *data);
 
+  int32_t m_minStart; // !< minimal start offset
+  int32_t m_maxEnd; // !< maximal end offset
+  int32_t m_adjustment; // !< adjustment to byte tag offsets
   uint16_t m_used; //!< the number of used bytes in the buffer
   struct ByteTagListData *m_data; //!< the ByteTagListData structure
 };
 
+void
+ByteTagList::Adjust (int32_t adjustment)
+{
+  m_adjustment += adjustment;
+}
+
 } // namespace ns3
 
 #endif /* BYTE_TAG_LIST_H */
diff -Naur ns-3.23/src/network/model/chunk.cc ns-3.24/src/network/model/chunk.cc
--- ns-3.23/src/network/model/chunk.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/model/chunk.cc	2015-09-15 11:18:44.000000000 -0700
@@ -1,3 +1,23 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2008 INRIA
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
+ */
+
 #include "chunk.h"
 
 namespace ns3 {
diff -Naur ns-3.23/src/network/model/chunk.h ns-3.24/src/network/model/chunk.h
--- ns-3.23/src/network/model/chunk.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/model/chunk.h	2015-09-15 11:18:44.000000000 -0700
@@ -1,3 +1,23 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2008 INRIA
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
+ */
+
 #ifndef CHUNK_H
 #define CHUNK_H
 
diff -Naur ns-3.23/src/network/model/header.cc ns-3.24/src/network/model/header.cc
--- ns-3.23/src/network/model/header.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/model/header.cc	2015-09-15 11:18:44.000000000 -0700
@@ -1,3 +1,23 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2008 INRIA
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
+ */
+
 #include "header.h"
 #include "ns3/log.h"
 
diff -Naur ns-3.23/src/network/model/net-device.h ns-3.24/src/network/model/net-device.h
--- ns-3.23/src/network/model/net-device.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/model/net-device.h	2015-09-15 11:18:44.000000000 -0700
@@ -131,6 +131,10 @@
    */
   virtual bool IsLinkUp (void) const = 0;
   /**
+   * TracedCallback signature for link changed event.
+   */
+  typedef void (* LinkChangeTracedCallback) (void);
+  /**
    * \param callback the callback to invoke
    *
    * Add a callback invoked whenever the link 
@@ -188,12 +192,12 @@
   virtual Address GetMulticast (Ipv4Address multicastGroup) const = 0;
 
   /**
-* \brief Get the MAC multicast address corresponding
-* to the IPv6 address provided.
-* \param addr IPv6 address
-* \return the MAC multicast address
-* \warning Calling this method is invalid if IsMulticast returns not true.
-*/
+   * \brief Get the MAC multicast address corresponding
+   * to the IPv6 address provided.
+   * \param addr IPv6 address
+   * \return the MAC multicast address
+   * \warning Calling this method is invalid if IsMulticast returns not true.
+   */
   virtual Address GetMulticast (Ipv6Address addr) const = 0;
 
   /**
diff -Naur ns-3.23/src/network/model/packet.cc ns-3.24/src/network/model/packet.cc
--- ns-3.23/src/network/model/packet.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/model/packet.cc	2015-09-15 11:18:44.000000000 -0700
@@ -229,12 +229,14 @@
 {
   NS_LOG_FUNCTION (this << start << length);
   Buffer buffer = m_buffer.CreateFragment (start, length);
+  ByteTagList byteTagList = m_byteTagList;
+  byteTagList.Adjust (-start);
   NS_ASSERT (m_buffer.GetSize () >= start + length);
   uint32_t end = m_buffer.GetSize () - (start + length);
   PacketMetadata metadata = m_metadata.CreateFragment (start, end);
   // again, call the constructor directly rather than
   // through Create because it is private.
-  return Ptr<Packet> (new Packet (buffer, m_byteTagList, m_packetTagList, metadata), false);
+  return Ptr<Packet> (new Packet (buffer, byteTagList, m_packetTagList, metadata), false);
 }
 
 void
@@ -254,13 +256,9 @@
 {
   uint32_t size = header.GetSerializedSize ();
   NS_LOG_FUNCTION (this << header.GetInstanceTypeId ().GetName () << size);
-  uint32_t orgStart = m_buffer.GetCurrentStartOffset ();
-  bool resized = m_buffer.AddAtStart (size);
-  if (resized)
-    {
-      m_byteTagList.AddAtStart (m_buffer.GetCurrentStartOffset () + size - orgStart,
-                                m_buffer.GetCurrentStartOffset () + size);
-    }
+  m_buffer.AddAtStart (size);
+  m_byteTagList.Adjust (size);
+  m_byteTagList.AddAtStart (size);
   header.Serialize (m_buffer.Begin ());
   m_metadata.AddHeader (header, size);
 }
@@ -270,6 +268,7 @@
   uint32_t deserialized = header.Deserialize (m_buffer.Begin ());
   NS_LOG_FUNCTION (this << header.GetInstanceTypeId ().GetName () << deserialized);
   m_buffer.RemoveAtStart (deserialized);
+  m_byteTagList.Adjust (-deserialized);
   m_metadata.RemoveHeader (header, deserialized);
   return deserialized;
 }
@@ -285,13 +284,8 @@
 {
   uint32_t size = trailer.GetSerializedSize ();
   NS_LOG_FUNCTION (this << trailer.GetInstanceTypeId ().GetName () << size);
-  uint32_t orgStart = m_buffer.GetCurrentStartOffset ();
-  bool resized = m_buffer.AddAtEnd (size);
-  if (resized)
-    {
-      m_byteTagList.AddAtEnd (m_buffer.GetCurrentStartOffset () - orgStart,
-                              m_buffer.GetCurrentEndOffset () - size);
-    }
+  m_byteTagList.AddAtEnd (GetSize ());
+  m_buffer.AddAtEnd (size);
   Buffer::Iterator end = m_buffer.End ();
   trailer.Serialize (end);
   m_metadata.AddTrailer (trailer, size);
@@ -317,29 +311,20 @@
 Packet::AddAtEnd (Ptr<const Packet> packet)
 {
   NS_LOG_FUNCTION (this << packet << packet->GetSize ());
-  uint32_t aStart = m_buffer.GetCurrentStartOffset ();
-  uint32_t bEnd = packet->m_buffer.GetCurrentEndOffset ();
-  m_buffer.AddAtEnd (packet->m_buffer);
-  uint32_t appendPrependOffset = m_buffer.GetCurrentEndOffset () - packet->m_buffer.GetSize ();
-  m_byteTagList.AddAtEnd (m_buffer.GetCurrentStartOffset () - aStart, 
-                          appendPrependOffset);
+  m_byteTagList.AddAtEnd (GetSize ());
   ByteTagList copy = packet->m_byteTagList;
-  copy.AddAtStart (m_buffer.GetCurrentEndOffset () - bEnd,
-                   appendPrependOffset);
+  copy.AddAtStart (0);
+  copy.Adjust (GetSize ());
   m_byteTagList.Add (copy);
+  m_buffer.AddAtEnd (packet->m_buffer);
   m_metadata.AddAtEnd (packet->m_metadata);
 }
 void
 Packet::AddPaddingAtEnd (uint32_t size)
 {
   NS_LOG_FUNCTION (this << size);
-  uint32_t orgEnd = m_buffer.GetCurrentEndOffset ();
-  bool resized = m_buffer.AddAtEnd (size);
-  if (resized)
-    {
-      m_byteTagList.AddAtEnd (m_buffer.GetCurrentEndOffset () - orgEnd,
-                              m_buffer.GetCurrentEndOffset () - size);
-    }
+  m_byteTagList.AddAtEnd (GetSize ());
+  m_buffer.AddAtEnd (size);
   m_metadata.AddPaddingAtEnd (size);
 }
 void 
@@ -354,6 +339,7 @@
 {
   NS_LOG_FUNCTION (this << size);
   m_buffer.RemoveAtStart (size);
+  m_byteTagList.Adjust (-size);
   m_metadata.RemoveAtStart (size);
 }
 
@@ -805,14 +791,14 @@
   NS_LOG_FUNCTION (this << tag.GetInstanceTypeId ().GetName () << tag.GetSerializedSize ());
   ByteTagList *list = const_cast<ByteTagList *> (&m_byteTagList);
   TagBuffer buffer = list->Add (tag.GetInstanceTypeId (), tag.GetSerializedSize (), 
-                                m_buffer.GetCurrentStartOffset (),
-                                m_buffer.GetCurrentEndOffset ());
+                                0,
+                                GetSize ());
   tag.Serialize (buffer);
 }
 ByteTagIterator 
 Packet::GetByteTagIterator (void) const
 {
-  return ByteTagIterator (m_byteTagList.Begin (m_buffer.GetCurrentStartOffset (), m_buffer.GetCurrentEndOffset ()));
+  return ByteTagIterator (m_byteTagList.Begin (0, GetSize ()));
 }
 
 bool 
diff -Naur ns-3.23/src/network/model/packet.h ns-3.24/src/network/model/packet.h
--- ns-3.23/src/network/model/packet.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/model/packet.h	2015-09-15 11:18:44.000000000 -0700
@@ -29,6 +29,7 @@
 #include "byte-tag-list.h"
 #include "packet-tag-list.h"
 #include "nix-vector.h"
+#include "ns3/mac48-address.h"
 #include "ns3/callback.h"
 #include "ns3/assert.h"
 #include "ns3/ptr.h"
@@ -660,16 +661,25 @@
    *
    * \param [in] packet The packet.
    */
-  typedef void (* TracedCallback) (const Ptr<const Packet> packet);
+  typedef void (* TracedCallback) (Ptr<const Packet> packet);
   
   /**
-   * TracedCallback signature for packet and address.
+   * TracedCallback signature for packet and Address.
    *
    * \param [in] packet The packet.
    * \param [in] address The address.
    */
-  typedef void (* PacketAddressTracedCallback)
-    (const Ptr<const Packet> packet, const Address &address);
+  typedef void (* AddressTracedCallback)
+    (Ptr<const Packet> packet, const Address &address);
+  
+  /**
+   * TracedCallback signature for packet and Mac48Address.
+   *
+   * \param [in] packet The packet.
+   * \param [in] mac The Mac48Address.
+   */
+  typedef void (* Mac48AddressTracedCallback)
+    (Ptr<const Packet> packet, Mac48Address mac);
   
   /**
    * TracedCallback signature for changes in packet size.
@@ -677,9 +687,19 @@
    * \param [in] oldSize The previous packet's size.
    * \param [in] newSize The actual packet's size.
    */
-  typedef void (* PacketSizeTracedCallback)
-    (const uint32_t oldSize, const uint32_t newSize);
+  typedef void (* SizeTracedCallback)
+    (uint32_t oldSize, uint32_t newSize);
 
+  /**
+   * TracedCallback signature for packet and SINR.
+   *
+   * \param [in] packet The packet.
+   * \param [in] sinr The received SINR.
+   */
+  typedef void (* SinrTracedCallback)
+    (Ptr<const Packet> packet, double sinr);
+    
+  
 private:
   /**
    * \brief Constructor
diff -Naur ns-3.23/src/network/model/packet-tag-list.h ns-3.24/src/network/model/packet-tag-list.h
--- ns-3.23/src/network/model/packet-tag-list.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/model/packet-tag-list.h	2015-09-15 11:18:44.000000000 -0700
@@ -158,7 +158,7 @@
      */
     enum TagData_e
     {
-      MAX_SIZE = 20           /**< Size of serialization buffer #data */
+      MAX_SIZE = 21           /**< Size of serialization buffer #data */
   };
 
     uint8_t data[MAX_SIZE];   /**< Serialization buffer */
diff -Naur ns-3.23/src/network/model/trailer.cc ns-3.24/src/network/model/trailer.cc
--- ns-3.23/src/network/model/trailer.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/model/trailer.cc	2015-09-15 11:18:44.000000000 -0700
@@ -1,3 +1,23 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2008 INRIA
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
+ */
+
 #include "trailer.h"
 #include "ns3/log.h"
 
diff -Naur ns-3.23/src/network/test/buffer-test.cc ns-3.24/src/network/test/buffer-test.cc
--- ns-3.23/src/network/test/buffer-test.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/test/buffer-test.cc	2015-09-15 11:18:44.000000000 -0700
@@ -1,3 +1,23 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2010 INRIA
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
+ */
+
 #include "ns3/buffer.h"
 #include "ns3/random-variable-stream.h"
 #include "ns3/double.h"
@@ -136,9 +156,8 @@
   buff64.AddAtStart (8);
   i = buff64.Begin ();
   i.WriteU64 (0x0123456789ABCDEFllu);
-  ENSURE_WRITTEN_BYTES (buff64, 8, 0xef, 0xcd, 0xab, 0x89, 0x67, 0x45, 0x23, 0x01);
   i = buff64.Begin ();
-  NS_TEST_ASSERT_MSG_EQ (i.ReadLsbtohU64 (), 0x0123456789abcdefllu, "Could not read expected value");
+  NS_TEST_ASSERT_MSG_EQ (i.ReadU64 (), 0x0123456789abcdefllu, "Could not read expected value");
   i = buff64.Begin ();
   i.WriteHtolsbU64 (0x0123456789ABCDEFllu);
   ENSURE_WRITTEN_BYTES (buff64, 8, 0xef, 0xcd, 0xab, 0x89, 0x67, 0x45, 0x23, 0x01);
diff -Naur ns-3.23/src/network/test/packet-test-suite.cc ns-3.24/src/network/test/packet-test-suite.cc
--- ns-3.23/src/network/test/packet-test-suite.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/test/packet-test-suite.cc	2015-09-15 11:18:44.000000000 -0700
@@ -40,7 +40,21 @@
 public:
   ATestTagBase () : m_error (false), m_data (0) {}
   ATestTagBase (uint8_t data) : m_error (false), m_data (data) {}
-  virtual int GetData () const {
+  /**
+   * Register this type.
+   * \return The TypeId.
+   */
+  static TypeId GetTypeId (void)
+  {
+    static TypeId tid = TypeId ("ATestTagBase")
+      .SetParent<Tag> ()
+      .SetGroupName ("Network")
+      .HideFromDocumentation ()
+    // No AddConstructor because this is an abstract class.
+      ;
+    return tid;
+  }
+  int GetData () const {
     int result = (int)m_data;
     return result;
   }
@@ -52,13 +66,18 @@
 class ATestTag : public ATestTagBase
 {
 public:
+  /**
+   * Register this type.
+   * \return The TypeId.
+   */
   static TypeId GetTypeId (void) {
     std::ostringstream oss;
     oss << "anon::ATestTag<" << N << ">";
     static TypeId tid = TypeId (oss.str ().c_str ())
-      .SetParent<Tag> ()
-      .AddConstructor<ATestTag<N> > ()
+      .SetParent<ATestTagBase> ()
+      .SetGroupName ("Network")
       .HideFromDocumentation ()
+      .AddConstructor<ATestTag<N> > ()
     ;
     return tid;
   }
@@ -99,6 +118,20 @@
 {
 public:
   ATestHeaderBase () : Header (), m_error (false) {}
+  /**
+   * Register this type.
+   * \return The TypeId.
+   */
+  static TypeId GetTypeId (void)
+  {
+    static TypeId tid = TypeId ("ATestHeaderBase")
+      .SetParent<Header> ()
+      .SetGroupName ("Network")
+      .HideFromDocumentation ()
+      // No AddConstructor because this is an abstract class.
+      ;
+    return tid;
+  }
   bool m_error;
 };
 
@@ -106,13 +139,18 @@
 class ATestHeader : public ATestHeaderBase
 {
 public:
+  /**
+   * Register this type.
+   * \return The TypeId.
+   */
   static TypeId GetTypeId (void) {
     std::ostringstream oss;
     oss << "anon::ATestHeader<" << N << ">";
     static TypeId tid = TypeId (oss.str ().c_str ())
-      .SetParent<Header> ()
-      .AddConstructor<ATestHeader<N> > ()
+      .SetParent<ATestHeaderBase> ()
+      .SetGroupName ("Network")
       .HideFromDocumentation ()
+      .AddConstructor<ATestHeader<N> > ()
     ;
     return tid;
   }
@@ -150,6 +188,20 @@
 {
 public:
   ATestTrailerBase () : Trailer (), m_error (false) {}
+  /**
+   * Register this type.
+   * \return The TypeId.
+   */
+  static TypeId GetTypeId (void)
+  {
+    static TypeId tid = TypeId ("ATestTrailerBase")
+      .SetParent<Trailer> ()
+      .SetGroupName ("Network")
+      .HideFromDocumentation ()
+    // No AddConstructor because this is an abstract class.
+      ;
+    return tid;
+  }
   bool m_error;
 };
 
@@ -157,13 +209,18 @@
 class ATestTrailer : public ATestTrailerBase
 {
 public:
+  /**
+   * Register this type.
+   * \return The TypeId.
+   */
   static TypeId GetTypeId (void) {
     std::ostringstream oss;
     oss << "anon::ATestTrailer<" << N << ">";
     static TypeId tid = TypeId (oss.str ().c_str ())
-      .SetParent<Header> ()
-      .AddConstructor<ATestTrailer<N> > ()
+      .SetParent<ATestTrailerBase> ()
+      .SetGroupName ("Network")
       .HideFromDocumentation ()
+      .AddConstructor<ATestTrailer<N> > ()
     ;
     return tid;
   }
@@ -451,6 +508,80 @@
     CHECK (tmp, 1, E (20, 1, 1001));
 #endif
   }
+
+  /* Test reducing tagged packet size and increasing it back. */
+  {
+    Ptr<Packet> tmp = Create<Packet> (0);
+    tmp->AddHeader (ATestHeader<100> ());
+    tmp->AddByteTag (ATestTag<25> ());
+    CHECK (tmp, 1, E (25, 0, 100));
+    tmp->RemoveAtStart (50);
+    CHECK (tmp, 1, E (25, 0, 50));
+    tmp->AddHeader (ATestHeader<50> ());
+    CHECK (tmp, 1, E (25, 50, 100));
+  }
+
+  /* Similar test case, but using trailer instead of header. */
+  {
+    Ptr<Packet> tmp = Create<Packet> (0);
+    tmp->AddTrailer (ATestTrailer<100> ());
+    tmp->AddByteTag (ATestTag<25> ());
+    CHECK (tmp, 1, E (25, 0, 100));
+    tmp->RemoveAtEnd (50);
+    CHECK (tmp, 1, E (25, 0, 50));
+    tmp->AddTrailer (ATestTrailer<50> ());
+    CHECK (tmp, 1, E (25, 0, 50));
+  }
+
+  /* Test reducing tagged packet size and increasing it by half. */
+  {
+    Ptr<Packet> tmp = Create<Packet> (0);
+    tmp->AddHeader (ATestHeader<100> ());
+    tmp->AddByteTag (ATestTag<25> ());
+    CHECK (tmp, 1, E (25, 0, 100));
+    tmp->RemoveAtStart (50);
+    CHECK (tmp, 1, E (25, 0, 50));
+    tmp->AddHeader (ATestHeader<25> ());
+    CHECK (tmp, 1, E (25, 25, 75));
+  }
+
+  /* Similar test case, but using trailer instead of header. */
+  {
+    Ptr<Packet> tmp = Create<Packet> (0);
+    tmp->AddTrailer (ATestTrailer<100> ());
+    tmp->AddByteTag (ATestTag<25> ());
+    CHECK (tmp, 1, E (25, 0, 100));
+    tmp->RemoveAtEnd (50);
+    CHECK (tmp, 1, E (25, 0, 50));
+    tmp->AddTrailer (ATestTrailer<25> ());
+    CHECK (tmp, 1, E (25, 0, 50));
+  }
+
+  /* Test AddPaddingAtEnd. */
+  {
+    Ptr<Packet> tmp = Create<Packet> (0);
+    tmp->AddTrailer (ATestTrailer<100> ());
+    tmp->AddByteTag (ATestTag<25> ());
+    CHECK (tmp, 1, E (25, 0, 100));
+    tmp->RemoveAtEnd (50);
+    CHECK (tmp, 1, E (25, 0, 50));
+    tmp->AddPaddingAtEnd (50);
+    CHECK (tmp, 1, E (25, 0, 50));
+  }
+
+  /* Test reducing tagged packet size and increasing it back,
+   * now using padding bytes to avoid triggering dirty state
+   * in virtual buffer
+   */
+  {
+    Ptr<Packet> tmp = Create<Packet> (100);
+    tmp->AddByteTag (ATestTag<25> ());
+    CHECK (tmp, 1, E (25, 0, 100));
+    tmp->RemoveAtEnd (50);
+    CHECK (tmp, 1, E (25, 0, 50));
+    tmp->AddPaddingAtEnd (50);
+    CHECK (tmp, 1, E (25, 0, 50));
+  }
 }
 //--------------------------------------
 class PacketTagListTest : public TestCase
diff -Naur ns-3.23/src/network/test/pcap-file-test-suite.cc ns-3.24/src/network/test/pcap-file-test-suite.cc
--- ns-3.23/src/network/test/pcap-file-test-suite.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/test/pcap-file-test-suite.cc	2015-09-15 11:18:44.000000000 -0700
@@ -211,7 +211,7 @@
 };
 
 ReadModeCreateTestCase::ReadModeCreateTestCase ()
-  : TestCase ("Check to see that PcapFile::Open with mode \"std::ios::in\" works")
+  : TestCase ("Check to see that PcapFile::Open with mode std::ios::in works")
 {
 }
 
@@ -320,7 +320,7 @@
 };
 
 AppendModeCreateTestCase::AppendModeCreateTestCase ()
-  : TestCase ("Check to see that PcapFile::Open with mode \"std::ios::app\" works")
+  : TestCase ("Check to see that PcapFile::Open with mode std::ios::app works")
 {
 }
 
@@ -1090,8 +1090,8 @@
   // Check that PcapDiff(file, file) is false
   //
   std::string filename = CreateDataDirFilename ("known.pcap");
-  uint32_t sec (0), usec (0);
-  bool diff = PcapFile::Diff (filename, filename, sec, usec);
+  uint32_t sec (0), usec (0), packets (0);
+  bool diff = PcapFile::Diff (filename, filename, sec, usec, packets);
   NS_TEST_EXPECT_MSG_EQ (diff, false, "PcapDiff(file, file) must always be false");
 
   //
@@ -1114,7 +1114,8 @@
     }
   f.Close ();
 
-  diff = PcapFile::Diff (filename, filename2, sec, usec);
+  packets = 0;
+  diff = PcapFile::Diff (filename, filename2, sec, usec, packets);
   NS_TEST_EXPECT_MSG_EQ (diff, true, "PcapDiff(file, file2) must be true");
   NS_TEST_EXPECT_MSG_EQ (sec,  2, "Files are different from 2.3696 seconds");
   NS_TEST_EXPECT_MSG_EQ (usec, 3696, "Files are different from 2.3696 seconds");
diff -Naur ns-3.23/src/network/utils/ascii-file.cc ns-3.24/src/network/utils/ascii-file.cc
--- ns-3.23/src/network/utils/ascii-file.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/utils/ascii-file.cc	2015-09-15 11:18:44.000000000 -0700
@@ -80,9 +80,9 @@
 }
 
 bool
-AsciiFile:: Diff (std::string const & f1,
-		  std::string const & f2, 
-		  uint64_t & lineNumber)
+AsciiFile::Diff (std::string const & f1,
+                 std::string const & f2, 
+                 uint64_t & lineNumber)
 {
   AsciiFile ascii1, ascii2;
   ascii1.Open (f1, std::ios::in);
diff -Naur ns-3.23/src/network/utils/data-rate.h ns-3.24/src/network/utils/data-rate.h
--- ns-3.23/src/network/utils/data-rate.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/utils/data-rate.h	2015-09-15 11:18:44.000000000 -0700
@@ -184,6 +184,9 @@
    * Calculates the transmission time at this data rate
    * \param bytes The number of bytes (not bits) for which to calculate
    * \return The transmission time in seconds for the number of bytes specified
+   *
+   * \deprecated This method will go away in future versions of ns-3.
+   * See instead CalculateBytesTxTime()
    */
   double CalculateTxTime (uint32_t bytes) const NS_DEPRECATED;
 
diff -Naur ns-3.23/src/network/utils/drop-tail-queue.cc ns-3.24/src/network/utils/drop-tail-queue.cc
--- ns-3.23/src/network/utils/drop-tail-queue.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/utils/drop-tail-queue.cc	2015-09-15 11:18:44.000000000 -0700
@@ -36,7 +36,8 @@
     .AddAttribute ("Mode", 
                    "Whether to use bytes (see MaxBytes) or packets (see MaxPackets) as the maximum queue size metric.",
                    EnumValue (QUEUE_MODE_PACKETS),
-                   MakeEnumAccessor (&DropTailQueue::SetMode),
+                   MakeEnumAccessor (&DropTailQueue::SetMode,
+                                     &DropTailQueue::GetMode),
                    MakeEnumChecker (QUEUE_MODE_BYTES, "QUEUE_MODE_BYTES",
                                     QUEUE_MODE_PACKETS, "QUEUE_MODE_PACKETS"))
     .AddAttribute ("MaxPackets", 
@@ -75,7 +76,7 @@
 }
 
 DropTailQueue::QueueMode
-DropTailQueue::GetMode (void)
+DropTailQueue::GetMode (void) const
 {
   NS_LOG_FUNCTION (this);
   return m_mode;
diff -Naur ns-3.23/src/network/utils/drop-tail-queue.h ns-3.24/src/network/utils/drop-tail-queue.h
--- ns-3.23/src/network/utils/drop-tail-queue.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/utils/drop-tail-queue.h	2015-09-15 11:18:44.000000000 -0700
@@ -61,7 +61,7 @@
    *
    * \returns The encapsulation mode of this device.
    */
-  DropTailQueue::QueueMode GetMode (void);
+  DropTailQueue::QueueMode GetMode (void) const;
 
 private:
   virtual bool DoEnqueue (Ptr<Packet> p);
diff -Naur ns-3.23/src/network/utils/mac48-address.h ns-3.24/src/network/utils/mac48-address.h
--- ns-3.23/src/network/utils/mac48-address.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/utils/mac48-address.h	2015-09-15 11:18:44.000000000 -0700
@@ -134,7 +134,7 @@
    *
    * \param [in] value Current value of the Mac48Address
    */
-  typedef void (* TracedCallback)(const Mac48Address value);
+  typedef void (* TracedCallback)(Mac48Address value);
   
 private:
   /**
diff -Naur ns-3.23/src/network/utils/packet-burst.h ns-3.24/src/network/utils/packet-burst.h
--- ns-3.23/src/network/utils/packet-burst.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/utils/packet-burst.h	2015-09-15 11:18:44.000000000 -0700
@@ -80,7 +80,7 @@
    *
    * \param [in] burst The PacketBurst
    */
-  typedef void (* TracedCallback)(const Ptr<const PacketBurst> burst);
+  typedef void (* TracedCallback)(Ptr<const PacketBurst> burst);
 
   
 private:
diff -Naur ns-3.23/src/network/utils/packet-data-calculators.cc ns-3.24/src/network/utils/packet-data-calculators.cc
--- ns-3.23/src/network/utils/packet-data-calculators.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/utils/packet-data-calculators.cc	2015-09-15 11:18:44.000000000 -0700
@@ -40,6 +40,17 @@
 {
   NS_LOG_FUNCTION_NOARGS ();
 }
+/* static */
+TypeId
+PacketCounterCalculator::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::PacketCounterCalculator")
+    .SetParent<CounterCalculator<uint32_t> > ()
+    .SetGroupName ("Network")
+    .AddConstructor<PacketCounterCalculator> ()
+    ;
+  return tid;
+}
 void
 PacketCounterCalculator::DoDispose (void)
 {
@@ -85,6 +96,17 @@
 {
   NS_LOG_FUNCTION_NOARGS ();
 }
+/* static */
+TypeId
+PacketSizeMinMaxAvgTotalCalculator::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::PacketSizeMinMaxAvgTotalCalculator")
+    .SetParent<MinMaxAvgTotalCalculator<uint32_t> > ()
+    .SetGroupName ("Network")
+    .AddConstructor<PacketSizeMinMaxAvgTotalCalculator> ()
+    ;
+  return tid;
+}
 void
 PacketSizeMinMaxAvgTotalCalculator::DoDispose (void)
 {
diff -Naur ns-3.23/src/network/utils/packet-data-calculators.h ns-3.24/src/network/utils/packet-data-calculators.h
--- ns-3.23/src/network/utils/packet-data-calculators.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/utils/packet-data-calculators.h	2015-09-15 11:18:44.000000000 -0700
@@ -40,6 +40,12 @@
   virtual ~PacketCounterCalculator();
 
   /**
+   * Register this type.
+   * \return The TypeId.
+   */
+  static TypeId GetTypeId (void);
+  
+  /**
    * Increments the packet counter by one
    *
    * \param path not used in this method
@@ -72,12 +78,19 @@
  *
  */
 class PacketSizeMinMaxAvgTotalCalculator :
-  public MinMaxAvgTotalCalculator<uint32_t> {
+  public MinMaxAvgTotalCalculator<uint32_t>
+{
 public:
   PacketSizeMinMaxAvgTotalCalculator();
   virtual ~PacketSizeMinMaxAvgTotalCalculator();
   
   /**
+   * Register this type.
+   * \return The TypeId.
+   */
+  static TypeId GetTypeId (void);
+  
+  /**
    * Increments the packet stats by the size of the packet
    *
    * \param path not used in this method
diff -Naur ns-3.23/src/network/utils/packet-probe.cc ns-3.24/src/network/utils/packet-probe.cc
--- ns-3.23/src/network/utils/packet-probe.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/utils/packet-probe.cc	2015-09-15 11:18:44.000000000 -0700
@@ -48,7 +48,7 @@
     .AddTraceSource ( "OutputBytes",
                       "The number of bytes in the packet",
                       MakeTraceSourceAccessor (&PacketProbe::m_outputBytes),
-                      "ns3::Packet::PacketSizeTracedCallback")
+                      "ns3::Packet::SizeTracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.23/src/network/utils/packet-socket-client.cc ns-3.24/src/network/utils/packet-socket-client.cc
--- ns-3.23/src/network/utils/packet-socket-client.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/utils/packet-socket-client.cc	2015-09-15 11:18:44.000000000 -0700
@@ -62,7 +62,7 @@
                    MakeUintegerChecker<uint32_t> ())
     .AddTraceSource ("Tx", "A packet has been sent",
                      MakeTraceSourceAccessor (&PacketSocketClient::m_txTrace),
-                     "ns3::Packet::PacketAddressTracedCallback")
+                     "ns3::Packet::AddressTracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.23/src/network/utils/packet-socket-server.cc ns-3.24/src/network/utils/packet-socket-server.cc
--- ns-3.23/src/network/utils/packet-socket-server.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/utils/packet-socket-server.cc	2015-09-15 11:18:44.000000000 -0700
@@ -48,7 +48,7 @@
     .AddConstructor<PacketSocketServer> ()
     .AddTraceSource ("Rx", "A packet has been received",
                      MakeTraceSourceAccessor (&PacketSocketServer::m_rxTrace),
-                     "ns3::Packet::PacketAddressTracedCallback")
+                     "ns3::Packet::AddressTracedCallback")
   ;
   return tid;
 }
diff -Naur ns-3.23/src/network/utils/pcap-file.cc ns-3.24/src/network/utils/pcap-file.cc
--- ns-3.23/src/network/utils/pcap-file.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/utils/pcap-file.cc	2015-09-15 11:18:44.000000000 -0700
@@ -28,6 +28,7 @@
 #include "ns3/buffer.h"
 #include "pcap-file.h"
 #include "ns3/log.h"
+#include "ns3/build-profile.h"
 //
 // This file is used as part of the ns-3 test framework, so please refrain from 
 // adding any ns-3 specific constructs such as Packet to this file.
@@ -397,6 +398,7 @@
   m_file.write ((const char *)&header.m_tsUsec, sizeof(header.m_tsUsec));
   m_file.write ((const char *)&header.m_inclLen, sizeof(header.m_inclLen));
   m_file.write ((const char *)&header.m_origLen, sizeof(header.m_origLen));
+  NS_BUILD_DEBUG(m_file.flush());
   return inclLen;
 }
 
@@ -406,6 +408,7 @@
   NS_LOG_FUNCTION (this << tsSec << tsUsec << &data << totalLen);
   uint32_t inclLen = WritePacketHeader (tsSec, tsUsec, totalLen);
   m_file.write ((const char *)data, inclLen);
+  NS_BUILD_DEBUG(m_file.flush());
 }
 
 void 
@@ -414,10 +417,11 @@
   NS_LOG_FUNCTION (this << tsSec << tsUsec << p);
   uint32_t inclLen = WritePacketHeader (tsSec, tsUsec, p->GetSize ());
   p->CopyData (&m_file, inclLen);
+  NS_BUILD_DEBUG(m_file.flush());
 }
 
 void 
-PcapFile::Write (uint32_t tsSec, uint32_t tsUsec, Header &header, Ptr<const Packet> p)
+PcapFile::Write (uint32_t tsSec, uint32_t tsUsec, const Header &header, Ptr<const Packet> p)
 {
   NS_LOG_FUNCTION (this << tsSec << tsUsec << &header << p);
   uint32_t headerSize = header.GetSerializedSize ();
@@ -494,7 +498,7 @@
 
 bool
 PcapFile::Diff (std::string const & f1, std::string const & f2, 
-                uint32_t & sec, uint32_t & usec, 
+                uint32_t & sec, uint32_t & usec, uint32_t & packets,
                 uint32_t snapLen)
 {
   NS_LOG_FUNCTION (f1 << f2 << sec << usec << snapLen);
@@ -537,6 +541,8 @@
           break;
         }
 
+      ++packets;
+      
       if (tsSec1 != tsSec2 || tsUsec1 != tsUsec2)
         {
           diff = true; // Next packet timestamps do not match
diff -Naur ns-3.23/src/network/utils/pcap-file.h ns-3.24/src/network/utils/pcap-file.h
--- ns-3.23/src/network/utils/pcap-file.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/utils/pcap-file.h	2015-09-15 11:18:44.000000000 -0700
@@ -95,7 +95,7 @@
    * PCAP_PPP, PCAP_80211, etc.  If you are storing different kinds of packet
    * data, such as naked TCP headers, you are at liberty to locally define your
    * own data link types.  According to the pcap-linktype man page, "well-known"
-   * pcap linktypes range from 0 to 177.  If you use a large random number for
+   * pcap linktypes range from 0 to 263.  If you use a large random number for
    * your type, chances are small for a collision.
    *
    * \param snapLen An optional maximum size for packets written to the file.
@@ -147,7 +147,7 @@
    * \param p           Packet to write
    * 
    */
-  void Write (uint32_t tsSec, uint32_t tsUsec, Header &header, Ptr<const Packet> p);
+  void Write (uint32_t tsSec, uint32_t tsUsec, const Header &header, Ptr<const Packet> p);
 
 
   /**
@@ -273,7 +273,7 @@
    * \param  snapLen    Snap length (if used)
    */
   static bool Diff (std::string const & f1, std::string const & f2, 
-                    uint32_t & sec, uint32_t & usec, 
+                    uint32_t & sec, uint32_t & usec, uint32_t & packets,
                     uint32_t snapLen = SNAPLEN_DEFAULT);
 
 private:
@@ -337,6 +337,10 @@
   void WriteFileHeader (void);
   /**
    * \brief Write a Pcap packet header
+   *
+   * The pcap header has a fixed length of 24 bytes. The last 4 bytes
+   * represent the link-layer type
+   *
    * \param tsSec Time stamp (seconds part)
    * \param tsUsec Time stamp (microseconds part)
    * \param totalLen total packet length
diff -Naur ns-3.23/src/network/utils/pcap-file-wrapper.cc ns-3.24/src/network/utils/pcap-file-wrapper.cc
--- ns-3.23/src/network/utils/pcap-file-wrapper.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/utils/pcap-file-wrapper.cc	2015-09-15 11:18:44.000000000 -0700
@@ -121,7 +121,7 @@
 }
 
 void
-PcapFileWrapper::Write (Time t, Header &header, Ptr<const Packet> p)
+PcapFileWrapper::Write (Time t, const Header &header, Ptr<const Packet> p)
 {
   NS_LOG_FUNCTION (this << t << &header << p);
   uint64_t current = t.GetMicroSeconds ();
diff -Naur ns-3.23/src/network/utils/pcap-file-wrapper.h ns-3.24/src/network/utils/pcap-file-wrapper.h
--- ns-3.23/src/network/utils/pcap-file-wrapper.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/utils/pcap-file-wrapper.h	2015-09-15 11:18:44.000000000 -0700
@@ -130,7 +130,7 @@
    * \param p Packet to write to the pcap file.
    * 
    */
-  void Write (Time t, Header &header, Ptr<const Packet> p);
+  void Write (Time t, const Header &header, Ptr<const Packet> p);
 
   /**
    * \brief Write the provided data buffer to the pcap file.
diff -Naur ns-3.23/src/network/utils/pcap-test.h ns-3.24/src/network/utils/pcap-test.h
--- ns-3.23/src/network/utils/pcap-test.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/utils/pcap-test.h	2015-09-15 11:18:44.000000000 -0700
@@ -1,3 +1,23 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 INRIA
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
+ */
+
 #ifndef PCAP_TEST_H
 #define PCAP_TEST_H
 
@@ -21,12 +41,14 @@
     oss << filename;                                                    \
     std::string expected = CreateDataDirFilename (oss.str());           \
     std::string got = CreateTempDirFilename (oss.str());                \
-    uint32_t sec(0), usec(0);                                           \
-    /** \todo support default PcapWriter snap length here */			\
-    bool diff = PcapFile::Diff (got, expected, sec, usec);              \
+    uint32_t sec(0), usec(0), packets(0);				\
+    /** \todo support default PcapWriter snap length here */		\
+    bool diff = PcapFile::Diff (got, expected, sec, usec, packets);	\
     NS_TEST_EXPECT_MSG_EQ (diff, false,                                 \
-                           "PCAP traces " << got << " and " << expected \
-                           << " differ starting from " << sec << " s "  \
+                           "PCAP traces "				\
+			   << got << " and " << expected		\
+                           << " differ starting from packet "		\
+			   << packets << " at " << sec << " s "		\
                            << usec << " us");                           \
   } while (false)
 
diff -Naur ns-3.23/src/network/utils/radiotap-header.cc ns-3.24/src/network/utils/radiotap-header.cc
--- ns-3.23/src/network/utils/radiotap-header.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/utils/radiotap-header.cc	2015-09-15 11:18:44.000000000 -0700
@@ -3,7 +3,7 @@
  * Copyright (c) 2009 CTTC
  *
  * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as 
+ * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation;
  *
  * This program is distributed in the hope that it will be useful,
@@ -15,7 +15,8 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Include., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
- * Author: Nicola Baldo <nbaldo@cttc.es>
+ * Authors: Nicola Baldo <nbaldo@cttc.es>
+ *          SÃ©bastien Deronne <sebastien.deronne@gmail.com>
  */
 
 #include <iomanip>
@@ -28,8 +29,8 @@
 NS_LOG_COMPONENT_DEFINE ("RadiotapHeader");
 
 NS_OBJECT_ENSURE_REGISTERED (RadiotapHeader);
- 
-RadiotapHeader::RadiotapHeader()
+
+RadiotapHeader::RadiotapHeader ()
   : m_length (8),
     m_present (0),
     m_tsft (0),
@@ -38,23 +39,33 @@
     m_channelFreq (0),
     m_channelFlags (CHANNEL_FLAG_NONE),
     m_antennaSignal (0),
-    m_antennaNoise (0)
+    m_antennaNoise (0),
+    m_ampduStatusRef (0),
+    m_ampduStatusFlags (0),
+    m_ampduStatusCRC (0),
+    m_vhtPad (0),
+    m_vhtKnown (0),
+    m_vhtFlags (0),
+    m_vhtBandwidth (0),
+    m_vhtCoding (0),
+    m_vhtGroupId (0),
+    m_vhtPartialAid (0)
 {
   NS_LOG_FUNCTION (this);
 }
- 
+
 TypeId RadiotapHeader::GetTypeId (void)
 {
   static TypeId tid = TypeId ("ns3::RadiotapHeader")
     .SetParent<Header> ()
-    .SetGroupName("Network")
+    .SetGroupName ("Network")
 
     .AddConstructor<RadiotapHeader> ()
   ;
   return tid;
 }
 
-TypeId 
+TypeId
 RadiotapHeader::GetInstanceTypeId (void) const
 {
   return GetTypeId ();
@@ -78,7 +89,7 @@
   start.WriteU32 (m_present); // bits describing which fields follow header
 
   //
-  // Time Synchronization Function Timer (when the first bit of the MPDU 
+  // Time Synchronization Function Timer (when the first bit of the MPDU
   // arrived at the MAC)
   //
   if (m_present & RADIOTAP_TSFT) // bit 0
@@ -107,11 +118,21 @@
   //
   if (m_present & RADIOTAP_CHANNEL) // bit 3
     {
+      start.WriteU8 (0, m_channelPad);
       start.WriteU16 (m_channelFreq);
       start.WriteU16 (m_channelFlags);
     }
 
   //
+  // The hop set and pattern for frequency-hopping radios.  We don't need it but
+  // still need to account for it.
+  //
+  if (m_present & RADIOTAP_FHSS) // bit 4
+    {
+      start.WriteU8 (0); //not yet implemented
+    }
+
+  //
   // RF signal power at the antenna, decibel difference from an arbitrary, fixed
   // reference.
   //
@@ -121,13 +142,121 @@
     }
 
   //
-  // RF noise power at the antenna, decibel difference from an arbitrary, fixed 
+  // RF noise power at the antenna, decibel difference from an arbitrary, fixed
   // reference.
   //
   if (m_present & RADIOTAP_DBM_ANTNOISE) // bit 6
     {
       start.WriteU8 (m_antennaNoise);
     }
+
+  //
+  // Quality of Barker code lock.
+  //
+  if (m_present & RADIOTAP_LOCK_QUALITY) // bit 7
+    {
+      start.WriteU16 (0); //not yet implemented
+    }
+
+  //
+  // Transmit power expressed as unitless distance from max power
+  // set at factory calibration (0 is max power).
+  //
+  if (m_present & RADIOTAP_TX_ATTENUATION) // bit 8
+    {
+      start.WriteU16 (0); //not yet implemented
+    }
+
+  //
+  // Transmit power expressed as decibel distance from max power
+  // set at factory calibration (0 is max power).
+  //
+  if (m_present & RADIOTAP_DB_TX_ATTENUATION) // bit 9
+    {
+      start.WriteU16 (0); //not yet implemented
+    }
+
+  //
+  // Transmit power expressed as dBm (decibels from a 1 milliwatt reference).
+  // This is the absolute power level measured at the antenna port.
+  //
+  if (m_present & RADIOTAP_DBM_TX_POWER) // bit 10
+    {
+      start.WriteU8 (0); //not yet implemented
+    }
+
+  //
+  // Unitless indication of the Rx/Tx antenna for this packet.
+  // The first antenna is antenna 0.
+  //
+  if (m_present & RADIOTAP_ANTENNA) // bit 11
+    {
+      start.WriteU8 (0); //not yet implemented
+    }
+
+  //
+  // RF signal power at the antenna (decibel difference from an arbitrary fixed reference).
+  //
+  if (m_present & RADIOTAP_DB_ANTSIGNAL) // bit 12
+    {
+      start.WriteU8 (0); //not yet implemented
+    }
+
+  //
+  // RF noise power at the antenna (decibel difference from an arbitrary fixed reference).
+  //
+  if (m_present & RADIOTAP_DB_ANTNOISE) // bit 13
+    {
+      start.WriteU8 (0); //not yet implemented
+    }
+
+  //
+  // Properties of received frames.
+  //
+  if (m_present & RADIOTAP_RX_FLAGS) // bit 14
+    {
+      start.WriteU16 (0); //not yet implemented
+    }
+
+  //
+  // MCS field.
+  //
+  if (m_present & RADIOTAP_MCS) // bit 19
+    {
+      start.WriteU8 (m_mcsKnown);
+      start.WriteU8 (m_mcsFlags);
+      start.WriteU8 (m_mcsRate);
+    }
+
+  //
+  // A-MPDU Status, information about the received or transmitted A-MPDU.
+  //
+  if (m_present & RADIOTAP_AMPDU_STATUS) // bit 20
+    {
+      start.WriteU8 (0, m_ampduStatusPad);
+      start.WriteU32 (m_ampduStatusRef);
+      start.WriteU16 (m_ampduStatusFlags);
+      start.WriteU8 (m_ampduStatusCRC);
+      start.WriteU8 (0);
+    }
+
+  //
+  // Information about the received or transmitted VHT frame.
+  //
+  if (m_present & RADIOTAP_VHT) // bit 21
+    {
+      start.WriteU8 (0, m_vhtPad);
+      start.WriteU16 (m_vhtKnown);
+      start.WriteU8 (m_vhtFlags);
+      start.WriteU8 (m_vhtBandwidth);
+      for (uint8_t i = 0; i < 4; i++)
+        {
+          start.WriteU8 (m_vhtMcsNss[i]);
+        }
+      start.WriteU8 (m_vhtCoding);
+      start.WriteU8 (m_vhtGroupId);
+      start.WriteU16 (m_vhtPartialAid);
+    }
 }
 
 uint32_t
@@ -176,9 +305,11 @@
   //
   if (m_present & RADIOTAP_CHANNEL) // bit 3
     {
+      m_channelPad = ((2 - bytesRead % 2) % 2);
+      start.Next (m_channelPad);
       m_channelFreq = start.ReadU16 ();
       m_channelFlags = start.ReadU16 ();
-      bytesRead += 4;
+      bytesRead += (4 + m_channelPad);
     }
 
   //
@@ -187,6 +318,7 @@
   //
   if (m_present & RADIOTAP_FHSS) // bit 4
     {
+      //not yet implemented
       start.ReadU8 ();
       ++bytesRead;
     }
@@ -202,7 +334,7 @@
     }
 
   //
-  // RF noise power at the antenna, decibel difference from an arbitrary, fixed 
+  // RF noise power at the antenna, decibel difference from an arbitrary, fixed
   // reference.
   //
   if (m_present & RADIOTAP_DBM_ANTNOISE) // bit 6
@@ -211,6 +343,135 @@
       ++bytesRead;
     }
 
+  //
+  // Quality of Barker code lock.
+  //
+  if (m_present & RADIOTAP_LOCK_QUALITY) // bit 7
+    {
+      //not yet implemented
+      start.ReadU16 ();
+      bytesRead += 2;
+    }
+
+  //
+  // Transmit power expressed as unitless distance from max power
+  // set at factory calibration (0 is max power).
+  //
+  if (m_present & RADIOTAP_TX_ATTENUATION) // bit 8
+    {
+      //not yet implemented
+      start.ReadU16 ();
+      bytesRead += 2;
+    }
+
+  //
+  // Transmit power expressed as decibel distance from max power
+  // set at factory calibration (0 is max power).
+  //
+  if (m_present & RADIOTAP_DB_TX_ATTENUATION) // bit 9
+    {
+      //not yet implemented
+      start.ReadU16 ();
+      bytesRead += 2;
+    }
+
+  //
+  // Transmit power expressed as dBm (decibels from a 1 milliwatt reference).
+  // This is the absolute power level measured at the antenna port.
+  //
+  if (m_present & RADIOTAP_DBM_TX_POWER) // bit 10
+    {
+      //not yet implemented
+      start.ReadU8 ();
+      ++bytesRead;
+    }
+
+  //
+  // Unitless indication of the Rx/Tx antenna for this packet.
+  // The first antenna is antenna 0.
+  //
+  if (m_present & RADIOTAP_ANTENNA) // bit 11
+    {
+      //not yet implemented
+      start.ReadU8 ();
+      ++bytesRead;
+    }
+
+  //
+  // RF signal power at the antenna (decibel difference from an arbitrary fixed reference).
+  //
+  if (m_present & RADIOTAP_DB_ANTSIGNAL) // bit 12
+    {
+      //not yet implemented
+      start.ReadU8 ();
+      ++bytesRead;
+    }
+
+  //
+  // RF noise power at the antenna (decibel difference from an arbitrary fixed reference).
+  //
+  if (m_present & RADIOTAP_DB_ANTNOISE) // bit 13
+    {
+      //not yet implemented
+      start.ReadU8 ();
+      ++bytesRead;
+    }
+
+  //
+  // Properties of received frames.
+  //
+  if (m_present & RADIOTAP_RX_FLAGS) // bit 14
+    {
+      //not yet implemented
+      start.ReadU16 ();
+      bytesRead += 2;
+    }
+
+  //
+  // MCS field.
+  //
+  if (m_present & RADIOTAP_MCS) // bit 19
+    {
+      m_mcsKnown = start.ReadU8 ();
+      m_mcsFlags = start.ReadU8 ();
+      m_mcsRate = start.ReadU8 ();
+      bytesRead += 3;
+    }
+
+  //
+  // A-MPDU Status, information about the received or transmitted A-MPDU.
+  //
+  if (m_present & RADIOTAP_AMPDU_STATUS) // bit 20
+    {
+      m_ampduStatusPad = ((4 - bytesRead % 4) % 4);
+      start.Next (m_ampduStatusPad);
+      m_ampduStatusRef = start.ReadU32 ();
+      m_ampduStatusFlags = start.ReadU16 ();
+      m_ampduStatusCRC = start.ReadU8 ();
+      start.ReadU8 ();
+      bytesRead += (8 + m_ampduStatusPad);
+    }
+
+  //
+  // Information about the received or transmitted VHT frame.
+  //
+  if (m_present & RADIOTAP_VHT) // bit 21
+    {
+      m_vhtPad = ((2 - bytesRead % 2) % 2);
+      start.Next (m_vhtPad);
+      m_vhtKnown = start.ReadU16 ();
+      m_vhtFlags = start.ReadU8 ();
+      m_vhtBandwidth = start.ReadU8 ();
+      for (uint8_t i = 0; i < 4; i++)
+        {
+          m_vhtMcsNss[i] = start.ReadU8 ();
+        }
+      m_vhtCoding = start.ReadU8 ();
+      m_vhtGroupId = start.ReadU8 ();
+      m_vhtPartialAid = start.ReadU16 ();
+      bytesRead += (12 + m_vhtPad);
+    }
+
   NS_ASSERT_MSG (m_length == bytesRead, "RadiotapHeader::Deserialize(): expected and actual lengths inconsistent");
   return bytesRead;
 }
@@ -225,7 +486,21 @@
      << " freq=" << m_channelFreq
      << " chflags=" << std::hex << (uint32_t)m_channelFlags << std::dec
      << " signal=" << (int16_t) m_antennaSignal
-     << " noise=" << (int16_t) m_antennaNoise;
+     << " noise=" << (int16_t) m_antennaNoise
+     << " mcsKnown=" << m_mcsKnown
+     << " mcsFlags=" << m_mcsFlags
+     << " mcsRate=" << m_mcsRate
+     << " ampduStatusFlags=" << (int16_t) m_ampduStatusFlags
+     << " vhtKnown=" << m_vhtKnown
+     << " vhtFlags=" << m_vhtFlags
+     << " vhtBandwidth=" << m_vhtBandwidth
+     << " vhtMcsNss for user 1=" << m_vhtMcsNss[0]
+     << " vhtMcsNss for user 2=" << m_vhtMcsNss[1]
+     << " vhtMcsNss for user 3=" << m_vhtMcsNss[2]
+     << " vhtMcsNss for user 4=" << m_vhtMcsNss[3]
+     << " vhtCoding=" << m_vhtCoding
+     << " vhtGroupId=" << m_vhtGroupId
+     << " vhtPartialAid=" << m_vhtPartialAid;
 }
 
 void
@@ -250,7 +525,7 @@
   return m_tsft;
 }
 
-void 
+void
 RadiotapHeader::SetFrameFlags (uint8_t flags)
 {
   NS_LOG_FUNCTION (this << static_cast<uint32_t> (flags));
@@ -272,7 +547,7 @@
   return m_flags;
 }
 
-void 
+void
 RadiotapHeader::SetRate (uint8_t rate)
 {
   NS_LOG_FUNCTION (this << static_cast<uint32_t> (rate));
@@ -294,7 +569,7 @@
   return m_rate;
 }
 
-void 
+void
 RadiotapHeader::SetChannelFrequencyAndFlags (uint16_t frequency, uint16_t flags)
 {
   NS_LOG_FUNCTION (this << frequency << flags);
@@ -303,28 +578,29 @@
 
   if (!(m_present & RADIOTAP_CHANNEL))
     {
+      m_channelPad = ((2 - m_length % 2) % 2);
       m_present |= RADIOTAP_CHANNEL;
-      m_length += 4;
+      m_length += (4 + m_channelPad);
     }
 
   NS_LOG_LOGIC (this << " m_length=" << m_length << " m_present=0x" << std::hex << m_present << std::dec);
 }
 
-uint16_t 
+uint16_t
 RadiotapHeader::GetChannelFrequency (void) const
 {
   NS_LOG_FUNCTION (this);
   return m_channelFreq;
 }
 
-uint16_t 
+uint16_t
 RadiotapHeader::GetChannelFlags (void) const
 {
   NS_LOG_FUNCTION (this);
   return m_channelFlags;
 }
 
-void 
+void
 RadiotapHeader::SetAntennaSignalPower (double signal)
 {
   NS_LOG_FUNCTION (this << signal);
@@ -383,11 +659,173 @@
   NS_LOG_LOGIC (this << " m_length=" << m_length << " m_present=0x" << std::hex << m_present << std::dec);
 }
 
-uint8_t 
+uint8_t
 RadiotapHeader::GetAntennaNoisePower (void) const
 {
   NS_LOG_FUNCTION (this);
   return m_antennaNoise;
 }
 
+void
+RadiotapHeader::SetMcsFields (uint8_t known, uint8_t flags, uint8_t mcs)
+{
+  NS_LOG_FUNCTION (this << known << flags << mcs);
+  m_mcsKnown = known;
+  m_mcsFlags = flags;
+  m_mcsRate = mcs;
+  if (!(m_present & RADIOTAP_MCS))
+    {
+      m_present |= RADIOTAP_MCS;
+      m_length += 3;
+    }
+
+  NS_LOG_LOGIC (this << " m_length=" << m_length << " m_present=0x" << std::hex << m_present << std::dec);
+}
+
+uint8_t
+RadiotapHeader::GetMcsKnown () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_mcsKnown;
+}
+
+uint8_t
+RadiotapHeader::GetMcsFlags () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_mcsFlags;
+}
+
+uint8_t
+RadiotapHeader::GetMcsRate () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_mcsRate;
+}
+
+void
+RadiotapHeader::SetAmpduStatus (uint32_t referenceNumber, uint16_t flags, uint8_t crc)
+{
+  NS_LOG_FUNCTION (this << referenceNumber << flags);
+  m_ampduStatusRef = referenceNumber;
+  m_ampduStatusFlags = flags;
+  m_ampduStatusCRC = crc;
+  if (!(m_present & RADIOTAP_AMPDU_STATUS))
+    {
+      m_ampduStatusPad = ((4 - m_length % 4) % 4);
+      m_present |= RADIOTAP_AMPDU_STATUS;
+      m_length += (8 + m_ampduStatusPad);
+    }
+
+  NS_LOG_LOGIC (this << " m_length=" << m_length << " m_present=0x" << std::hex << m_present << std::dec);
+}
+
+uint32_t
+RadiotapHeader::GetAmpduStatusRef () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_ampduStatusRef;
+}
+
+uint16_t
+RadiotapHeader::GetAmpduStatusFlags () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_ampduStatusFlags;
+}
+
+void
+RadiotapHeader::SetVhtFields (uint16_t known, uint8_t flags, uint8_t bandwidth, uint8_t mcs_nss[4], uint8_t coding, uint8_t group_id, uint16_t partial_aid)
+{
+  NS_LOG_FUNCTION (this << known << flags << mcs_nss[0] << mcs_nss[1] << mcs_nss[2] << mcs_nss[3] << coding << group_id << partial_aid);
+  m_vhtKnown = known;
+  m_vhtFlags = flags;
+  m_vhtBandwidth = bandwidth;
+  for (uint8_t i = 0; i < 4; i++)
+    {
+      m_vhtMcsNss[i] = mcs_nss[i];
+    }
+  m_vhtCoding = coding;
+  m_vhtGroupId = group_id;
+  m_vhtPartialAid = partial_aid;
+  if (!(m_present & RADIOTAP_VHT))
+    {
+      m_vhtPad = ((2 - m_length % 2) % 2);
+      m_present |= RADIOTAP_VHT;
+      m_length += (12 + m_vhtPad);
+    }
+
+  NS_LOG_LOGIC (this << " m_length=" << m_length << " m_present=0x" << std::hex << m_present << std::dec);
+}
+
+uint16_t
+RadiotapHeader::GetVhtKnown () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_vhtKnown;
+}
+
+uint8_t
+RadiotapHeader::GetVhtFlags () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_vhtFlags;
+}
+
+uint8_t
+RadiotapHeader::GetVhtBandwidth () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_vhtBandwidth;
+}
+
+uint8_t
+RadiotapHeader::GetVhtMcsNssUser1 () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_vhtMcsNss[0];
+}
+
+uint8_t
+RadiotapHeader::GetVhtMcsNssUser2 () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_vhtMcsNss[1];
+}
+
+uint8_t
+RadiotapHeader::GetVhtMcsNssUser3 () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_vhtMcsNss[2];
+}
+
+uint8_t
+RadiotapHeader::GetVhtMcsNssUser4 () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_vhtMcsNss[3];
+}
+
+uint8_t
+RadiotapHeader::GetVhtCoding () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_vhtCoding;
+}
+
+uint8_t
+RadiotapHeader::GetVhtGroupId () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_vhtGroupId;
+}
+
+uint8_t
+RadiotapHeader::GetVhtPartialAid () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_vhtPartialAid;
+}
+
 } // namespace ns3
diff -Naur ns-3.23/src/network/utils/radiotap-header.h ns-3.24/src/network/utils/radiotap-header.h
--- ns-3.23/src/network/utils/radiotap-header.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/utils/radiotap-header.h	2015-09-15 11:18:44.000000000 -0700
@@ -3,7 +3,7 @@
  * Copyright (c) 2009 CTTC
  *
  * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as 
+ * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation;
  *
  * This program is distributed in the hope that it will be useful,
@@ -15,40 +15,30 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Include., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
- * Author: Nicola Baldo <nbaldo@cttc.es>
+ * Authors: Nicola Baldo <nbaldo@cttc.es>
+ *          SÃ©bastien Deronne <sebastien.deronne@gmail.com>
  */
 
 #ifndef RADIOTAP_HEADER_H
 #define RADIOTAP_HEADER_H
 
 
-#include <ns3/header.h> 
+#include <ns3/header.h>
 
 namespace ns3 {
 
 /**
  * @brief Radiotap header implementation
  *
- * Radiotap is a de facto standard for 802.11 frame injection and reception. 
- * The radiotap header format is a mechanism to supply additional information 
- * about frames, from the driver to userspace applications such as libpcap, and 
- * from a userspace application to the driver for transmission. 
- *
- * @warning the radiotap header specification says that the fields included in
- * the header should be aligned to their natural size (e.g., 16-bit fields
- * aligned to 16-bit boundaries, 32-bit fields aligned to 32-bit boundaries, 
- * and so on.  This implementation does not enforce this.  However, the radiotap
- * specification enforces an order in which fields have to appear (if they 
- * appear), and this ordering is such that, provided you don't leave gaps, all
- * fields will end up aligned without the need of inserting padding space.  By 
- * the term "gap" I mean not using a field which would appear between two used 
- * fields.  Moral: don't leave gaps, or if you do be careful about how you
- * do it.
+ * Radiotap is a de facto standard for 802.11 frame injection and reception.
+ * The radiotap header format is a mechanism to supply additional information
+ * about frames, from the driver to userspace applications such as libpcap, and
+ * from a userspace application to the driver for transmission.
  */
 class RadiotapHeader : public Header
 {
 public:
-  RadiotapHeader();
+  RadiotapHeader ();
   /**
    * \brief Get the type ID.
    * \return the object TypeId
@@ -58,7 +48,7 @@
 
   /**
    * This method is used by Packet::AddHeader to store the header into the byte
-   * buffer of a packet.  This method returns the number of bytes which are 
+   * buffer of a packet.  This method returns the number of bytes which are
    * needed to store the header data during a Serialize.
    *
    * @returns The expected size of the header.
@@ -67,7 +57,7 @@
 
   /**
    * This method is used by Packet::AddHeader to store the header into the byte
-   * buffer of a packet.  The data written is expected to match bit-for-bit the 
+   * buffer of a packet.  The data written is expected to match bit-for-bit the
    * representation of this header in a real network.
    *
    * @param start An iterator which points to where the header should
@@ -76,8 +66,8 @@
   virtual void Serialize (Buffer::Iterator start) const;
 
   /**
-   * This method is used by Packet::RemoveHeader to re-create a header from the 
-   * byte buffer of a packet.  The data read is expected to match bit-for-bit 
+   * This method is used by Packet::RemoveHeader to re-create a header from the
+   * byte buffer of a packet.  The data read is expected to match bit-for-bit
    * the representation of this header in real networks.
    *
    * @param start An iterator which points to where the header should
@@ -87,12 +77,12 @@
   virtual uint32_t Deserialize (Buffer::Iterator start);
 
   /**
-   * This method is used by Packet::Print to print the content of the header as 
-   * ascii data to a C++ output stream.  Although the header is free to format 
+   * This method is used by Packet::Print to print the content of the header as
+   * ascii data to a C++ output stream.  Although the header is free to format
    * its output as it wishes, it is recommended to follow a few rules to integrate
-   * with the packet pretty printer: start with flags, small field 
-   * values located between a pair of parens. Values should be separated 
-   * by whitespace. Follow the parens with the important fields, 
+   * with the packet pretty printer: start with flags, small field
+   * values located between a pair of parens. Values should be separated
+   * by whitespace. Follow the parens with the important fields,
    * separated by whitespace.
    *
    * eg: (field1 val1 field2 val2 field3 val3) field4 val4 field5 val5
@@ -103,9 +93,9 @@
 
   /**
    * @brief Set the Time Synchronization Function Timer (TSFT) value.  Valid for
-   * received frames only. 
+   * received frames only.
    *
-   * @param tsft Value in microseconds of the MAC's 64-bit 802.11 Time 
+   * @param tsft Value in microseconds of the MAC's 64-bit 802.11 Time
    *             Synchronization Function timer when the first bit of the MPDU
    *             arrived at the MAC.
    */
@@ -113,15 +103,16 @@
 
   /**
    * @brief Get the Time Synchronization Function Timer (TSFT) value.  Valid for
-   * received frames only. 
+   * received frames only.
    *
-   * @returns The value in microseconds of the MAC's 64-bit 802.11 Time 
+   * @returns The value in microseconds of the MAC's 64-bit 802.11 Time
    *          Synchronization Function timer when the first bit of the MPDU
    *          arrived at the MAC.
    */
   uint64_t GetTsft (void) const;
 
-  enum {
+  enum
+  {
     FRAME_FLAG_NONE           = 0x00, /**< No flags set */
     FRAME_FLAG_CFP            = 0x01, /**< Frame sent/received during CFP */
     FRAME_FLAG_SHORT_PREAMBLE = 0x02, /**< Frame sent/received with short preamble */
@@ -158,7 +149,8 @@
    */
   uint8_t GetRate (void) const;
 
-  enum {
+  enum
+  {
     CHANNEL_FLAG_NONE          = 0x0000, /**< No flags set */
     CHANNEL_FLAG_TURBO         = 0x0010, /**< Turbo Channel */
     CHANNEL_FLAG_CCK           = 0x0020, /**< CCK channel */
@@ -193,7 +185,7 @@
 
   /**
    * @brief Set the RF signal power at the antenna as a decibel difference
-   * from an arbitrary, fixed reference. 
+   * from an arbitrary, fixed reference.
    *
    * @param signal The RF signal power at the antenna as a decibel difference
    *               from an arbitrary, fixed reference;
@@ -202,33 +194,224 @@
 
   /**
    * @brief Get the RF signal power at the antenna as a decibel difference
-   * from an arbitrary, fixed reference. 
+   * from an arbitrary, fixed reference.
    *
    * @returns The RF signal power at the antenna as a decibel difference
-   *          from an arbitrary, fixed reference. 
+   *          from an arbitrary, fixed reference.
    */
   uint8_t GetAntennaSignalPower (void) const;
 
   /**
    * @brief Set the RF noise power at the antenna as a decibel difference
-   * from an arbitrary, fixed reference. 
+   * from an arbitrary, fixed reference.
    *
    * @param noise The RF noise power at the antenna as a decibel difference
-   *              from an arbitrary, fixed reference. 
+   *              from an arbitrary, fixed reference.
    */
   void SetAntennaNoisePower (double noise);
 
   /**
    * @brief Get the RF noise power at the antenna as a decibel difference
-   * from an arbitrary, fixed reference. 
+   * from an arbitrary, fixed reference.
    *
    * @returns The RF noise power at the antenna as a decibel difference
-   *          from an arbitrary, fixed reference. 
+   *          from an arbitrary, fixed reference.
    */
   uint8_t GetAntennaNoisePower (void) const;
 
+  enum
+  {
+    MCS_KNOWN_NONE           = 0x00, /**< No flags set */
+    MCS_KNOWN_BANDWIDTH      = 0x01, /**< Bandwidth */
+    MCS_KNOWN_INDEX          = 0x02, /**< MCS index known */
+    MCS_KNOWN_GUARD_INTERVAL = 0x04, /**< Guard interval */
+    MCS_KNOWN_HT_FORMAT      = 0x08, /**< HT format */
+    MCS_KNOWN_FEC_TYPE       = 0x10, /**< FEC type */
+    MCS_KNOWN_STBC           = 0x20, /**< STBC known */
+    MCS_KNOWN_NESS           = 0x40, /**< Ness known (Number of extension spatial streams) */
+    MCS_KNOWN_NESS_BIT_1     = 0x80, /**< Ness data - bit 1 (MSB) of Number of extension spatial streams */
+  };
+
+  enum
+  {
+    MCS_FLAGS_NONE           = 0x00, /**< Default: 20 MHz, long guard interval, mixed HT format and BCC FEC type */
+    MCS_FLAGS_BANDWIDTH_40   = 0x01, /**< 40 MHz */
+    MCS_FLAGS_BANDWIDTH_20L  = 0x02, /**< 20L (20 MHz in lower half of 40 MHz channel) */
+    MCS_FLAGS_BANDWIDTH_20U  = 0x03, /**< 20U (20 MHz in upper half of 40 MHz channel) */
+    MCS_FLAGS_GUARD_INTERVAL = 0x04, /**< Short guard interval */
+    MCS_FLAGS_HT_GREENFIELD  = 0x08, /**< Greenfield HT format */
+    MCS_FLAGS_FEC_TYPE       = 0x10, /**< LDPC FEC type */
+    MCS_FLAGS_STBC_STREAMS   = 0x60, /**< STBC enabled */
+    MCS_FLAGS_NESS_BIT_0     = 0x80, /**< Ness - bit 0 (LSB) of Number of extension spatial streams */
+  };
+
+  /**
+   * @brief Set the MCS fields
+   *
+   * @param known The kwown flags.
+   * @param flags The flags to set.
+   * @param mcs The MCS index value.
+   */
+  void SetMcsFields (uint8_t known, uint8_t flags, uint8_t mcs);
+
+  /**
+   * @brief Get the MCS known bitmap.
+   *
+   * @returns The MCS known bitmap.
+   */
+  uint8_t GetMcsKnown (void) const;
+  /**
+   * @brief Get the MCS flags.
+   *
+   * @returns The MCS flags.
+   */
+  uint8_t GetMcsFlags (void) const;
+  /**
+   * @brief Get the MCS index value.
+   *
+   * @returns The MCS index value.
+   */
+  uint8_t GetMcsRate (void) const;
+
+  enum
+  {
+    A_MPDU_STATUS_NONE                = 0x00, /**< No flags set */
+    A_MPDU_STATUS_REPORT_ZERO_LENGTH  = 0x01, /**< Driver reports 0-length subframes */
+    A_MPDU_STATUS_IS_ZERO_LENGTH      = 0x02, /**< Frame is 0-length subframe (valid only if 0x0001 is set) */
+    A_MPDU_STATUS_LAST_KNOWN          = 0x04, /**< Last subframe is known (should be set for all subframes in an A-MPDU) */
+    A_MPDU_STATUS_LAST                = 0x08, /**< This frame is the last subframe */
+    A_MPDU_STATUS_DELIMITER_CRC_ERROR = 0x10, /**< Delimiter CRC error */
+    A_MPDU_STATUS_DELIMITER_CRC_KNOWN = 0x20  /**< Delimiter CRC value known: the delimiter CRC value field is valid */
+  };
+
+  /**
+   * @brief Set the A-MPDU status fields
+   *
+   * @param referenceNumber The A-MPDU reference number to identify all subframes belonging to the same A-MPDU.
+   * @param flags The flags to set.
+   * @param crc The CRC value value.
+   */
+  void SetAmpduStatus (uint32_t referenceNumber, uint16_t flags, uint8_t crc);
+
+  /**
+   * @brief Get the A-MPDU reference number.
+   *
+   * @returns The A-MPDU reference number.
+   */
+  uint32_t GetAmpduStatusRef (void) const;
+  /**
+   * @brief Get the A-MPDU status flags.
+   *
+   * @returns The A-MPDU status flags.
+   */
+  uint16_t GetAmpduStatusFlags (void) const;
+
+  enum
+  {
+    VHT_KNOWN_NONE                         = 0x0000, /**< No flags set */
+    VHT_KNOWN_STBC                         = 0x0001, /**< Space-time block coding (1 if all spatial streams of all users have STBC, 0 otherwise). */
+    VHT_KNOWN_TXOP_PS_NOT_ALLOWED          = 0x0002, /**< TXOP_PS_NOT_ALLOWED known */
+    VHT_KNOWN_GUARD_INTERVAL               = 0x0004, /**< Guard interval */
+    VHT_KNOWN_SHORT_GI_NSYM_DISAMBIGUATION = 0x0008, /**< Short GI NSYM disambiguation known */
+    VHT_KNOWN_LDPC_EXTRA_OFDM_SYMBOL       = 0x0010, /**< LDPC extra OFDM symbol known */
+    VHT_KNOWN_BEAMFORMED                   = 0x0020, /**< Beamformed known/applicable (this flag should be set to zero for MU PPDUs). */
+    VHT_KNOWN_BANDWIDTH                    = 0x0040, /**< Bandwidth known */
+    VHT_KNOWN_GROUP_ID                     = 0x0080, /**< Group ID known */
+    VHT_KNOWN_PARTIAL_AID                  = 0x0100, /**< Partial AID known/applicable */
+  };
+
+  enum
+  {
+    VHT_FLAGS_NONE                         = 0x00, /**< No flags set */
+    VHT_FLAGS_STBC                         = 0x01, /**< Set if all spatial streams of all users have space-time block coding */
+    VHT_FLAGS_TXOP_PS_NOT_ALLOWED          = 0x02, /**< Set if STAs may not doze during TXOP (valid only for AP transmitters). */
+    VHT_FLAGS_GUARD_INTERVAL               = 0x04, /**< Short guard interval */
+    VHT_FLAGS_SHORT_GI_NSYM_DISAMBIGUATION = 0x08, /**< Set if NSYM mod 10 = 9 (valid only if short GI is used).*/
+    VHT_FLAGS__LDPC_EXTRA_OFDM_SYMBOL      = 0x10, /**< Set if one or more users are using LDPC and the encoding process resulted in extra OFDM symbol(s) */
+    VHT_FLAGS_BEAMFORMED                   = 0x20, /**< Set if beamforming is used (valid for SU PPDUs only). */
+  };
+
+  /**
+   * @brief Set the VHT fields
+   *
+   * @param known The kwown flags.
+   * @param flags The flags to set.
+   * @param bandwidth The bandwidth value.
+   * @param mcs_nss The mcs_nss value.
+   * @param coding The coding value.
+   * @param group_id The group_id value.
+   * @param partial_aid The partial_aid value.
+   */
+  void SetVhtFields (uint16_t known, uint8_t flags,
+                     uint8_t bandwidth, uint8_t mcs_nss [4],
+                     uint8_t coding, uint8_t group_id,
+                     uint16_t partial_aid);
+
+  /**
+   * @brief Get the VHT known bitmap.
+   *
+   * @returns The MCS known bitmap.
+   */
+  uint16_t GetVhtKnown (void) const;
+  /**
+   * @brief Get the VHT flags.
+   *
+   * @returns The VHT flags.
+   */
+  uint8_t GetVhtFlags (void) const;
+  /**
+   * @brief Get the VHT bandwidth field value.
+   *
+   * @returns The VHT bandwidth field value.
+   */
+  uint8_t GetVhtBandwidth (void) const;
+  /**
+   * @brief Get the VHT mcs_nss field value for user 1.
+   *
+   * @returns The VHT mcs_nss field value for user 1.
+   */
+  uint8_t GetVhtMcsNssUser1 () const;
+  /**
+   * @brief Get the VHT mcs_nss field value for user 2.
+   *
+   * @returns The VHT mcs_nss field value for user 2.
+   */
+  uint8_t GetVhtMcsNssUser2 () const;
+  /**
+   * @brief Get the VHT mcs_nss field value for user 3.
+   *
+   * @returns The VHT mcs_nss field value for user 3.
+   */
+  uint8_t GetVhtMcsNssUser3 () const;
+  /**
+   * @brief Get the VHT mcs_nss field value for user 4.
+   *
+   * @returns The VHT mcs_nss field value for user 4.
+   */
+  uint8_t GetVhtMcsNssUser4 () const;
+  /**
+   * @brief Get the VHT coding field value.
+   *
+   * @returns The VHT coding field value.
+   */
+  uint8_t GetVhtCoding (void) const;
+  /**
+   * @brief Get the VHT group_id field value.
+   *
+   * @returns The VHT group_id field value.
+   */
+  uint8_t GetVhtGroupId (void) const;
+  /**
+   * @brief Get the VHT partial_aid field value.
+   *
+   * @returns The VHT partial_aid field value.
+   */
+  uint8_t GetVhtPartialAid (void) const;
+
+
 private:
-  enum {
+  enum
+  {
     RADIOTAP_TSFT              = 0x00000001,
     RADIOTAP_FLAGS             = 0x00000002,
     RADIOTAP_RATE              = 0x00000004,
@@ -239,23 +422,46 @@
     RADIOTAP_LOCK_QUALITY      = 0x00000080,
     RADIOTAP_TX_ATTENUATION    = 0x00000100,
     RADIOTAP_DB_TX_ATTENUATION = 0x00000200,
-    RADIOTAP_DBM_TX_POWER      = 0x00000200,
-    RADIOTAP_ANTENNA           = 0x00000400,
-    RADIOTAP_DB_ANTSIGNAL      = 0x00000800,
-    RADIOTAP_DB_ANTNOISE       = 0x00001000,
+    RADIOTAP_DBM_TX_POWER      = 0x00000400,
+    RADIOTAP_ANTENNA           = 0x00000800,
+    RADIOTAP_DB_ANTSIGNAL      = 0x00001000,
+    RADIOTAP_DB_ANTNOISE       = 0x00002000,
+    RADIOTAP_RX_FLAGS          = 0x00004000,
+    RADIOTAP_MCS               = 0x00080000,
+    RADIOTAP_AMPDU_STATUS      = 0x00100000,
+    RADIOTAP_VHT               = 0x00200000,
     RADIOTAP_EXT               = 0x10000000
   };
- 
+
   uint16_t m_length;        //!< entire length of radiotap data + header
   uint32_t m_present;       //!< bits describing which fields follow header
 
   uint64_t m_tsft;          //!< Time Synchronization Function Timer (when the first bit of the MPDU arrived at the MAC)
   uint8_t m_flags;          //!< Properties of transmitted and received frames.
   uint8_t m_rate;           //!< TX/RX data rate in units of 500 kbps
+  uint8_t m_channelPad;     //!< Tx/Rx channel padding.
   uint16_t m_channelFreq;   //!< Tx/Rx frequency in MHz.
   uint16_t m_channelFlags;  //!< Tx/Rx channel flags.
   int8_t m_antennaSignal;   //!< RF signal power at the antenna, dB difference from an arbitrary, fixed reference.
   int8_t m_antennaNoise;    //!< RF noise power at the antenna, dB difference from an arbitrary, fixed reference.
+
+  uint8_t m_mcsKnown; //!< MCS Flags, known information field.
+  uint8_t m_mcsFlags; //!< MCS Flags, flags field.
+  uint8_t m_mcsRate;  //!< MCS Flags, mcs rate index.
+
+  uint8_t m_ampduStatusPad;       //!< A-MPDU Status Flags, padding before A-MPDU Status Field.
+  uint32_t m_ampduStatusRef;      //!< A-MPDU Status Flags, reference number.
+  uint16_t m_ampduStatusFlags;    //!< A-MPDU Status Flags, information about the received A-MPDU.
+  uint8_t m_ampduStatusCRC;       //!< A-MPDU Status Flags, delimiter CRC value.
+
+  uint8_t m_vhtPad;         //!< VHT padding.
+  uint16_t m_vhtKnown;      //!< VHT known field.
+  uint8_t m_vhtFlags;       //!< VHT flags field.
+  uint8_t m_vhtBandwidth;   //!< VHT bandwidth field.
+  uint8_t m_vhtMcsNss[4];   //!< VHT mcs_nss field.
+  uint8_t m_vhtCoding;      //!< VHT coding field.
+  uint8_t m_vhtGroupId;     //!< VHT group_id field.
+  uint16_t m_vhtPartialAid; //!< VHT partial_aid field.
 };
 
 } // namespace ns3
diff -Naur ns-3.23/src/network/utils/sequence-number.h ns-3.24/src/network/utils/sequence-number.h
--- ns-3.23/src/network/utils/sequence-number.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/utils/sequence-number.h	2015-09-15 11:18:44.000000000 -0700
@@ -482,6 +482,8 @@
  */
 typedef SequenceNumber<uint8_t, int8_t> SequenceNumber8;
 
+namespace TracedValueCallback {
+
 /**
  * \ingroup network
  * TracedValue callback signature for SequenceNumber32
@@ -489,8 +491,10 @@
  * \param [in] oldValue original value of the traced variable
  * \param [in] newValue new value of the traced variable
  */
-typedef void (* SequenceNumber32TracedValueCallback)(const SequenceNumber32 oldValue,
-                                                     const SequenceNumber32 newValue);
+typedef void (* SequenceNumber32)(SequenceNumber32 oldValue,
+                                  SequenceNumber32 newValue);
+
+}  // namespace TracedValueCallback
 
 } // namespace ns3
 
diff -Naur ns-3.23/src/network/utils/sgi-hashmap.h ns-3.24/src/network/utils/sgi-hashmap.h
--- ns-3.23/src/network/utils/sgi-hashmap.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/utils/sgi-hashmap.h	2015-09-15 11:18:44.000000000 -0700
@@ -1,3 +1,23 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2006 INRIA
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
+ */
+
 /* This code snippet was ripped out of the gcc 
  * documentation and slightly modified to work
  * with gcc 4.x
diff -Naur ns-3.23/src/network/utils/simple-channel.cc ns-3.24/src/network/utils/simple-channel.cc
--- ns-3.23/src/network/utils/simple-channel.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/utils/simple-channel.cc	2015-09-15 11:18:44.000000000 -0700
@@ -17,6 +17,7 @@
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
+#include <algorithm>
 #include "simple-channel.h"
 #include "simple-net-device.h"
 #include "ns3/simulator.h"
@@ -63,6 +64,14 @@
         {
           continue;
         }
+      if (m_blackListedDevices.find (tmp) != m_blackListedDevices.end ())
+        {
+          if (find (m_blackListedDevices[tmp].begin (), m_blackListedDevices[tmp].end (), sender) !=
+              m_blackListedDevices[tmp].end () )
+            {
+              continue;
+            }
+        }
       Simulator::ScheduleWithContext (tmp->GetNode ()->GetId (), m_delay,
                                       &SimpleNetDevice::Receive, tmp, p->Copy (), protocol, to, from);
     }
@@ -81,6 +90,7 @@
   NS_LOG_FUNCTION (this);
   return m_devices.size ();
 }
+
 Ptr<NetDevice>
 SimpleChannel::GetDevice (uint32_t i) const
 {
@@ -88,4 +98,36 @@
   return m_devices[i];
 }
 
+void
+SimpleChannel::BlackList (Ptr<SimpleNetDevice> from, Ptr<SimpleNetDevice> to)
+{
+  if (m_blackListedDevices.find (to) != m_blackListedDevices.end ())
+    {
+      if (find (m_blackListedDevices[to].begin (), m_blackListedDevices[to].end (), from) ==
+          m_blackListedDevices[to].end () )
+        {
+          m_blackListedDevices[to].push_back (from);
+        }
+    }
+  else
+    {
+      m_blackListedDevices[to].push_back (from);
+    }
+}
+
+void
+SimpleChannel::UnBlackList (Ptr<SimpleNetDevice> from, Ptr<SimpleNetDevice> to)
+{
+  if (m_blackListedDevices.find (to) != m_blackListedDevices.end ())
+    {
+      std::vector<Ptr<SimpleNetDevice> >::iterator iter;
+      iter = find (m_blackListedDevices[to].begin (), m_blackListedDevices[to].end (), from);
+      if (iter != m_blackListedDevices[to].end () )
+        {
+          m_blackListedDevices[to].erase (iter);
+        }
+    }
+}
+
+
 } // namespace ns3
diff -Naur ns-3.23/src/network/utils/simple-channel.h ns-3.24/src/network/utils/simple-channel.h
--- ns-3.23/src/network/utils/simple-channel.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/utils/simple-channel.h	2015-09-15 11:18:44.000000000 -0700
@@ -24,6 +24,7 @@
 #include "ns3/nstime.h"
 #include "mac48-address.h"
 #include <vector>
+#include <map>
 
 namespace ns3 {
 
@@ -74,6 +75,24 @@
    */ 
   virtual void Add (Ptr<SimpleNetDevice> device);
 
+  /**
+   * Blocks the communications from a NetDevice to another NetDevice.
+   * The block is unidirectional
+   *
+   * \param from the device to BlackList
+   * \param to the device wanting to block the other one
+   */
+  virtual void BlackList (Ptr<SimpleNetDevice> from, Ptr<SimpleNetDevice> to);
+
+  /**
+   * Un-Blocks the communications from a NetDevice to another NetDevice.
+   * The block is unidirectional
+   *
+   * \param from the device to BlackList
+   * \param to the device wanting to block the other one
+   */
+  virtual void UnBlackList (Ptr<SimpleNetDevice> from, Ptr<SimpleNetDevice> to);
+
   // inherited from ns3::Channel
   virtual uint32_t GetNDevices (void) const;
   virtual Ptr<NetDevice> GetDevice (uint32_t i) const;
@@ -81,6 +100,7 @@
 private:
   Time m_delay; //!< The assigned speed-of-light delay of the channel
   std::vector<Ptr<SimpleNetDevice> > m_devices; //!< devices connected by the channel
+  std::map<Ptr<SimpleNetDevice>, std::vector<Ptr<SimpleNetDevice> > > m_blackListedDevices; //!< devices blocked on a device
 };
 
 } // namespace ns3
diff -Naur ns-3.23/src/network/utils/simple-net-device.cc ns-3.24/src/network/utils/simple-net-device.cc
--- ns-3.23/src/network/utils/simple-net-device.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/network/utils/simple-net-device.cc	2015-09-15 11:18:44.000000000 -0700
@@ -446,7 +446,7 @@
 
   if (m_queue->Enqueue (p))
     {
-      if (m_queue->GetNPackets () == 1)
+      if (m_queue->GetNPackets () == 1 && !TransmitCompleteEvent.IsRunning ())
         {
           p = m_queue->Dequeue ();
           p->RemovePacketTag (tag);
diff -Naur ns-3.23/src/nix-vector-routing/bindings/modulegen__gcc_ILP32.py ns-3.24/src/nix-vector-routing/bindings/modulegen__gcc_ILP32.py
--- ns-3.23/src/nix-vector-routing/bindings/modulegen__gcc_ILP32.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/nix-vector-routing/bindings/modulegen__gcc_ILP32.py	2015-09-15 11:18:44.000000000 -0700
@@ -299,6 +299,12 @@
     nested_module = module.add_cpp_namespace('Hash')
     register_types_ns3_Hash(nested_module)
     
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -334,6 +340,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -572,17 +585,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -604,11 +617,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -618,16 +626,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -865,14 +863,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -933,11 +935,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3EventId_methods(root_module, cls):
@@ -2152,7 +2149,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -2244,10 +2241,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -4059,11 +4056,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -5749,6 +5756,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -5761,6 +5769,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.23/src/nix-vector-routing/bindings/modulegen__gcc_LP64.py ns-3.24/src/nix-vector-routing/bindings/modulegen__gcc_LP64.py
--- ns-3.23/src/nix-vector-routing/bindings/modulegen__gcc_LP64.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/nix-vector-routing/bindings/modulegen__gcc_LP64.py	2015-09-15 11:18:44.000000000 -0700
@@ -299,6 +299,12 @@
     nested_module = module.add_cpp_namespace('Hash')
     register_types_ns3_Hash(nested_module)
     
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -334,6 +340,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -572,17 +585,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -604,11 +617,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -618,16 +626,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -865,14 +863,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -933,11 +935,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3EventId_methods(root_module, cls):
@@ -2152,7 +2149,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -2244,10 +2241,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -4059,11 +4056,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -5749,6 +5756,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -5761,6 +5769,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.23/src/olsr/bindings/modulegen__gcc_ILP32.py ns-3.24/src/olsr/bindings/modulegen__gcc_ILP32.py
--- ns-3.23/src/olsr/bindings/modulegen__gcc_ILP32.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/olsr/bindings/modulegen__gcc_ILP32.py	2015-09-15 11:18:44.000000000 -0700
@@ -104,8 +104,14 @@
     root_module['ns3::Ipv6Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix [class]
     module.add_class('Ipv6Prefix', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    module.add_class('Mac48Address', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    root_module['ns3::Mac48Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## node-container.h (module 'network'): ns3::NodeContainer [class]
     module.add_class('NodeContainer', import_from_module='ns.network')
+    ## non-copyable.h (module 'core'): ns3::NonCopyable [class]
+    module.add_class('NonCopyable', destructor_visibility='protected', import_from_module='ns.core')
     ## object-base.h (module 'core'): ns3::ObjectBase [class]
     module.add_class('ObjectBase', allow_subclassing=True, import_from_module='ns.core')
     ## object.h (module 'core'): ns3::ObjectDeleter [struct]
@@ -302,6 +308,10 @@
     module.add_class('Ipv6PrefixValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## random-variable-stream.h (module 'core'): ns3::LogNormalRandomVariable [class]
     module.add_class('LogNormalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker [class]
+    module.add_class('Mac48AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue [class]
+    module.add_class('Mac48AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
     module.add_class('NetDevice', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice::PacketType [enumeration]
@@ -349,6 +359,12 @@
     register_types_ns3_Hash(nested_module)
     
     
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
+    
     ## Register a nested module for the namespace olsr
     
     nested_module = module.add_cpp_namespace('olsr')
@@ -389,6 +405,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_types_ns3_olsr(module):
     root_module = module.get_root()
     
@@ -514,7 +537,9 @@
     register_Ns3Ipv4RoutingHelper_methods(root_module, root_module['ns3::Ipv4RoutingHelper'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
     register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
+    register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
     register_Ns3NodeContainer_methods(root_module, root_module['ns3::NodeContainer'])
+    register_Ns3NonCopyable_methods(root_module, root_module['ns3::NonCopyable'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
     register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
     register_Ns3ObjectFactory_methods(root_module, root_module['ns3::ObjectFactory'])
@@ -601,6 +626,8 @@
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
     register_Ns3LogNormalRandomVariable_methods(root_module, root_module['ns3::LogNormalRandomVariable'])
+    register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
+    register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
@@ -761,17 +788,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -793,11 +820,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -807,16 +829,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -1054,14 +1066,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -1122,11 +1138,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3EventGarbageCollector_methods(root_module, cls):
@@ -1895,6 +1906,78 @@
                    is_const=True)
     return
 
+def register_Ns3Mac48Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(ns3::Mac48Address const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetBroadcast() [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv4Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv4Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv6Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast6Prefix() [member function]
+    cls.add_method('GetMulticast6Prefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticastPrefix() [member function]
+    cls.add_method('GetMulticastPrefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsBroadcast() const [member function]
+    cls.add_method('IsBroadcast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsGroup() const [member function]
+    cls.add_method('IsGroup', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static bool ns3::Mac48Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
 def register_Ns3NodeContainer_methods(root_module, cls):
     ## node-container.h (module 'network'): ns3::NodeContainer::NodeContainer(ns3::NodeContainer const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NodeContainer const &', 'arg0')])
@@ -1959,6 +2042,12 @@
                    is_const=True)
     return
 
+def register_Ns3NonCopyable_methods(root_module, cls):
+    ## non-copyable.h (module 'core'): ns3::NonCopyable::NonCopyable() [constructor]
+    cls.add_constructor([], 
+                        visibility='protected')
+    return
+
 def register_Ns3ObjectBase_methods(root_module, cls):
     ## object-base.h (module 'core'): ns3::ObjectBase::ObjectBase() [constructor]
     cls.add_constructor([])
@@ -2281,7 +2370,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -2373,10 +2462,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -4563,11 +4652,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -4677,10 +4776,10 @@
                    'double', 
                    [], 
                    is_virtual=True)
-    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
     cls.add_method('Interpolate', 
                    'double', 
-                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
                    visibility='private', is_virtual=True)
     ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
     cls.add_method('Validate', 
@@ -5495,6 +5594,46 @@
                    is_virtual=True)
     return
 
+def register_Ns3Mac48AddressChecker_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker(ns3::Mac48AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac48AddressValue_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressValue const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'value')])
+    ## mac48-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac48AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## mac48-address.h (module 'network'): ns3::Mac48Address ns3::Mac48AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): std::string ns3::Mac48AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48AddressValue::Set(ns3::Mac48Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac48Address const &', 'value')])
+    return
+
 def register_Ns3NetDevice_methods(root_module, cls):
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
     cls.add_constructor([])
@@ -7201,6 +7340,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     register_functions_ns3_olsr(module.get_submodule('olsr'), root_module)
     return
 
@@ -7214,6 +7354,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def register_functions_ns3_olsr(module, root_module):
     ## olsr-header.h (module 'olsr'): extern double ns3::olsr::EmfToSeconds(uint8_t emf) [free function]
     module.add_function('EmfToSeconds', 
diff -Naur ns-3.23/src/olsr/bindings/modulegen__gcc_LP64.py ns-3.24/src/olsr/bindings/modulegen__gcc_LP64.py
--- ns-3.23/src/olsr/bindings/modulegen__gcc_LP64.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/olsr/bindings/modulegen__gcc_LP64.py	2015-09-15 11:18:44.000000000 -0700
@@ -104,8 +104,14 @@
     root_module['ns3::Ipv6Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix [class]
     module.add_class('Ipv6Prefix', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    module.add_class('Mac48Address', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    root_module['ns3::Mac48Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## node-container.h (module 'network'): ns3::NodeContainer [class]
     module.add_class('NodeContainer', import_from_module='ns.network')
+    ## non-copyable.h (module 'core'): ns3::NonCopyable [class]
+    module.add_class('NonCopyable', destructor_visibility='protected', import_from_module='ns.core')
     ## object-base.h (module 'core'): ns3::ObjectBase [class]
     module.add_class('ObjectBase', allow_subclassing=True, import_from_module='ns.core')
     ## object.h (module 'core'): ns3::ObjectDeleter [struct]
@@ -302,6 +308,10 @@
     module.add_class('Ipv6PrefixValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## random-variable-stream.h (module 'core'): ns3::LogNormalRandomVariable [class]
     module.add_class('LogNormalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker [class]
+    module.add_class('Mac48AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue [class]
+    module.add_class('Mac48AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
     module.add_class('NetDevice', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice::PacketType [enumeration]
@@ -349,6 +359,12 @@
     register_types_ns3_Hash(nested_module)
     
     
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
+    
     ## Register a nested module for the namespace olsr
     
     nested_module = module.add_cpp_namespace('olsr')
@@ -389,6 +405,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_types_ns3_olsr(module):
     root_module = module.get_root()
     
@@ -514,7 +537,9 @@
     register_Ns3Ipv4RoutingHelper_methods(root_module, root_module['ns3::Ipv4RoutingHelper'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
     register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
+    register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
     register_Ns3NodeContainer_methods(root_module, root_module['ns3::NodeContainer'])
+    register_Ns3NonCopyable_methods(root_module, root_module['ns3::NonCopyable'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
     register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
     register_Ns3ObjectFactory_methods(root_module, root_module['ns3::ObjectFactory'])
@@ -601,6 +626,8 @@
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
     register_Ns3LogNormalRandomVariable_methods(root_module, root_module['ns3::LogNormalRandomVariable'])
+    register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
+    register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
@@ -761,17 +788,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -793,11 +820,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -807,16 +829,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -1054,14 +1066,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -1122,11 +1138,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3EventGarbageCollector_methods(root_module, cls):
@@ -1895,6 +1906,78 @@
                    is_const=True)
     return
 
+def register_Ns3Mac48Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(ns3::Mac48Address const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetBroadcast() [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv4Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv4Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv6Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast6Prefix() [member function]
+    cls.add_method('GetMulticast6Prefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticastPrefix() [member function]
+    cls.add_method('GetMulticastPrefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsBroadcast() const [member function]
+    cls.add_method('IsBroadcast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsGroup() const [member function]
+    cls.add_method('IsGroup', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static bool ns3::Mac48Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
 def register_Ns3NodeContainer_methods(root_module, cls):
     ## node-container.h (module 'network'): ns3::NodeContainer::NodeContainer(ns3::NodeContainer const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NodeContainer const &', 'arg0')])
@@ -1959,6 +2042,12 @@
                    is_const=True)
     return
 
+def register_Ns3NonCopyable_methods(root_module, cls):
+    ## non-copyable.h (module 'core'): ns3::NonCopyable::NonCopyable() [constructor]
+    cls.add_constructor([], 
+                        visibility='protected')
+    return
+
 def register_Ns3ObjectBase_methods(root_module, cls):
     ## object-base.h (module 'core'): ns3::ObjectBase::ObjectBase() [constructor]
     cls.add_constructor([])
@@ -2281,7 +2370,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -2373,10 +2462,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -4563,11 +4652,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -4677,10 +4776,10 @@
                    'double', 
                    [], 
                    is_virtual=True)
-    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
     cls.add_method('Interpolate', 
                    'double', 
-                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
                    visibility='private', is_virtual=True)
     ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
     cls.add_method('Validate', 
@@ -5495,6 +5594,46 @@
                    is_virtual=True)
     return
 
+def register_Ns3Mac48AddressChecker_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker(ns3::Mac48AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac48AddressValue_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressValue const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'value')])
+    ## mac48-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac48AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## mac48-address.h (module 'network'): ns3::Mac48Address ns3::Mac48AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): std::string ns3::Mac48AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48AddressValue::Set(ns3::Mac48Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac48Address const &', 'value')])
+    return
+
 def register_Ns3NetDevice_methods(root_module, cls):
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
     cls.add_constructor([])
@@ -7201,6 +7340,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     register_functions_ns3_olsr(module.get_submodule('olsr'), root_module)
     return
 
@@ -7214,6 +7354,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def register_functions_ns3_olsr(module, root_module):
     ## olsr-header.h (module 'olsr'): extern double ns3::olsr::EmfToSeconds(uint8_t emf) [free function]
     module.add_function('EmfToSeconds', 
diff -Naur ns-3.23/src/olsr/model/olsr-routing-protocol.h ns-3.24/src/olsr/model/olsr-routing-protocol.h
--- ns-3.23/src/olsr/model/olsr-routing-protocol.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/olsr/model/olsr-routing-protocol.h	2015-09-15 11:18:44.000000000 -0700
@@ -126,7 +126,7 @@
    *
    * \param [in] size Final routing table size.
    */
-  typedef void (* TableChangeTracedCallback) (const uint32_t size);
+  typedef void (* TableChangeTracedCallback) (uint32_t size);
 
 private:
   std::set<uint32_t> m_interfaceExclusions;
diff -Naur ns-3.23/src/olsr/test/bug780-0-0.pcap ns-3.24/src/olsr/test/bug780-0-0.pcap
--- ns-3.23/src/olsr/test/bug780-0-0.pcap	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/olsr/test/bug780-0-0.pcap	1969-12-31 16:00:00.000000000 -0800
@@ -1,2301 +0,0 @@
-ÔÃ²¡          ÿÿ  i       ·¨ T   T   €  ÿÿÿÿÿÿ            ªª    E  0    @  
-
-ÿºº      † 
-             eW T   T   €  ÿÿÿÿÿÿ            ªª    E  0    @  
-
-ÿºº      † 
-            • d   d   €  ÿÿÿÿÿÿ           ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       •6 \   \   €  ÿÿÿÿÿÿ           ªª    E  8   @  
-
-ÿºº $    † 
-      
-       �B d   d   €  ÿÿÿÿÿÿ            ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       – \   \   €  ÿÿÿÿÿÿ            ªª    E  8   @  
-
-ÿºº $    † 
-      
-       :ç  \   \   €  ÿÿÿÿÿÿ          0 ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       ôŠ d   d   €  ÿÿÿÿÿÿ          0 ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       )÷ \   \   €  ÿÿÿÿÿÿ          @ ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       ÇF d   d   €  ÿÿÿÿÿÿ          @ ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-    
-   ‘7  \   \   €  ÿÿÿÿÿÿ          P ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    
-   B9 |   |   €  ÿÿÿÿÿÿ          P ªª    E  X   @  
-
-ÿºº D   < ç 
-ÿ     
-
-†  
-      
-  
-       �r \   \   €  ÿÿÿÿÿÿ          ` ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       é“ d   d   €  ÿÿÿÿÿÿ          ` ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       í< \   \   €  ÿÿÿÿÿÿ          p ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       8c d   d   €  ÿÿÿÿÿÿ          p ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       ÷ \   \   €  ÿÿÿÿÿÿ          € ªª    E  8   @  
-
-ÿºº $    ç 
-ÿ  	   
-
-       Š d   d   €  ÿÿÿÿÿÿ          � ªª    E  @ 	  @  
-
-ÿºº ,   $ 	†  
-  
-    
-  
-       ½$ \   \   €  ÿÿÿÿÿÿ          € ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       ?  \   \   €  ÿÿÿÿÿÿ          � ªª    E  8 	  @  
-
-ÿºº $    	† 
-  	  
-  
-       2 d   d   €  ÿÿÿÿÿÿ            ªª    E  @ 
-  @  
-
-ÿºº ,   $ 
-†  
-      
-  
-       t^ \   \   €  ÿÿÿÿÿÿ            ªª    E  8 
-  @  
-
-ÿºº $    
-† 
-  
-  
-  
-       ì— |   |   €  ÿÿÿÿÿÿ          ° ªª    E  X   @  
-
-ÿºº D   < ç 
-ÿ     
-
-†  
-      
-  
-       ŒÄ \   \   €  ÿÿÿÿÿÿ          ° ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       ïO d   d   €  ÿÿÿÿÿÿ          À ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       p  d   d   €  ÿÿÿÿÿÿ          Ð ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       O€ \   \   €  ÿÿÿÿÿÿ          À ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       qI \   \   €  ÿÿÿÿÿÿ          à ªª    E  8   @  
-
-ÿºº $    ç 
-ÿ     
-
-       ¦Ã d   d   €  ÿÿÿÿÿÿ          ð ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       :ü \   \   €  ÿÿÿÿÿÿ          Ð ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       L \   \   €  ÿÿÿÿÿÿ          à ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       S¨ d   d   €  ÿÿÿÿÿÿ           ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       r? \   \   €  ÿÿÿÿÿÿ          ð ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       ÄW |   |   €  ÿÿÿÿÿÿ          ªª    E  X   @  
-
-ÿºº D   < ç 
-ÿ     
-
-†  
-      
-  
-        Qk d   d   €  ÿÿÿÿÿÿ           ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-        ·Œ \   \   €  ÿÿÿÿÿÿ           ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    "   #  d   d   €  ÿÿÿÿÿÿ          0ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-    "   ; \   \   €  ÿÿÿÿÿÿ          ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    #   *Ã \   \   €  ÿÿÿÿÿÿ          @ªª    E  8   @  
-
-ÿºº $    ç 
-ÿ     
-
-    $   eq d   d   €  ÿÿÿÿÿÿ          Pªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-    $   °R \   \   €  ÿÿÿÿÿÿ           ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    &   èÝ  d   d   €  ÿÿÿÿÿÿ          `ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-    &   /Æ \   \   €  ÿÿÿÿÿÿ          0ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    (   {  \   \   €  ÿÿÿÿÿÿ          @ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    (   Ë† |   |   €  ÿÿÿÿÿÿ          pªª    E  X   @  
-
-ÿºº D   < ç 
-ÿ     
-
-†  
-      
-  
-    *   ŽÇ d   d   €  ÿÿÿÿÿÿ          €ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-    *   ‹¬ \   \   €  ÿÿÿÿÿÿ          Pªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    ,   bÏ d   d   €  ÿÿÿÿÿÿ          �ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-    ,   $Ÿ \   \   €  ÿÿÿÿÿÿ          `ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    -   Þ \   \   €  ÿÿÿÿÿÿ           ªª    E  8   @  
-
-ÿºº $    ç 
-ÿ     
-
-    .   ùD  d   d   €  ÿÿÿÿÿÿ          °ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-    .   Gå \   \   €  ÿÿÿÿÿÿ          pªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    0   �s d   d   €  ÿÿÿÿÿÿ          Àªª    E  @   @  
-
-ÿºº ,   $ †  
-       
-  
-    0   fr \   \   €  ÿÿÿÿÿÿ          €ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    2   ¸  @   @   €  ÿÿÿÿÿÿ          �ªª           
-ÿÿÿÿÿÿ
-    2   k  @   @   €:               Ðªª           
-     
-    2   u        Ô€           2   C  x   x   €:                ªª    E  T    @  
-
-                                                                   2   ÿ        Ô€           2   0  @   @   €  ÿÿÿÿÿÿ          àªª           
-ÿÿÿÿÿÿ
-    2   ?0  @   @   €:               °ªª           
-     
-    2   :4        Ô€           2   ¤:  x   x   €:               ðªª    E  T    @  
-
-                                                                    2   ®:        Ô€           2   ¾B |   |   €  ÿÿÿÿÿÿ           ªª    E  X   @  
-
-ÿºº D   < ç 
-ÿ  !   
-
-†  
-  "    
-  
-    2   Ú¿ \   \   €  ÿÿÿÿÿÿ          Àªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    3       x   x   €:               Ðªª    E  T   @  
-
-                                                                  3   »        Ô€           3   m
-  x   x   €:               ªª    E  T   @  
-
-                                                                   3   w
-        Ô€           4       x   x   €:               àªª    E  T   @  
-
-                                                                  4   »        Ô€           4   m
-  x   x   €:                ªª    E  T   @  
-
-                                                                   4   w
-        Ô€           4   ^9 \   \   €  ÿÿÿÿÿÿ          ðªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    4   õ8 d   d   €  ÿÿÿÿÿÿ          0ªª    E  @   @  
-
-ÿºº ,   $ †  
-  #    
-  
-    5       x   x   €:                ªª    E  T   @  
-
-                                                                  5   »        Ô€           5   m
-  x   x   €:               @ªª    E  T   @  
-
-                                                                   5   w
-        Ô€           6       x   x   €:               ªª    E  T   @  
-
-                                                                  6   »        Ô€           6   m
-  x   x   €:               Pªª    E  T   @  
-
-                                                                   6   w
-        Ô€           6   Z \   \   €  ÿÿÿÿÿÿ           ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    6   M7 d   d   €  ÿÿÿÿÿÿ          `ªª    E  @   @  
-
-ÿºº ,   $ †  
-  $    
-  
-    7       x   x   €:               0ªª    E  T   @  
-
-                                                                  7   »        Ô€           7   m
-  x   x   €:               pªª    E  T   @  
-
-                                                                   7   w
-        Ô€           7   µ \   \   €  ÿÿÿÿÿÿ          €ªª    E  8    @  
-
-ÿºº $     ç 
-ÿ  %   
-
-    8       x   x   €:               @ªª    E  T   @  
-
-                                                                  8   »        Ô€           8   m
-  x   x   €:               �ªª    E  T   @  
-
-                                                                   8   w
-        Ô€           8    d   d   €  ÿÿÿÿÿÿ           ªª    E  @ !  @  
-
-ÿºº ,   $ !†  
-  &    
-  
-    8   =Ÿ \   \   €  ÿÿÿÿÿÿ          Pªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    9       x   x   €:               `ªª    E  T   @  
-
-                                                                  9   »        Ô€           9   m
-  x   x   €:               °ªª    E  T   @  
-
-                                                                   9   w
-        Ô€           :       x   x   €:               pªª    E  T   @  
-
-                                                                  :   »        Ô€           :   m
-  x   x   €:               Àªª    E  T   @  
-
-                                                                   :   w
-        Ô€           :   x[ d   d   €  ÿÿÿÿÿÿ          Ðªª    E  @ "  @  
-
-ÿºº ,   $ "†  
-  '    
-  
-    :   /† \   \   €  ÿÿÿÿÿÿ          €ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    ;       x   x   €:               �ªª    E  T 	  @  
-
-      	                                                            ;   »        Ô€           ;   m
-  x   x   €:               àªª    E  T 	  @  
-
-       	                                                            ;   w
-        Ô€           <       x   x   €:                ªª    E  T 
-  @  
-
-      
-                                                            <   »        Ô€           <   m
-  x   x   €:               ðªª    E  T 
-  @  
-
-       
-                                                            <   w
-        Ô€           <   Æ‰ |   |   €  ÿÿÿÿÿÿ           ªª    E  X #  @  
-
-ÿºº D   < #ç 
-ÿ  (   
-
-†  
-  )    
-  
-    <   â# \   \   €  ÿÿÿÿÿÿ          °ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    =       x   x   €:               Àªª    E  T   @  
-
-                                                                  =   »        Ô€           =   m
-  x   x   €:               ªª    E  T   @  
-
-                                                                   =   w
-        Ô€           >       x   x   €:               Ðªª    E  T   @  
-
-                                                                  >   »        Ô€           >   m
-  x   x   €:                ªª    E  T   @  
-
-                                                                   >   w
-        Ô€           >   r d   d   €  ÿÿÿÿÿÿ          0ªª    E  @ $  @  
-
-ÿºº ,   $ $†  
-  *    
-  
-    >   E] \   \   €  ÿÿÿÿÿÿ          àªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    ?       x   x   €:               ðªª    E  T   @  
-
-                                                                  ?   »        Ô€           ?   m
-  x   x   €:               @ªª    E  T   @  
-
-                                                                   ?   w
-        Ô€           @       x   x   €:                ªª    E  T   @  
-
-                                                                  @   »        Ô€           @   m
-  x   x   €:               Pªª    E  T   @  
-
-                                                                   @   w
-        Ô€           @   Yí d   d   €  ÿÿÿÿÿÿ          `ªª    E  @ %  @  
-
-ÿºº ,   $ %†  
-  +    
-  
-    @   ¢ \   \   €  ÿÿÿÿÿÿ          ªª    E  8    @  
-
-ÿºº $     † 
-     
-  
-    A       x   x   €:                ªª    E  T   @  
-
-                                                                  A   »        Ô€           A   m
-  x   x   €:               pªª    E  T   @  
-
-                                                                   A   w
-        Ô€           A   Ñb \   \   €  ÿÿÿÿÿÿ          €ªª    E  8 &  @  
-
-ÿºº $    &ç 
-ÿ  ,   
-
-    B       x   x   €:               0ªª    E  T   @  
-
-                                                                  B   »        Ô€           B   m
-  x   x   €:               �ªª    E  T   @  
-
-                                                                   B   w
-        Ô€           B   &| \   \   €  ÿÿÿÿÿÿ          @ªª    E  8 !  @  
-
-ÿºº $    !† 
-  !  
-  
-    B   †Ð d   d   €  ÿÿÿÿÿÿ           ªª    E  @ '  @  
-
-ÿºº ,   $ '†  
-  -    
-  
-    C       x   x   €:               Pªª    E  T   @  
-
-                                                                  C   »        Ô€           C   m
-  x   x   €:               °ªª    E  T   @  
-
-                                                                   C   w
-        Ô€           D       x   x   €:               `ªª    E  T   @  
-
-                                                                  D   »        Ô€           D   m
-  x   x   €:               Àªª    E  T   @  
-
-                                                                   D   w
-        Ô€           D   úq d   d   €  ÿÿÿÿÿÿ          Ðªª    E  @ (  @  
-
-ÿºº ,   $ (†  
-  .    
-  
-    D   ¶ú \   \   €  ÿÿÿÿÿÿ          pªª    E  8 "  @  
-
-ÿºº $    "† 
-  "  
-  
-    E       x   x   €:               €ªª    E  T   @  
-
-                                                                  E   »        Ô€           E   m
-  x   x   €:               àªª    E  T   @  
-
-                                                                   E   w
-        Ô€           F       x   x   €:               �ªª    E  T   @  
-
-                                                                  F   »        Ô€           F   m
-  x   x   €:               ðªª    E  T   @  
-
-                                                                   F   w
-        Ô€           F   ý) \   \   €  ÿÿÿÿÿÿ           ªª    E  8 #  @  
-
-ÿºº $    #† 
-  #  
-  
-    F   ni |   |   €  ÿÿÿÿÿÿ           ªª    E  X )  @  
-
-ÿºº D   < )ç 
-ÿ  /   
-
-†  
-  0    
-  
-    G       x   x   €:               °ªª    E  T   @  
-
-                                                                  G   »        Ô€           G   m
-  x   x   €:               ªª    E  T   @  
-
-                                                                   G   w
-        Ô€           H       x   x   €:               Àªª    E  T   @  
-
-                                                                  H   »        Ô€           H   m
-  x   x   €:                ªª    E  T   @  
-
-                                                                   H   w
-        Ô€           H   q¥ d   d   €  ÿÿÿÿÿÿ          0ªª    E  @ *  @  
-
-ÿºº ,   $ *†  
-  1    
-  
-    H   QÓ \   \   €  ÿÿÿÿÿÿ          Ðªª    E  8 $  @  
-
-ÿºº $    $† 
-  $  
-  
-    I       x   x   €:               àªª    E  T   @  
-
-                                                                  I   »        Ô€           I   m
-  x   x   €:               @ªª    E  T   @  
-
-                                                                   I   w
-        Ô€           J       x   x   €:               ðªª    E  T   @  
-
-                                                                  J   »        Ô€           J   m
-  x   x   €:               Pªª    E  T   @  
-
-                                                                   J   w
-        Ô€           J   = d   d   €  ÿÿÿÿÿÿ          `ªª    E  @ +  @  
-
-ÿºº ,   $ +†  
-  2    
-  
-    J   zã \   \   €  ÿÿÿÿÿÿ           ªª    E  8 %  @  
-
-ÿºº $    %† 
-  %  
-  
-    K       x   x   €:               ªª    E  T   @  
-
-                                                                  K   »        Ô€           K   m
-  x   x   €:               pªª    E  T   @  
-
-                                                                   K   w
-        Ô€           K   áè \   \   €  ÿÿÿÿÿÿ          €ªª    E  8 ,  @  
-
-ÿºº $    ,ç 
-ÿ  3   
-
-    L       x   x   €:                ªª    E  T   @  
-
-                                                                  L   »        Ô€           L   m
-  x   x   €:               �ªª    E  T   @  
-
-                                                                   L   w
-        Ô€           L   á* \   \   €  ÿÿÿÿÿÿ          0ªª    E  8 &  @  
-
-ÿºº $    &† 
-  &  
-  
-    L   ö© d   d   €  ÿÿÿÿÿÿ           ªª    E  @ -  @  
-
-ÿºº ,   $ -†  
-  4    
-  
-    M       x   x   €:               @ªª    E  T   @  
-
-                                                                  M   »        Ô€           M   m
-  x   x   €:               °ªª    E  T   @  
-
-                                                                   M   w
-        Ô€           N       x   x   €:               Pªª    E  T   @  
-
-                                                                  N   »        Ô€           N   m
-  x   x   €:               Àªª    E  T   @  
-
-                                                                   N   w
-        Ô€           N    – d   d   €  ÿÿÿÿÿÿ          Ðªª    E  @ .  @  
-
-ÿºº ,   $ .†  
-  5    
-  
-    N   ã \   \   €  ÿÿÿÿÿÿ          pªª    E  8 '  @  
-
-ÿºº $    '† 
-  '  
-  
-    N   Œ  \   \   €  ÿÿÿÿÿÿ          `ªª    E  8 '  @  
-
-ÿºº $    '† 
-  '  
-  
-    O       x   x   €:               pªª    E  T   @  
-
-                                                                  O   »        Ô€           O   m
-  x   x   €:               àªª    E  T   @  
-
-                                                                   O   w
-        Ô€           P       x   x   €:               €ªª    E  T   @  
-
-                                                                  P   »        Ô€           P   m
-  x   x   €:               ðªª    E  T   @  
-
-                                                                   P   w
-        Ô€           P   í d   d   €  ÿÿÿÿÿÿ          �ªª    E  @ (  @  
-
-ÿºº ,   $ (†  
-  (  
-  
-  
-    P   Ûû d   d   €  ÿÿÿÿÿÿ          €ªª    E  @ (  @  
-
-ÿºº ,   $ (†  
-  (  
-  
-  
-    P   N |   |   €  ÿÿÿÿÿÿ           ªª    E  X /  @  
-
-ÿºº D   < /ç 
-ÿ  6   
-
-†  
-  7    
-  
-    Q       x   x   €:                ªª    E  T   @  
-
-                                                                  Q   »        Ô€           Q   m
-  x   x   €:               ªª    E  T   @  
-
-                                                                   Q   w
-        Ô€           R       x   x   €:               °ªª    E  T    @  
-
-                                                                   R   »        Ô€           R   m
-  x   x   €:                ªª    E  T    @  
-
-                                                                    R   w
-        Ô€           R   •G d   d   €  ÿÿÿÿÿÿ          0ªª    E  @ 0  @  
-
-ÿºº ,   $ 0†  
-  8    
-  
-    R   y„ d   d   €  ÿÿÿÿÿÿ          �ªª    E  @ )  @  
-
-ÿºº ,   $ )†  
-  )    
-  
-    R   ÛŠ d   d   €  ÿÿÿÿÿÿ          Àªª    E  @ )  @  
-
-ÿºº ,   $ )†  
-  )    
-  
-    S       x   x   €:               Ðªª    E  T !  @  
-
-      !                                                            S   »        Ô€           S   m
-  x   x   €:               @ªª    E  T !  @  
-
-       !                                                            S   w
-        Ô€           T       x   x   €:               àªª    E  T "  @  
-
-      "                                                            T   »        Ô€           T   m
-  x   x   €:               Pªª    E  T "  @  
-
-       "                                                            T   w
-        Ô€           T   Ë§ d   d   €  ÿÿÿÿÿÿ          ðªª    E  @ *  @  
-
-ÿºº ,   $ *†  
-  *    
-  
-    T   Þ9 d   d   €  ÿÿÿÿÿÿ           ªª    E  @ *  @  
-
-ÿºº ,   $ *†  
-  *    
-  
-    T   è‚ d   d   €  ÿÿÿÿÿÿ          `ªª    E  @ 1  @  
-
-ÿºº ,   $ 1†  
-  9    
-  
-    U       x   x   €:                ªª    E  T #  @  
-
-      #                                                            U   »        Ô€           U   m
-  x   x   €:               pªª    E  T #  @  
-
-       #                                                            U   w
-        Ô€           U   / \   \   €  ÿÿÿÿÿÿ          €ªª    E  8 2  @  
-
-ÿºº $    2ç 
-ÿ  :   
-
-    V       x   x   €:               ªª    E  T $  @  
-
-      $                                                            V   »        Ô€           V   m
-  x   x   €:               �ªª    E  T $  @  
-
-       $                                                            V   w
-        Ô€           V   2î d   d   €  ÿÿÿÿÿÿ           ªª    E  @ 3  @  
-
-ÿºº ,   $ 3†  
-  ;    
-  
-    V   fÍ d   d   €  ÿÿÿÿÿÿ           ªª    E  @ +  @  
-
-ÿºº ,   $ +†  
-  +    
-  
-    V   N d   d   €  ÿÿÿÿÿÿ          °ªª    E  @ +  @  
-
-ÿºº ,   $ +†  
-  +    
-  
-    W       x   x   €:               0ªª    E  T %  @  
-
-      %                                                            W   »        Ô€           W   m
-  x   x   €:               °ªª    E  T %  @  
-
-       %                                                            W   w
-        Ô€           X       x   x   €:               @ªª    E  T &  @  
-
-      &                                                            X   »        Ô€           X   m
-  x   x   €:               Àªª    E  T &  @  
-
-       &                                                            X   w
-        Ô€           X   ƒÂ d   d   €  ÿÿÿÿÿÿ          Àªª    E  @ ,  @  
-
-ÿºº ,   $ ,†  
-  ,    
-  
-    X   ”& d   d   €  ÿÿÿÿÿÿ          Ðªª    E  @ 4  @  
-
-ÿºº ,   $ 4†  
-  <    
-  
-    X   U„ d   d   €  ÿÿÿÿÿÿ          Pªª    E  @ ,  @  
-
-ÿºº ,   $ ,†  
-  ,    
-  
-    Y       x   x   €:               `ªª    E  T '  @  
-
-      '                                                            Y   »        Ô€           Y   m
-  x   x   €:               àªª    E  T '  @  
-
-       '                                                            Y   w
-        Ô€           Z       x   x   €:               pªª    E  T (  @  
-
-      (                                                            Z   »        Ô€           Z   m
-  x   x   €:               ðªª    E  T (  @  
-
-       (                                                            Z   w
-        Ô€           Z   h  d   d   €  ÿÿÿÿÿÿ           ªª    E  @ 5  @  
-
-ÿºº ,   $ 5†  
-  =    
-  
-    Z   —E d   d   €  ÿÿÿÿÿÿ          Ðªª    E  @ -  @  
-
-ÿºº ,   $ -†  
-  -    
-  
-    Z   ‰é d   d   €  ÿÿÿÿÿÿ          €ªª    E  @ -  @  
-
-ÿºº ,   $ -†  
-  -    
-  
-    [       x   x   €:               �ªª    E  T )  @  
-
-      )                                                            [   »        Ô€           [   m
-  x   x   €:               ªª    E  T )  @  
-
-       )                                                            [   w
-        Ô€           \       x   x   €:                ªª    E  T *  @  
-
-      *                                                            \   »        Ô€           \   m
-  x   x   €:                ªª    E  T *  @  
-
-       *                                                            \   w
-        Ô€           \   ˆQ  d   d   €  ÿÿÿÿÿÿ          àªª    E  @ .  @  
-
-ÿºº ,   $ .†  
-  .    
-  
-    \   ž  d   d   €  ÿÿÿÿÿÿ          °ªª    E  @ .  @  
-
-ÿºº ,   $ .†  
-  .    
-  
-    \   âU d   d   €  ÿÿÿÿÿÿ          0ªª    E  @ 6  @  
-
-ÿºº ,   $ 6†  
-  >    
-  
-    ]       x   x   €:               Àªª    E  T +  @  
-
-      +                                                            ]   »        Ô€           ]   m
-  x   x   €:               @ªª    E  T +  @  
-
-       +                                                            ]   w
-        Ô€           ^       x   x   €:               Ðªª    E  T ,  @  
-
-      ,                                                            ^   »        Ô€           ^   m
-  x   x   €:               Pªª    E  T ,  @  
-
-       ,                                                            ^   w
-        Ô€           ^   Æß  d   d   €  ÿÿÿÿÿÿ          ðªª    E  @ /  @  
-
-ÿºº ,   $ /†  
-  /    
-  
-    ^   àM d   d   €  ÿÿÿÿÿÿ          `ªª    E  @ 7  @  
-
-ÿºº ,   $ 7†  
-  ?    
-  
-    ^   ¬‹ d   d   €  ÿÿÿÿÿÿ          àªª    E  @ /  @  
-
-ÿºº ,   $ /†  
-  /    
-  
-    _       x   x   €:               ðªª    E  T -  @  
-
-      -                                                            _   »        Ô€           _   m
-  x   x   €:               pªª    E  T -  @  
-
-       -                                                            _   w
-        Ô€           `       x   x   €:                ªª    E  T .  @  
-
-      .                                                            `   »        Ô€           `   m
-  x   x   €:               €ªª    E  T .  @  
-
-       .                                                            `   w
-        Ô€           `   ƒû  d   d   €  ÿÿÿÿÿÿ          ªª    E  @ 0  @  
-
-ÿºº ,   $ 0†  
-  0    
-  
-    `   '7 d   d   €  ÿÿÿÿÿÿ          �ªª    E  @ 8  @  
-
-ÿºº ,   $ 8†  
-  @    
-  
-    `   ¢ù d   d   €  ÿÿÿÿÿÿ           ªª    E  @ 0  @  
-
-ÿºº ,   $ 0†  
-  0    
-  
-    a       x   x   €:                ªª    E  T /  @  
-
-      /                                                            a   »        Ô€           a   m
-  x   x   €:                ªª    E  T /  @  
-
-       /                                                            a   w
-        Ô€           b       x   x   €:               0ªª    E  T 0  @  
-
-      0                                                            b   »        Ô€           b   m
-  x   x   €:               °ªª    E  T 0  @  
-
-       0                                                            b   w
-        Ô€           b   üá d   d   €  ÿÿÿÿÿÿ          ªª    E  @ 1  @  
-
-ÿºº ,   $ 1†  
-  1    
-  
-    b   � d   d   €  ÿÿÿÿÿÿ          @ªª    E  @ 1  @  
-
-ÿºº ,   $ 1†  
-  1    
-  
-    b   ãW d   d   €  ÿÿÿÿÿÿ          Àªª    E  @ 9  @  
-
-ÿºº ,   $ 9†  
-  A    
-  
-    c       x   x   €:               Pªª    E  T 1  @  
-
-      1                                                            c   »        Ô€           c   m
-  x   x   €:               Ðªª    E  T 1  @  
-
-       1                                                            c   w
-        Ô€           d       x   x   €:               `ªª    E  T 2  @  
-
-      2                                                            d   »        Ô€           d   m
-  x   x   €:               àªª    E  T 2  @  
-
-       2                                                            d   w
-        Ô€           d   *’ d   d   €  ÿÿÿÿÿÿ          pªª    E  @ 2  @  
-
-ÿºº ,   $ 2†  
-  2    
-  
-    d   óv d   d   €  ÿÿÿÿÿÿ           ªª    E  @ 2  @  
-
-ÿºº ,   $ 2†  
-  2    
-  
-    d   m¸ d   d   €  ÿÿÿÿÿÿ          ðªª    E  @ :  @  
-
-ÿºº ,   $ :†  
-  B    
-  
-    e       x   x   €:               €ªª    E  T 3  @  
-
-      3                                                            e   »        Ô€           e   m
-  x   x   €:                ªª    E  T 3  @  
-
-       3                                                            e   w
-        Ô€           f       x   x   €:               �ªª    E  T 4  @  
-
-      4                                                            f   »        Ô€           f   m
-  x   x   €:               ªª    E  T 4  @  
-
-       4                                                            f   w
-        Ô€           f   ­& d   d   €  ÿÿÿÿÿÿ           ªª    E  @ 3  @  
-
-ÿºº ,   $ 3†  
-  3    
-  
-    f   ¾þ d   d   €  ÿÿÿÿÿÿ          0ªª    E  @ 3  @  
-
-ÿºº ,   $ 3†  
-  3    
-  
-    f   ‡“ d   d   €  ÿÿÿÿÿÿ           ªª    E  @ ;  @  
-
-ÿºº ,   $ ;†  
-  C    
-  
-    g       x   x   €:               °ªª    E  T 5  @  
-
-      5                                                            g   »        Ô€           g   m
-  x   x   €:               0ªª    E  T 5  @  
-
-       5                                                            g   w
-        Ô€           h       x   x   €:               Àªª    E  T 6  @  
-
-      6                                                            h   »        Ô€           h   m
-  x   x   €:               @ªª    E  T 6  @  
-
-       6                                                            h   w
-        Ô€           h   eë  d   d   €  ÿÿÿÿÿÿ          @ªª    E  @ 4  @  
-
-ÿºº ,   $ 4†  
-  4    
-  
-    h   ÈÛ d   d   €  ÿÿÿÿÿÿ          Pªª    E  @ <  @  
-
-ÿºº ,   $ <†  
-  D    
-  
-    h   î d   d   €  ÿÿÿÿÿÿ          Ðªª    E  @ 4  @  
-
-ÿºº ,   $ 4†  
-  4    
-  
-    i       x   x   €:               àªª    E  T 7  @  
-
-      7                                                            i   »        Ô€           i   m
-  x   x   €:               `ªª    E  T 7  @  
-
-       7                                                            i   w
-        Ô€           j       x   x   €:               ðªª    E  T 8  @  
-
-      8                                                            j   »        Ô€           j   m
-  x   x   €:               pªª    E  T 8  @  
-
-       8                                                            j   w
-        Ô€           j   âô d   d   €  ÿÿÿÿÿÿ          Pªª    E  @ 5  @  
-
-ÿºº ,   $ 5†  
-  5    
-  
-    j   \f d   d   €  ÿÿÿÿÿÿ           ªª    E  @ 5  @  
-
-ÿºº ,   $ 5†  
-  5    
-  
-    j   Éî d   d   €  ÿÿÿÿÿÿ          €ªª    E  @ =  @  
-
-ÿºº ,   $ =†  
-  E    
-  
-    k       x   x   €:               ªª    E  T 9  @  
-
-      9                                                            k   »        Ô€           k   m
-  x   x   €:               �ªª    E  T 9  @  
-
-       9                                                            k   w
-        Ô€           l       x   x   €:                ªª    E  T :  @  
-
-      :                                                            l   »        Ô€           l   m
-  x   x   €:                ªª    E  T :  @  
-
-       :                                                            l   w
-        Ô€           l    d   d   €  ÿÿÿÿÿÿ          0ªª    E  @ 6  @  
-
-ÿºº ,   $ 6†  
-  6    
-  
-    l   ï d   d   €  ÿÿÿÿÿÿ          `ªª    E  @ 6  @  
-
-ÿºº ,   $ 6†  
-  6    
-  
-    l   ¢4 d   d   €  ÿÿÿÿÿÿ          °ªª    E  @ >  @  
-
-ÿºº ,   $ >†  
-  F    
-  
-    m       x   x   €:               @ªª    E  T ;  @  
-
-      ;                                                            m   »        Ô€           m   m
-  x   x   €:               Àªª    E  T ;  @  
-
-       ;                                                            m   w
-        Ô€           n       x   x   €:               Pªª    E  T <  @  
-
-      <                                                            n   ¼        Ô€           n   n
-  x   x   €:               Ðªª    E  T <  @  
-
-       <                                                            n   x
-        Ô€           n   ºQ  d   d   €  ÿÿÿÿÿÿ          àªª    E  @ ?  @  
-
-ÿºº ,   $ ?†  
-  G    
-  
-    n   4T d   d   €  ÿÿÿÿÿÿ          `ªª    E  @ 7  @  
-
-ÿºº ,   $ 7†  
-  7    
-  
-    n   ÙR d   d   €  ÿÿÿÿÿÿ          pªª    E  @ 7  @  
-
-ÿºº ,   $ 7†  
-  7    
-  
-    o       x   x   €:               pªª    E  T =  @  
-
-      =                                                            o   ¼        Ô€           o   n
-  x   x   €:               ðªª    E  T =  @  
-
-       =                                                            o   x
-        Ô€           p       x   x   €:               €ªª    E  T >  @  
-
-      >                                                            p   ¼        Ô€           p   n
-  x   x   €:                ªª    E  T >  @  
-
-       >                                                            p   x
-        Ô€           p   Íä  d   d   €  ÿÿÿÿÿÿ          �ªª    E  @ 8  @  
-
-ÿºº ,   $ 8†  
-  8    
-  
-    p   Œ d   d   €  ÿÿÿÿÿÿ          ªª    E  @ @  @  
-
-ÿºº ,   $ @†  
-  H    
-  
-    p   %Ä d   d   €  ÿÿÿÿÿÿ          €ªª    E  @ 8  @  
-
-ÿºº ,   $ 8†  
-  8    
-  
-    q       x   x   €:                ªª    E  T ?  @  
-
-      ?                                                            q   ¼        Ô€           q   n
-  x   x   €:                ªª    E  T ?  @  
-
-       ?                                                            q   x
-        Ô€           r       x   x   €:               °ªª    E  T @  @  
-
-      @                                                            r   ¼        Ô€           r   n
-  x   x   €:               0ªª    E  T @  @  
-
-       @                                                            r   x
-        Ô€           r   %ú d   d   €  ÿÿÿÿÿÿ          @ªª    E  @ A  @  
-
-ÿºº ,   $ A†  
-  I    
-  
-    r   ˆ d   d   €  ÿÿÿÿÿÿ          �ªª    E  @ 9  @  
-
-ÿºº ,   $ 9†  
-  9    
-  
-    r   ø& d   d   €  ÿÿÿÿÿÿ          Àªª    E  @ 9  @  
-
-ÿºº ,   $ 9†  
-  9    
-  
-    s       x   x   €:               Ðªª    E  T A  @  
-
-      A                                                            s   ¼        Ô€           s   n
-  x   x   €:               Pªª    E  T A  @  
-
-       A                                                            s   x
-        Ô€           t       x   x   €:               àªª    E  T B  @  
-
-      B                                                            t   ¼        Ô€           t   n
-  x   x   €:               `ªª    E  T B  @  
-
-       B                                                            t   x
-        Ô€           t   ÇÈ d   d   €  ÿÿÿÿÿÿ          pªª    E  @ B  @  
-
-ÿºº ,   $ B†  
-  J    
-  
-    t   ²Ý d   d   €  ÿÿÿÿÿÿ          ðªª    E  @ :  @  
-
-ÿºº ,   $ :†  
-  :    
-  
-    t   W d   d   €  ÿÿÿÿÿÿ           ªª    E  @ :  @  
-
-ÿºº ,   $ :†  
-  :    
-  
-    u       x   x   €:                ªª    E  T C  @  
-
-      C                                                            u   ¼        Ô€           u   n
-  x   x   €:               €ªª    E  T C  @  
-
-       C                                                            u   x
-        Ô€           v       x   x   €:               ªª    E  T D  @  
-
-      D                                                            v   ¼        Ô€           v   n
-  x   x   €:               �ªª    E  T D  @  
-
-       D                                                            v   x
-        Ô€           v   öŸ d   d   €  ÿÿÿÿÿÿ           ªª    E  @ ;  @  
-
-ÿºº ,   $ ;†  
-  ;    
-  
-    v   S¥ d   d   €  ÿÿÿÿÿÿ           ªª    E  @ C  @  
-
-ÿºº ,   $ C†  
-  K    
-  
-    v   -È d   d   €  ÿÿÿÿÿÿ          °ªª    E  @ ;  @  
-
-ÿºº ,   $ ;†  
-  ;    
-  
-    w       x   x   €:               0ªª    E  T E  @  
-
-      E                                                            w   ¼        Ô€           w   n
-  x   x   €:               °ªª    E  T E  @  
-
-       E                                                            w   x
-        Ô€           x       x   x   €:               @ªª    E  T F  @  
-
-      F                                                            x   ¼        Ô€           x   n
-  x   x   €:               Àªª    E  T F  @  
-
-       F                                                            x   x
-        Ô€           x   Ô^ d   d   €  ÿÿÿÿÿÿ          Àªª    E  @ <  @  
-
-ÿºº ,   $ <†  
-  <    
-  
-    x   R¹ d   d   €  ÿÿÿÿÿÿ          Pªª    E  @ <  @  
-
-ÿºº ,   $ <†  
-  <    
-  
-    x   O. d   d   €  ÿÿÿÿÿÿ          Ðªª    E  @ D  @  
-
-ÿºº ,   $ D†  
-  L    
-  
-    y       x   x   €:               `ªª    E  T G  @  
-
-      G                                                            y   ¼        Ô€           y   n
-  x   x   €:               àªª    E  T G  @  
-
-       G                                                            y   x
-        Ô€           z       x   x   €:               pªª    E  T H  @  
-
-      H                                                            z   ¼        Ô€           z   n
-  x   x   €:               ðªª    E  T H  @  
-
-       H                                                            z   x
-        Ô€           z     d   d   €  ÿÿÿÿÿÿ          €ªª    E  @ =  @  
-
-ÿºº ,   $ =†  
-  =    
-  
-    z   * d   d   €  ÿÿÿÿÿÿ          Ðªª    E  @ =  @  
-
-ÿºº ,   $ =†  
-  =    
-  
-    {       x   x   €:               �ªª    E  T I  @  
-
-      I                                                            {   ¢
-  x   x   ˆ:               �ªª    E  T I  @  
-
-      I                                                            {     x   x   ˆ:               �ªª    E  T I  @  
-
-      I                                                            {   "  x   x   ˆ:               �ªª    E  T I  @  
-
-      I                                                            {   $4  x   x   ˆ:               �ªª    E  T I  @  
-
-      I                                                            {   Y  x   x   ˆ:               �ªª    E  T I  @  
-
-      I                                                            {   ˜x  x   x   ˆ:               �ªª    E  T I  @  
-
-      I                                                            |       x   x   €:                ªª    E  T J  @  
-
-      J                                                            |     x   x   ˆ:                ªª    E  T J  @  
-
-      J                                                            |   d  x   x   ˆ:                ªª    E  T J  @  
-
-      J                                                            |   â  x   x   ˆ:                ªª    E  T J  @  
-
-      J                                                            |   <I  x   x   ˆ:                ªª    E  T J  @  
-
-      J                                                            |   êˆ  x   x   ˆ:                ªª    E  T J  @  
-
-      J                                                            |   «  x   x   ˆ:                ªª    E  T J  @  
-
-      J                                                            |   0µ  d   d   €  ÿÿÿÿÿÿ          àªª    E  @ >  @  
-
-ÿºº ,   $ >†  
-  >    
-  
-    |   –Ö d   d   €  ÿÿÿÿÿÿ          °ªª    E  @ >  @  
-
-ÿºº ,   $ >†  
-  >    
-  
-    }       x   x   €:               Àªª    E  T K  @  
-
-      K                                                            }   º  x   x   ˆ:               Àªª    E  T K  @  
-
-      K                                                            }   Ø  x   x   ˆ:               Àªª    E  T K  @  
-
-      K                                                            }   Î(  x   x   ˆ:               Àªª    E  T K  @  
-
-      K                                                            }   èB  x   x   ˆ:               Àªª    E  T K  @  
-
-      K                                                            }   VO  x   x   ˆ:               Àªª    E  T K  @  
-
-      K                                                            }   ô€  x   x   ˆ:               Àªª    E  T K  @  
-
-      K                                                            ~       x   x   €:               Ðªª    E  T L  @  
-
-      L                                                            ~   b	  x   x   ˆ:               Ðªª    E  T L  @  
-
-      L                                                            ~   Ü  x   x   ˆ:               Ðªª    E  T L  @  
-
-      L                                                            ~   -  x   x   ˆ:               Ðªª    E  T L  @  
-
-      L                                                            ~    G  x   x   ˆ:               Ðªª    E  T L  @  
-
-      L                                                            ~   ‰  x   x   ˆ:               Ðªª    E  T L  @  
-
-      L                                                            ~   A›  d   d   €  ÿÿÿÿÿÿ          ðªª    E  @ ?  @  
-
-ÿºº ,   $ ?†  
-  ?    
-  
-    ~   Ñ  x   x   ˆ:               Ðªª    E  T L  @  
-
-      L                                                            ~   ÉØ  d   d   €  ÿÿÿÿÿÿ          àªª    E  @ ?  @  
-
-ÿºº ,   $ ?†  
-  ?    
-  
-       ¸  @   @   €  ÿÿÿÿÿÿ          ðªª           
-ÿÿÿÿÿÿ
-       k  @   @   €:                ªª           
-     
-       u        Ô€                x   x   €:                	ªª    E  T M  @  
-
-      M                                                               Ó        Ô€              �>  @   @   €  ÿÿÿÿÿÿ          ªª           
-ÿÿÿÿÿÿ
-       ®B        Ô€              dH  x   x   €:                ªª    E  T M  ?  
-
-      M                                                               ?q  @   @   €:               0ªª           
-     
-       ¾z        Ô€              œ—  @   @   €  ÿÿÿÿÿÿ          @ªª           
-ÿÿÿÿÿÿ
-       Î—  @   @   €:               	ªª           
-     
-       É›        Ô€              ß   x   x   €:               Pªª    E  T I  ?  
-
-       M                                                               é         Ô€           €       x   x   €:                	ªª    E  T N  @  
-
-      N                                                            €   »        Ô€           €   m
-  x   x   €:               `ªª    E  T N  ?  
-
-      N                                                            €   ”        Ô€           €     x   x   €:               pªª    E  T J  ?  
-
-       N                                                            €           Ô€           €    d   d   €  ÿÿÿÿÿÿ          0	ªª    E  @ @  @  
-
-ÿºº ,   $ @†  
-  @    
-
-  
-    €   ~¿ d   d   €  ÿÿÿÿÿÿ          €ªª    E  @ @  @  
-
-ÿºº ,   $ @†  
-  @    
-  
-    �       x   x   €:               @	ªª    E  T O  @  
-
-      O                                                            �   »        Ô€           �   m
-  x   x   €:               �ªª    E  T O  ?  
-
-      O                                                            �   ”        Ô€           �   "  x   x   €:                ªª    E  T K  ?  
-
-       O                                                            �   ,        Ô€           ‚       x   x   €:               P	ªª    E  T P  @  
-
-      P                                                            ‚   »        Ô€           ‚   m
-  x   x   €:               °ªª    E  T P  ?  
-
-      P                                                            ‚   ”        Ô€           ‚   š  x   x   €:               Àªª    E  T L  ?  
-
-       P                                                            ‚   ¤        Ô€           ‚   7Ñ d   d   €  ÿÿÿÿÿÿ          `	ªª    E  @ A  @  
-
-ÿºº ,   $ A†  
-  A    
-
-  
-    ‚   Âz |   |   €  ÿÿÿÿÿÿ          Ðªª    E  X A  @  
-
-ÿºº D   < Aç 
-ÿ  A   
-
-†  
-  B    
-  
-    ƒ       x   x   €:               p	ªª    E  T Q  @  
-
-      Q                                                            ƒ   »        Ô€           ƒ   m
-  x   x   €:               àªª    E  T Q  ?  
-
-      Q                                                            ƒ   ”        Ô€           ƒ   ²  x   x   €:               ðªª    E  T M  ?  
-
-       Q                                                            ƒ   ¼        Ô€           „       x   x   €:               €	ªª    E  T R  @  
-
-      R                                                            „   »        Ô€           „   m
-  x   x   €:                ªª    E  T R  ?  
-
-      R                                                            „   ”        Ô€           „   F  x   x   €:               ªª    E  T N  ?  
-
-       R                                                            „   P        Ô€           „   ?| d   d   €  ÿÿÿÿÿÿ           ªª    E  @ B  @  
-
-ÿºº ,   $ B†  
-  C    
-  
-    „   ä+ d   d   €  ÿÿÿÿÿÿ          �	ªª    E  @ B  @  
-
-ÿºº ,   $ B†  
-  B    
-
-  
-    …       x   x   €:                	ªª    E  T S  @  
-
-      S                                                            …   »        Ô€           …   m
-  x   x   €:               0ªª    E  T S  ?  
-
-      S                                                            …   ”        Ô€           …   ú  x   x   €:               @ªª    E  T O  ?  
-
-       S                                                            …           Ô€           †       x   x   €:               °	ªª    E  T T  @  
-
-      T                                                            †   »        Ô€           †   m
-  x   x   €:               Pªª    E  T T  ?  
-
-      T                                                            †   ”        Ô€           †   6  x   x   €:               `ªª    E  T P  ?  
-
-       T                                                            †   @        Ô€           †   ‰¶ d   d   €  ÿÿÿÿÿÿ          pªª    E  @ C  @  
-
-ÿºº ,   $ C†  
-  D    
-  
-    †   ¦‹ \   \   €  ÿÿÿÿÿÿ          À	ªª    E  8 C  @  
-
-ÿºº $    C† 
-  C  
-  
-    ‡       x   x   €:               Ð	ªª    E  T U  @  
-
-      U                                                            ‡   »        Ô€           ‡   m
-  x   x   €:               €ªª    E  T U  ?  
-
-      U                                                            ‡   ”        Ô€           ‡   –  x   x   €:               �ªª    E  T Q  ?  
-
-       U                                                            ‡            Ô€           ‡   qT  \   \   €  ÿÿÿÿÿÿ           ªª    E  8 D  @  
-
-ÿºº $    Dç 
-ÿ  E   
-
-    ˆ       x   x   €:               à	ªª    E  T V  @  
-
-      V                                                            ˆ   »        Ô€           ˆ   m
-  x   x   €:               °ªª    E  T V  ?  
-
-      V                                                            ˆ   Ã  x   x   ˆ:               °ªª    E  T V  ?  
-
-      V                                                            ˆ   ê        Ô€           ˆ   T  x   x   €:               Àªª    E  T R  ?  
-
-       V                                                            ˆ   ^        Ô€           ˆ   ô \   \   €  ÿÿÿÿÿÿ          ð	ªª    E  8 D  @  
-
-ÿºº $    D† 
-  D  
-  
-    ˆ   oG d   d   €  ÿÿÿÿÿÿ          Ðªª    E  @ E  @  
-
-ÿºº ,   $ E†  
-  F    
-  
-    ‰       x   x   €:                
-ªª    E  T W  @  
-
-      W                                                            ‰   »        Ô€           ‰   m
-  x   x   €:               àªª    E  T W  ?  
-
-      W                                                            ‰   ”        Ô€           ‰   r  x   x   €:               ðªª    E  T S  ?  
-
-       W                                                            ‰   |        Ô€           Š       x   x   €:               
-ªª    E  T X  @  
-
-      X                                                            Š   »        Ô€           Š   m
-  x   x   €:                ªª    E  T X  ?  
-
-      X                                                            Š   ”        Ô€           Š   6  x   x   €:               ªª    E  T T  ?  
-
-       X                                                            Š   @        Ô€           Š   F–  \   \   €  ÿÿÿÿÿÿ           
-ªª    E  8 E  @  
-
-ÿºº $    E† 
-  E  
-  
-    Š   ã» d   d   €  ÿÿÿÿÿÿ           ªª    E  @ F  @  
-
-ÿºº ,   $ F†  
-  G    
-  
-    ‹       x   x   €:               0
-ªª    E  T Y  @  
-
-      Y                                                            ‹   »        Ô€           ‹   m
-  x   x   €:               0ªª    E  T Y  ?  
-
-      Y                                                            ‹   ”        Ô€           ‹   ž  x   x   €:               @ªª    E  T U  ?  
-
-       Y                                                            ‹   ¨        Ô€           Œ       x   x   €:               @
-ªª    E  T Z  @  
-
-      Z                                                            Œ   »        Ô€           Œ   m
-  x   x   €:               Pªª    E  T Z  ?  
-
-      Z                                                            Œ   •        Ô€           Œ   K  x   x   €:               `ªª    E  T V  ?  
-
-       Z                                                            Œ   U        Ô€           Œ   Tr  \   \   €  ÿÿÿÿÿÿ          P
-ªª    E  8 F  @  
-
-ÿºº $    F† 
-  F  
-  
-    Œ   hµ |   |   €  ÿÿÿÿÿÿ          pªª    E  X G  @  
-
-ÿºº D   < Gç 
-ÿ  H   
-
-†  
-  I    
-  
-    �       x   x   €:               `
-ªª    E  T [  @  
-
-      [                                                            �   »        Ô€           �   m
-  x   x   €:               €ªª    E  T [  ?  
-
-      [                                                            �   •        Ô€           �   O  x   x   €:               �ªª    E  T W  ?  
-
-       [                                                            �   Y        Ô€           Ž       x   x   €:               p
-ªª    E  T \  @  
-
-      \                                                            Ž   »        Ô€           Ž   m
-  x   x   €:                ªª    E  T \  ?  
-
-      \                                                            Ž   •        Ô€           Ž   ‹  x   x   €:               °ªª    E  T X  ?  
-
-       \                                                            Ž   •        Ô€           Ž   `% \   \   €  ÿÿÿÿÿÿ          €
-ªª    E  8 G  @  
-
-ÿºº $    G† 
-  G  
-  
-    Ž   ^7 d   d   €  ÿÿÿÿÿÿ          Àªª    E  @ H  @  
-
-ÿºº ,   $ H†  
-  J    
-  
-    �       x   x   €:               �
-ªª    E  T ]  @  
-
-      ]                                                            �   »        Ô€           �   m
-  x   x   €:               Ðªª    E  T ]  ?  
-
-      ]                                                            �   •        Ô€           �   '  x   x   €:               àªª    E  T Y  ?  
-
-       ]                                                            �   1        Ô€           �       x   x   €:                
-ªª    E  T ^  @  
-
-      ^                                                            �   »        Ô€           �   m
-  x   x   €:               ðªª    E  T ^  ?  
-
-      ^                                                            �   •        Ô€           �   «  x   x   €:                ªª    E  T Z  ?  
-
-       ^                                                            �   µ        Ô€           �   I  d   d   €  ÿÿÿÿÿÿ          ªª    E  @ I  @  
-
-ÿºº ,   $ I†  
-  K    
-  
-    �   <~ \   \   €  ÿÿÿÿÿÿ          °
-ªª    E  8 H  @  
-
-ÿºº $    H† 
-  H  
-  
-    ‘       x   x   €:               À
-ªª    E  T _  @  
-
-      _                                                            ‘   »        Ô€           ‘   m
-  x   x   €:                ªª    E  T _  ?  
-
-      _                                                            ‘   •        Ô€           ‘   ‹  x   x   €:               0ªª    E  T [  ?  
-
-       _                                                            ‘   •        Ô€           ‘   kÏ \   \   €  ÿÿÿÿÿÿ          @ªª    E  8 J  @  
-
-ÿºº $    Jç 
-ÿ  L   
-
-    ’       x   x   €:               Ð
-ªª    E  T `  @  
-
-      `                                                            ’   »        Ô€           ’   m
-  x   x   €:               Pªª    E  T `  ?  
-
-      `                                                            ’   •        Ô€           ’     x   x   €:               `ªª    E  T \  ?  
-
-       `                                                            ’           Ô€           ’   -è d   d   €  ÿÿÿÿÿÿ          pªª    E  @ K  @  
-
-ÿºº ,   $ K†  
-  M    
-  
-    ’   ; \   \   €  ÿÿÿÿÿÿ          à
-ªª    E  8 I  @  
-
-ÿºº $    I† 
-  I  
-  
-    “       x   x   €:               ð
-ªª    E  T a  @  
-
-      a                                                            “   »        Ô€           “   m
-  x   x   €:               €ªª    E  T a  ?  
-
-      a                                                            “   •        Ô€           “   c  x   x   €:               �ªª    E  T ]  ?  
-
-       a                                                            “   m        Ô€           ”       x   x   €:                ªª    E  T b  @  
-
-      b                                                            ”   »        Ô€           ”   m
-  x   x   €:                ªª    E  T b  ?  
-
-      b                                                            ”   •        Ô€           ”   ÿ  x   x   €:               °ªª    E  T ^  ?  
-
-       b                                                            ”   	        Ô€           ”   b7 d   d   €  ÿÿÿÿÿÿ          Àªª    E  @ L  @  
-
-ÿºº ,   $ L†  
-  N    
-  
-    ”   j~ \   \   €  ÿÿÿÿÿÿ          ªª    E  8 J  @  
-
-ÿºº $    J† 
-  J  
-  
-    •       x   x   €:                ªª    E  T c  @  
-
-      c                                                            •   »        Ô€           •   m
-  x   x   €:               Ðªª    E  T c  ?  
-
-      c                                                            •   •        Ô€           •   7  x   x   €:               àªª    E  T _  ?  
-
-       c                                                            •   A        Ô€           –       x   x   €:               0ªª    E  T d  @  
-
-      d                                                            –   »        Ô€           –   m
-  x   x   €:               ðªª    E  T d  ?  
-
-      d                                                            –   •        Ô€           –   Ÿ  x   x   €:                ªª    E  T `  ?  
-
-       d                                                            –   ©        Ô€           –   s' |   |   €  ÿÿÿÿÿÿ          ªª    E  X M  @  
-
-ÿºº D   < Mç 
-ÿ  O   
-
-†  
-  P    
-  
-    –   É< \   \   €  ÿÿÿÿÿÿ          @ªª    E  8 K  @  
-
-ÿºº $    K† 
-  K  
-  
-    —       x   x   €:               Pªª    E  T e  @  
-
-      e                                                            —   »        Ô€           —   m
-  x   x   €:                ªª    E  T e  ?  
-
-      e                                                            —   •        Ô€           —   c  x   x   €:               0ªª    E  T a  ?  
-
-       e                                                            —   m        Ô€           ˜       x   x   €:               `ªª    E  T f  @  
-
-      f                                                            ˜   »        Ô€           ˜   m
-  x   x   €:               @ªª    E  T f  ?  
-
-      f                                                            ˜   •        Ô€           ˜   #  x   x   €:               Pªª    E  T b  ?  
-
-       f                                                            ˜   -        Ô€           ˜   Y; \   \   €  ÿÿÿÿÿÿ          pªª    E  8 L  @  
-
-ÿºº $    L† 
-  L  
-  
-    ˜   ØÍ d   d   €  ÿÿÿÿÿÿ          `ªª    E  @ N  @  
-
-ÿºº ,   $ N†  
-  Q    
-  
-    ™       x   x   €:               €ªª    E  T g  @  
-
-      g                                                            ™   »        Ô€           ™   m
-  x   x   €:               pªª    E  T g  ?  
-
-      g                                                            ™   •        Ô€           ™   o  x   x   €:               €ªª    E  T c  ?  
-
-       g                                                            ™   y        Ô€           š       x   x   €:               �ªª    E  T h  @  
-
-      h                                                            š   »        Ô€           š   m
-  x   x   €:               �ªª    E  T h  ?  
-
-      h                                                            š   •        Ô€           š   Ÿ  x   x   €:                ªª    E  T d  ?  
-
-       h                                                            š   ©        Ô€           š   š<  d   d   €  ÿÿÿÿÿÿ          °ªª    E  @ O  @  
-
-ÿºº ,   $ O†  
-  R    
-  
-    š   |M \   \   €  ÿÿÿÿÿÿ           ªª    E  8 M  @  
-
-ÿºº $    M† 
-  M  
-  
-    ›       x   x   €:               °ªª    E  T i  @  
-
-      i                                                            ›   »        Ô€           ›   m
-  x   x   €:               Àªª    E  T i  ?  
-
-      i                                                            ›   •        Ô€           ›   ×  x   x   €:               Ðªª    E  T e  ?  
-
-       i                                                            ›   á        Ô€           ›   Èú \   \   €  ÿÿÿÿÿÿ          àªª    E  8 P  @  
-
-ÿºº $    Pç 
-ÿ  S   
-
-    œ       x   x   €:               Àªª    E  T j  @  
-
-      j                                                            œ   »        Ô€           œ   m
-  x   x   €:               ðªª    E  T j  ?  
-
-      j                                                            œ   •        Ô€           œ   7  x   x   €:                	ªª    E  T f  ?  
-
-       j                                                            œ   A        Ô€           œ    d   d   €  ÿÿÿÿÿÿ          	ªª    E  @ Q  @  
-
-ÿºº ,   $ Q†  
-  T    
-  
-    œ   rH \   \   €  ÿÿÿÿÿÿ          Ðªª    E  8 N  @  
-
-ÿºº $    N† 
-  N  
-  
-    �       x   x   €:               àªª    E  T k  @  
-
-      k                                                            �   »        Ô€           �   m
-  x   x   €:                	ªª    E  T k  ?  
-
-      k                                                            �   •        Ô€           �   ¿  x   x   €:               0	ªª    E  T g  ?  
-
-       k                                                            �   É        Ô€           ž       x   x   €:               ðªª    E  T l  @  
-
-      l                                                            ž   »        Ô€           ž   m
-  x   x   €:               @	ªª    E  T l  ?  
-
-      l                                                            ž   •        Ô€           ž   ‡  x   x   €:               P	ªª    E  T h  ?  
-
-       l                                                            ž   ‘        Ô€           ž   `) \   \   €  ÿÿÿÿÿÿ           ªª    E  8 O  @  
-
-ÿºº $    O† 
-  O  
-  
-    ž   ­z d   d   €  ÿÿÿÿÿÿ          `	ªª    E  @ R  @  
-
-ÿºº ,   $ R†  
-  U    
-  
-    Ÿ       x   x   €:               ªª    E  T m  @  
-
-      m                                                            Ÿ   »        Ô€           Ÿ   m
-  x   x   €:               p	ªª    E  T m  ?  
-
-      m                                                            Ÿ   •        Ô€           Ÿ   7  x   x   €:               €	ªª    E  T i  ?  
-
-       m                                                            Ÿ   A        Ô€                   x   x   €:                ªª    E  T n  @  
-
-      n                                                                »        Ô€               m
-  x   x   €:               �	ªª    E  T n  ?  
-
-      n                                                                •        Ô€               Ÿ  x   x   €:                	ªª    E  T j  ?  
-
-       n                                                                ©        Ô€               †1 \   \   €  ÿÿÿÿÿÿ          0ªª    E  8 P  @  
-
-ÿºº $    P† 
-  P  
-  
-        ÆE |   |   €  ÿÿÿÿÿÿ          °	ªª    E  X S  @  
-
-ÿºº D   < Sç 
-ÿ  V   
-
-†  
-  W    
-  
-    ¡       x   x   €:               @ªª    E  T o  @  
-
-      o                                                            ¡   »        Ô€           ¡   m
-  x   x   €:               À	ªª    E  T o  ?  
-
-      o                                                            ¡   •        Ô€           ¡     x   x   €:               Ð	ªª    E  T k  ?  
-
-       o                                                            ¡           Ô€           ¢       x   x   €:               Pªª    E  T p  @  
-
-      p                                                            ¢   »        Ô€           ¢   m
-  x   x   €:               à	ªª    E  T p  ?  
-
-      p                                                            ¢   •        Ô€           ¢   c  x   x   €:               ð	ªª    E  T l  ?  
-
-       p                                                            ¢   m        Ô€           ¢   0˜ d   d   €  ÿÿÿÿÿÿ           
-ªª    E  @ T  @  
-
-ÿºº ,   $ T†  
-  X    
-  
-    ¢   V_ \   \   €  ÿÿÿÿÿÿ          `ªª    E  8 Q  @  
-
-ÿºº $    Q† 
-  Q  
-  
-    £       x   x   €:               pªª    E  T q  @  
-
-      q                                                            £   »        Ô€           £   m
-  x   x   €:               
-ªª    E  T q  ?  
-
-      q                                                            £   •        Ô€           £   w  x   x   €:                
-ªª    E  T m  ?  
-
-       q                                                            £   �        Ô€           ¤       x   x   €:               €ªª    E  T r  @  
-
-      r                                                            ¤   »        Ô€           ¤   m
-  x   x   €:               0
-ªª    E  T r  ?  
-
-      r                                                            ¤   •        Ô€           ¤   ‡  x   x   €:               @
-ªª    E  T n  ?  
-
-       r                                                            ¤   ‘        Ô€           ¤   ”õ d   d   €  ÿÿÿÿÿÿ          P
-ªª    E  @ U  @  
-
-ÿºº ,   $ U†  
-  Y    
-  
-    ¤   ;« \   \   €  ÿÿÿÿÿÿ          �ªª    E  8 R  @  
-
-ÿºº $    R† 
-  R  
-  
-    ¥       x   x   €:                ªª    E  T s  @  
-
-      s                                                            ¥   »        Ô€           ¥   m
-  x   x   €:               `
-ªª    E  T s  ?  
-
-      s                                                            ¥   •        Ô€           ¥   _  x   x   €:               p
-ªª    E  T o  ?  
-
-       s                                                            ¥   i        Ô€           ¥   f× \   \   €  ÿÿÿÿÿÿ          €
-ªª    E  8 V  @  
-
-ÿºº $    Vç 
-ÿ  Z   
-
-    ¦       x   x   €:               °ªª    E  T t  @  
-
-      t                                                            ¦   »        Ô€           ¦   m
-  x   x   €:               �
-ªª    E  T t  ?  
-
-      t                                                            ¦   •        Ô€           ¦   O  x   x   €:                
-ªª    E  T p  ?  
-
-       t                                                            ¦   Y        Ô€           ¦    \   \   €  ÿÿÿÿÿÿ          Àªª    E  8 S  @  
-
-ÿºº $    S† 
-  S  
-  
-    ¦   H4 d   d   €  ÿÿÿÿÿÿ          °
-ªª    E  @ W  @  
-
-ÿºº ,   $ W†  
-  [    
-  
-    §       x   x   €:               Ðªª    E  T u  @  
-
-      u                                                            §   »        Ô€           §   m
-  x   x   €:               À
-ªª    E  T u  ?  
-
-      u                                                            §   •        Ô€           §   ÿ  x   x   €:               Ð
-ªª    E  T q  ?  
-
-       u                                                            §   	        Ô€           ¨       x   x   €:               àªª    E  T v  @  
-
-      v                                                            ¨   »        Ô€           ¨   m
-  x   x   €:               à
-ªª    E  T v  ?  
-
-      v                                                            ¨   •        Ô€           ¨     x   x   €:               ð
-ªª    E  T r  ?  
-
-       v                                                            ¨           Ô€           ¨   õ \   \   €  ÿÿÿÿÿÿ          ðªª    E  8 T  @  
-
-ÿºº $    T† 
-  T  
-  
-    ¨   ¨‚ d   d   €  ÿÿÿÿÿÿ           ªª    E  @ X  @  
-
-ÿºº ,   $ X†  
-  \    
-  
-    ©       x   x   €:                ªª    E  T w  @  
-
-      w                                                            ©   »        Ô€           ©   m
-  x   x   €:               ªª    E  T w  ?  
-
-      w                                                            ©   •        Ô€           ©   G  x   x   €:                ªª    E  T s  ?  
-
-       w                                                            ©   Q        Ô€           ª       x   x   €:               ªª    E  T x  @  
-
-      x                                                            ª   »        Ô€           ª   m
-  x   x   €:               0ªª    E  T x  ?  
-
-      x                                                            ª   •        Ô€           ª   ×  x   x   €:               @ªª    E  T t  ?  
-
-       x                                                            ª   á        Ô€           ª   h=  |   |   €  ÿÿÿÿÿÿ          Pªª    E  X Y  @  
-
-ÿºº D   < Yç 
-ÿ  ]   
-
-†  
-  ^    
-  
-    ª   ›v \   \   €  ÿÿÿÿÿÿ           ªª    E  8 U  @  
-
-ÿºº $    U† 
-  U  
-  
-    «       x   x   €:               0ªª    E  T y  @  
-
-      y                                                            «   »        Ô€           «   m
-  x   x   €:               `ªª    E  T y  ?  
-
-      y                                                            «   •        Ô€           «   K  x   x   €:               pªª    E  T u  ?  
-
-       y                                                            «   U        Ô€           ¬       x   x   €:               @ªª    E  T z  @  
-
-      z                                                            ¬   »        Ô€           ¬   m
-  x   x   €:               €ªª    E  T z  ?  
-
-      z                                                            ¬   •        Ô€           ¬   ¿  x   x   €:               �ªª    E  T v  ?  
-
-       z                                                            ¬   É        Ô€           ¬   M \   \   €  ÿÿÿÿÿÿ          Pªª    E  8 V  @  
-
-ÿºº $    V† 
-  V  
-  
-    ¬   UZ d   d   €  ÿÿÿÿÿÿ           ªª    E  @ Z  @  
-
-ÿºº ,   $ Z†  
-  _    
-  
-    ­       x   x   €:               `ªª    E  T {  @  
-
-      {                                                            ­   »        Ô€           ­   m
-  x   x   €:               °ªª    E  T {  ?  
-
-      {                                                            ­   •        Ô€           ­   Ã  x   x   €:               Àªª    E  T w  ?  
-
-       {                                                            ­   Í        Ô€           ®       x   x   €:               pªª    E  T |  @  
-
-      |                                                            ®   »        Ô€           ®   m
-  x   x   €:               Ðªª    E  T |  ?  
-
-      |                                                            ®   +  x   x   ˆ:               Ðªª    E  T |  ?  
-
-      |                                                            ®   S        Ô€           ®   ]   x   x   €:               àªª    E  T x  ?  
-
-       |                                                            ®   g         Ô€           ®   +  \   \   €  ÿÿÿÿÿÿ          €ªª    E  8 W  @  
-
-ÿºº $    W† 
-  W  
-  
-    ®   Y d   d   €  ÿÿÿÿÿÿ          ðªª    E  @ [  @  
-
-ÿºº ,   $ [†  
-  `    
-  
-    ¯       x   x   €:               �ªª    E  T }  @  
-
-      }                                                            ¯   »        Ô€           ¯   m
-  x   x   €:                ªª    E  T }  ?  
-
-      }                                                            ¯   •        Ô€           ¯   #  x   x   €:               ªª    E  T y  ?  
-
-       }                                                            ¯   -        Ô€           ¯   ÷ä \   \   €  ÿÿÿÿÿÿ           ªª    E  8 \  @  
-
-ÿºº $    \ç 
-ÿ  a   
-
-    °       x   x   €:                ªª    E  T ~  @  
-
-      ~                                                            °   »        Ô€           °   m
-  x   x   €:               0ªª    E  T ~  ?  
-
-      ~                                                            °   •        Ô€           °   ƒ  x   x   €:               @ªª    E  T z  ?  
-
-       ~                                                            °   �        Ô€           °   Ÿy d   d   €  ÿÿÿÿÿÿ          Pªª    E  @ ]  @  
-
-ÿºº ,   $ ]†  
-  b    
-  
-    °   p9 \   \   €  ÿÿÿÿÿÿ          °ªª    E  8 X  @  
-
-ÿºº $    X† 
-  X  
-  
-    ±       x   x   €:               Àªª    E  T   @  
-
-                                                                  ±   »        Ô€           ±   m
-  x   x   €:               `ªª    E  T   ?  
-
-                                                                  ±   •        Ô€           ±   ‹  x   x   €:               pªª    E  T {  ?  
-
-                                                                   ±   •        Ô€           ²       x   x   €:               Ðªª    E  T €  @  
-
-      €                                                            ²   »        Ô€           ²   m
-  x   x   €:               €ªª    E  T €  ?  
-
-      €                                                            ²   •        Ô€           ²   G  x   x   €:               �ªª    E  T |  ?  
-
-       €                                                            ²   Q        Ô€           ²   ‡ø \   \   €  ÿÿÿÿÿÿ          àªª    E  8 Y  @  
-
-ÿºº $    Y† 
-  Y  
-  
-    ²   • d   d   €  ÿÿÿÿÿÿ           ªª    E  @ ^  @  
-
-ÿºº ,   $ ^†  
-  c    
-  
-    ³       x   x   €:               ðªª    E  T �  @  
-
-      �                                                            ³   »        Ô€           ³   m
-  x   x   €:               °ªª    E  T �  ?  
-
-      �                                                            ³   •        Ô€           ³   _  x   x   €:               Àªª    E  T }  ?  
-
-       �                                                            ³   i        Ô€           ´       x   x   €:                ªª    E  T ‚  @  
-
-      ‚                                                            ´   »        Ô€           ´   m
-  x   x   €:               Ðªª    E  T ‚  ?  
-
-      ‚                                                            ´   •        Ô€           ´   7  x   x   €:               àªª    E  T ~  ?  
-
-       ‚                                                            ´   A        Ô€           ´   _æ  \   \   €  ÿÿÿÿÿÿ          ªª    E  8 Z  @  
-
-ÿºº $    Z† 
-  Z  
-  
-    ´   � |   |   €  ÿÿÿÿÿÿ          ðªª    E  X _  @  
-
-ÿºº D   < _ç 
-ÿ  d   
-
-†  
-  e    
-  
-    µ       x   x   €:                ªª    E  T ƒ  @  
-
-      ƒ                                                            µ   »        Ô€           µ   m
-  x   x   €:                ªª    E  T ƒ  ?  
-
-      ƒ                                                            µ   •        Ô€           µ   s  x   x   €:               ªª    E  T   ?  
-
-       ƒ                                                            µ   }        Ô€           ¶       x   x   €:               0ªª    E  T „  @  
-
-      „                                                            ¶   »        Ô€           ¶   m
-  x   x   €:                ªª    E  T „  ?  
-
-      „                                                            ¶   •        Ô€           ¶   —  x   x   €:               0ªª    E  T €  ?  
-
-       „                                                            ¶   ¡        Ô€           ¶   î° \   \   €  ÿÿÿÿÿÿ          @ªª    E  8 [  @  
-
-ÿºº $    [† 
-  [  
-  
-    ¶   ÉŸ d   d   €  ÿÿÿÿÿÿ          @ªª    E  @ `  @  
-
-ÿºº ,   $ `†  
-  f    
-  
-    ·       x   x   €:               Pªª    E  T …  @  
-
-      …                                                            ·   »        Ô€           ·   m
-  x   x   €:               Pªª    E  T …  ?  
-
-      …                                                            ·   •        Ô€           ·   '  x   x   €:               `ªª    E  T �  ?  
-
-       …                                                            ·   1        Ô€           ¸       x   x   €:               `ªª    E  T †  @  
-
-      †                                                            ¸   »        Ô€           ¸   m
-  x   x   €:               pªª    E  T †  ?  
-
-      †                                                            ¸   •        Ô€           ¸   ›  x   x   €:               €ªª    E  T ‚  ?  
-
-       †                                                            ¸   ¥        Ô€           ¸   å d   d   €  ÿÿÿÿÿÿ          �ªª    E  @ a  @  
-
-ÿºº ,   $ a†  
-  g    
-  
-    ¸   Pý \   \   €  ÿÿÿÿÿÿ          pªª    E  8 \  @  
-
-ÿºº $    \† 
-  \  
-  
-    ¹       x   x   €:               €ªª    E  T ‡  @  
-
-      ‡                                                            ¹   »        Ô€           ¹   m
-  x   x   €:                ªª    E  T ‡  ?  
-
-      ‡                                                            ¹   •        Ô€           ¹   K  x   x   €:               °ªª    E  T ƒ  ?  
-
-       ‡                                                            ¹   U        Ô€           ¹   aQ \   \   €  ÿÿÿÿÿÿ          Àªª    E  8 b  @  
-
-ÿºº $    bç 
-ÿ  h   
-
-    º       x   x   €:               �ªª    E  T ˆ  @  
-
-      ˆ                                                            º   »        Ô€           º   m
-  x   x   €:               Ðªª    E  T ˆ  ?  
-
-      ˆ                                                            º   •        Ô€           º   ³  x   x   €:               àªª    E  T „  ?  
-
-       ˆ                                                            º   ½        Ô€           º   `  d   d   €  ÿÿÿÿÿÿ          ðªª    E  @ c  @  
-
-ÿºº ,   $ c†  
-  i    
-  
-    º   [ \   \   €  ÿÿÿÿÿÿ           ªª    E  8 ]  @  
-
-ÿºº $    ]† 
-  ]  
-  
-    »       x   x   €:               °ªª    E  T ‰  @  
-
-      ‰                                                            »   »        Ô€           »   m
-  x   x   €:                ªª    E  T ‰  ?  
-
-      ‰                                                            »   •        Ô€           »     x   x   €:               ªª    E  T …  ?  
-
-       ‰                                                            »           Ô€           ¼       x   x   €:               Àªª    E  T Š  @  
-
-      Š                                                            ¼   »        Ô€           ¼   m
-  x   x   €:                ªª    E  T Š  ?  
-
-      Š                                                            ¼   •        Ô€           ¼   ;  x   x   €:               0ªª    E  T †  ?  
-
-       Š                                                            ¼   E        Ô€           ¼   ë% d   d   €  ÿÿÿÿÿÿ          @ªª    E  @ d  @  
-
-ÿºº ,   $ d†  
-  j    
-  
-    ¼   )Þ \   \   €  ÿÿÿÿÿÿ          Ðªª    E  8 ^  @  
-
-ÿºº $    ^† 
-  ^  
-  
-    ½       x   x   €:               àªª    E  T ‹  @  
-
-      ‹                                                            ½   »        Ô€           ½   m
-  x   x   €:               Pªª    E  T ‹  ?  
-
-      ‹                                                            ½   •        Ô€           ½   7  x   x   €:               `ªª    E  T ‡  ?  
-
-       ‹                                                            ½   A        Ô€           ¾       x   x   €:               ðªª    E  T Œ  @  
-
-      Œ                                                            ¾   »        Ô€           ¾   m
-  x   x   €:               pªª    E  T Œ  ?  
-
-      Œ                                                            ¾   •        Ô€           ¾   #  x   x   €:               €ªª    E  T ˆ  ?  
-
-       Œ                                                            ¾   -        Ô€           ¾   õ€ \   \   €  ÿÿÿÿÿÿ           ªª    E  8 _  @  
-
-ÿºº $    _† 
-  _  
-  
-    ¾   Àñ |   |   €  ÿÿÿÿÿÿ          �ªª    E  X e  @  
-
-ÿºº D   < eç 
-ÿ  k   
-
-†  
-  l    
-  
-    ¿       x   x   €:               ªª    E  T �  @  
-
-      �                                                            ¿   »        Ô€           ¿   m
-  x   x   €:                ªª    E  T �  ?  
-
-      �                                                            ¿   •        Ô€           ¿   ÿ  x   x   €:               °ªª    E  T ‰  ?  
-
-       �                                                            ¿   	        Ô€           À       x   x   €:                ªª    E  T Ž  @  
-
-      Ž                                                            À   »        Ô€           À   m
-  x   x   €:               Àªª    E  T Ž  ?  
-
-      Ž                                                            À   •        Ô€           À   ‹  x   x   €:               Ðªª    E  T Š  ?  
-
-       Ž                                                            À   •        Ô€           À   3 \   \   €  ÿÿÿÿÿÿ          0ªª    E  8 `  @  
-
-ÿºº $    `† 
-  `  
-  
-    À   ä? d   d   €  ÿÿÿÿÿÿ          àªª    E  @ f  @  
-
-ÿºº ,   $ f†  
-  m    
-  
-    Á       x   x   €:               @ªª    E  T �  @  
-
-      �                                                            Á   »        Ô€           Á   m
-  x   x   €:               ðªª    E  T �  ?  
-
-      �                                                            Á   •        Ô€           Á   Ÿ  x   x   €:                ªª    E  T ‹  ?  
-
-       �                                                            Á   ©        Ô€           Â       x   x   €:               Pªª    E  T �  @  
-
-      �                                                            Â   »        Ô€           Â   m
-  x   x   €:               ªª    E  T �  ?  
-
-      �                                                            Â   •        Ô€           Â   ³  x   x   €:                ªª    E  T Œ  ?  
-
-       �                                                            Â   ½        Ô€           Â   žN  \   \   €  ÿÿÿÿÿÿ          `ªª    E  8 a  @  
-
-ÿºº $    a† 
-  a  
-  
-    Â   á| d   d   €  ÿÿÿÿÿÿ          0ªª    E  @ g  @  
-
-ÿºº ,   $ g†  
-  n    
-  
-    Ã       x   x   €:               pªª    E  T ‘  @  
-
-      ‘                                                            Ã   »        Ô€           Ã   m
-  x   x   €:               @ªª    E  T ‘  ?  
-
-      ‘                                                            Ã   •        Ô€           Ã   ›  x   x   €:               Pªª    E  T �  ?  
-
-       ‘                                                            Ã   ¥        Ô€           Ã   4‹ \   \   €  ÿÿÿÿÿÿ          `ªª    E  8 h  @  
-
-ÿºº $    hç 
-ÿ  o   
-
-    Ä       x   x   €:               €ªª    E  T ’  @  
-
-      ’                                                            Ä   »        Ô€           Ä   m
-  x   x   €:               pªª    E  T ’  ?  
-
-      ’                                                            Ä   •        Ô€           Ä   ç  x   x   €:               €ªª    E  T Ž  ?  
-
-       ’                                                            Ä   ñ        Ô€           Ä   ZØ \   \   €  ÿÿÿÿÿÿ          �ªª    E  8 b  @  
-
-ÿºº $    b† 
-  b  
-  
-    Ä   ÙN d   d   €  ÿÿÿÿÿÿ          �ªª    E  @ i  @  
-
-ÿºº ,   $ i†  
-  p    
-  
-    Å       x   x   €:                ªª    E  T “  @  
-
-      “                                                            Å   »        Ô€           Å   m
-  x   x   €:                ªª    E  T “  ?  
-
-      “                                                            Å   •        Ô€           Å   K  x   x   €:               °ªª    E  T �  ?  
-
-       “                                                            Å   U        Ô€           Æ       x   x   €:               °ªª    E  T ”  @  
-
-      ”                                                            Æ   »        Ô€           Æ   m
-  x   x   €:               Àªª    E  T ”  ?  
-
-      ”                                                            Æ   •        Ô€           Æ   _  x   x   €:               Ðªª    E  T �  ?  
-
-       ”                                                            Æ   i        Ô€           Æ   …5 \   \   €  ÿÿÿÿÿÿ          Àªª    E  8 c  @  
-
-ÿºº $    c† 
-  c  
-  
-    Æ   $¼ d   d   €  ÿÿÿÿÿÿ          àªª    E  @ j  @  
-
-ÿºº ,   $ j†  
-  q    
-  
-    Ç       x   x   €:               Ðªª    E  T •  @  
-
-      •                                                            Ç   »        Ô€           Ç   m
-  x   x   €:               ðªª    E  T •  ?  
-
-      •                                                            Ç   •        Ô€           Ç   ›  x   x   €:                ªª    E  T ‘  ?  
-
-       •                                                            Ç   ¥        Ô€           
\ No newline at end of file
diff -Naur ns-3.23/src/olsr/test/bug780-1-0.pcap ns-3.24/src/olsr/test/bug780-1-0.pcap
--- ns-3.23/src/olsr/test/bug780-1-0.pcap	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/olsr/test/bug780-1-0.pcap	1969-12-31 16:00:00.000000000 -0800
@@ -1,2363 +0,0 @@
-ÔÃ²¡          ÿÿ  i       Úy T   T   €  ÿÿÿÿÿÿ            ªª    E  0    @  
-
-ÿºº      † 
-             ¬ T   T   €  ÿÿÿÿÿÿ            ªª    E  0    @  
-
-ÿºº      † 
-             T T   T   €  ÿÿÿÿÿÿ            ªª    E  0    @  
-
-ÿºº      † 
-            ´	 d   d   €  ÿÿÿÿÿÿ           ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       6: \   \   €  ÿÿÿÿÿÿ           ªª    E  8   @  
-
-ÿºº $    † 
-      
-       ¡& \   \   €  ÿÿÿÿÿÿ           ªª    E  8   @  
-
-ÿºº $    † 
-      
-       ¬> d   d   €  ÿÿÿÿÿÿ            ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       &q \   \   €  ÿÿÿÿÿÿ            ªª    E  8   @  
-
-ÿºº $    † 
-      
-       ¦™ \   \   €  ÿÿÿÿÿÿ            ªª    E  8   @  
-
-ÿºº $    † 
-      
-       Ûê  \   \   €  ÿÿÿÿÿÿ          0 ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       ‡ d   d   €  ÿÿÿÿÿÿ          0 ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       ÷0 \   \   €  ÿÿÿÿÿÿ          0 ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       Êú \   \   €  ÿÿÿÿÿÿ          @ ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       æB d   d   €  ÿÿÿÿÿÿ          @ ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       Ÿ‰ \   \   €  ÿÿÿÿÿÿ          @ ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    
-   1;  \   \   €  ÿÿÿÿÿÿ          P ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    
-   ¡4 |   |   €  ÿÿÿÿÿÿ          P ªª    E  X   @  
-
-ÿºº D   < ç 
-ÿ     
-
-†  
-      
-  
-    
-   ÿ× \   \   €  ÿÿÿÿÿÿ          P ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       ¯Ø \   \   €  ÿÿÿÿÿÿ          ` ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       "v \   \   €  ÿÿÿÿÿÿ          ` ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       � d   d   €  ÿÿÿÿÿÿ          ` ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       Ž@ \   \   €  ÿÿÿÿÿÿ          p ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       |’ \   \   €  ÿÿÿÿÿÿ          p ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       W_ d   d   €  ÿÿÿÿÿÿ          p ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       V \   \   €  ÿÿÿÿÿÿ          € ªª    E  8   @  
-
-ÿºº $    ç 
-ÿ  	   
-
-       [ñ  \   \   €  ÿÿÿÿÿÿ          € ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       © d   d   €  ÿÿÿÿÿÿ          � ªª    E  @ 	  @  
-
-ÿºº ,   $ 	†  
-  
-    
-  
-       ^( \   \   €  ÿÿÿÿÿÿ          € ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-        \   \   €  ÿÿÿÿÿÿ          � ªª    E  8 	  @  
-
-ÿºº $    	† 
-  	  
-  
-       à£ \   \   €  ÿÿÿÿÿÿ          � ªª    E  8 	  @  
-
-ÿºº $    	† 
-  	  
-  
-       7. d   d   €  ÿÿÿÿÿÿ            ªª    E  @ 
-  @  
-
-ÿºº ,   $ 
-†  
-      
-  
-       ³
- \   \   €  ÿÿÿÿÿÿ            ªª    E  8 
-  @  
-
-ÿºº $    
-† 
-  
-  
-  
-       b \   \   €  ÿÿÿÿÿÿ            ªª    E  8 
-  @  
-
-ÿºº $    
-† 
-  
-  
-  
-       K“ |   |   €  ÿÿÿÿÿÿ          ° ªª    E  X   @  
-
-ÿºº D   < ç 
-ÿ     
-
-†  
-      
-  
-       -È \   \   €  ÿÿÿÿÿÿ          ° ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       ^Ã \   \   €  ÿÿÿÿÿÿ          ° ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       L d   d   €  ÿÿÿÿÿÿ          À ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       .l  d   d   €  ÿÿÿÿÿÿ          Ð ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       ðƒ \   \   €  ÿÿÿÿÿÿ          À ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       Ÿ� \   \   €  ÿÿÿÿÿÿ          À ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       ÐE \   \   €  ÿÿÿÿÿÿ          à ªª    E  8   @  
-
-ÿºº $    ç 
-ÿ     
-
-       þ \   \   €  ÿÿÿÿÿÿ          Ð ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       Å¿ d   d   €  ÿÿÿÿÿÿ          ð ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       Ûÿ \   \   €  ÿÿÿÿÿÿ          Ð ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       í \   \   €  ÿÿÿÿÿÿ          à ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       bÍ \   \   €  ÿÿÿÿÿÿ          à ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       r¤ d   d   €  ÿÿÿÿÿÿ           ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       C \   \   €  ÿÿÿÿÿÿ          ð ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       |e \   \   €  ÿÿÿÿÿÿ          ð ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       #S |   |   €  ÿÿÿÿÿÿ          ªª    E  X   @  
-
-ÿºº D   < ç 
-ÿ     
-
-†  
-      
-  
-        pg d   d   €  ÿÿÿÿÿÿ           ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-        +€ \   \   €  ÿÿÿÿÿÿ           ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-        X� \   \   €  ÿÿÿÿÿÿ           ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    "   *  d   d   €  ÿÿÿÿÿÿ          0ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-    "   ¢â  \   \   €  ÿÿÿÿÿÿ          ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    "   Ü \   \   €  ÿÿÿÿÿÿ          ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    #   Š¿ \   \   €  ÿÿÿÿÿÿ          @ªª    E  8   @  
-
-ÿºº $    ç 
-ÿ     
-
-    $   „m d   d   €  ÿÿÿÿÿÿ          Pªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-    $   PV \   \   €  ÿÿÿÿÿÿ           ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    $   0� \   \   €  ÿÿÿÿÿÿ           ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    &   Ú  d   d   €  ÿÿÿÿÿÿ          `ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-    &   ÐÉ \   \   €  ÿÿÿÿÿÿ          0ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    &   †¥ \   \   €  ÿÿÿÿÿÿ          0ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    (     \   \   €  ÿÿÿÿÿÿ          @ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    (   c� \   \   €  ÿÿÿÿÿÿ          @ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    (   +‚ |   |   €  ÿÿÿÿÿÿ          pªª    E  X   @  
-
-ÿºº D   < ç 
-ÿ     
-
-†  
-      
-  
-    *   ®Ã d   d   €  ÿÿÿÿÿÿ          €ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-    *   ,° \   \   €  ÿÿÿÿÿÿ          Pªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    *   Î \   \   €  ÿÿÿÿÿÿ          Pªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    ,   ´Ã \   \   €  ÿÿÿÿÿÿ          `ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    ,   �Ë d   d   €  ÿÿÿÿÿÿ          �ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-    ,   Å¢ \   \   €  ÿÿÿÿÿÿ          `ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    -   = \   \   €  ÿÿÿÿÿÿ           ªª    E  8   @  
-
-ÿºº $    ç 
-ÿ     
-
-    .   A  d   d   €  ÿÿÿÿÿÿ          °ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-    .   èè \   \   €  ÿÿÿÿÿÿ          pªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    .   Ÿ] \   \   €  ÿÿÿÿÿÿ          pªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    0    o d   d   €  ÿÿÿÿÿÿ          Àªª    E  @   @  
-
-ÿºº ,   $ †  
-       
-  
-    0   v \   \   €  ÿÿÿÿÿÿ          €ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    0   •— \   \   €  ÿÿÿÿÿÿ          €ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    2   x  @   @   €  ÿÿÿÿÿÿ          �ªª           
-ÿÿÿÿÿÿ
-    2   ª  @   @   €:               Ðªª           
-     
-    2   ¦        Ô€           2   Ä  x   x   €:                ªª    E  T    @  
-
-                                                                   2   Î        Ô€           2   L-  @   @   €  ÿÿÿÿÿÿ          àªª           
-ÿÿÿÿÿÿ
-    2    3  @   @   €:               °ªª           
-     
-    2   
-3        Ô€           2   $6  x   x   €:               ðªª    E  T    @  
-
-                                                                    2   ß;        Ô€           2   > |   |   €  ÿÿÿÿÿÿ           ªª    E  X   @  
-
-ÿºº D   < ç 
-ÿ  !   
-
-†  
-  "    
-  
-    2   �2 \   \   €  ÿÿÿÿÿÿ          �ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    2   {Ã \   \   €  ÿÿÿÿÿÿ          Àªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    3   €  x   x   €:               Ðªª    E  T   @  
-
-                                                                  3   Š        Ô€           3   ì  x   x   €:               ªª    E  T   @  
-
-                                                                   3   ¨        Ô€           4   €  x   x   €:               àªª    E  T   @  
-
-                                                                  4   Š        Ô€           4   ì  x   x   €:                ªª    E  T   @  
-
-                                                                   4   ¨        Ô€           4   Q \   \   €  ÿÿÿÿÿÿ           ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    4   ÿ< \   \   €  ÿÿÿÿÿÿ          ðªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    4   5 d   d   €  ÿÿÿÿÿÿ          0ªª    E  @   @  
-
-ÿºº ,   $ †  
-  #    
-  
-    5   €  x   x   €:                ªª    E  T   @  
-
-                                                                  5   Š        Ô€           5   ì  x   x   €:               @ªª    E  T   @  
-
-                                                                   5   ¨        Ô€           6   €  x   x   €:               ªª    E  T   @  
-
-                                                                  6   Š        Ô€           6   ì  x   x   €:               Pªª    E  T   @  
-
-                                                                   6   ¨        Ô€           6   ùc \   \   €  ÿÿÿÿÿÿ          °ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    6   ²] \   \   €  ÿÿÿÿÿÿ           ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    6   l3 d   d   €  ÿÿÿÿÿÿ          `ªª    E  @   @  
-
-ÿºº ,   $ †  
-  $    
-  
-    7   €  x   x   €:               0ªª    E  T   @  
-
-                                                                  7   Š        Ô€           7   ì  x   x   €:               pªª    E  T   @  
-
-                                                                   7   ¨        Ô€           7   k± \   \   €  ÿÿÿÿÿÿ          €ªª    E  8    @  
-
-ÿºº $     ç 
-ÿ  %   
-
-    8   €  x   x   €:               @ªª    E  T   @  
-
-                                                                  8   Š        Ô€           8   ì  x   x   €:               �ªª    E  T   @  
-
-                                                                   8   ¨        Ô€           8   T \   \   €  ÿÿÿÿÿÿ          Àªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    8   & d   d   €  ÿÿÿÿÿÿ           ªª    E  @ !  @  
-
-ÿºº ,   $ !†  
-  &    
-  
-    8   Þ¢ \   \   €  ÿÿÿÿÿÿ          Pªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    9   €  x   x   €:               `ªª    E  T   @  
-
-                                                                  9   Š        Ô€           9   ì  x   x   €:               °ªª    E  T   @  
-
-                                                                   9   ¨        Ô€           :   €  x   x   €:               pªª    E  T   @  
-
-                                                                  :   Š        Ô€           :   ì  x   x   €:               Àªª    E  T   @  
-
-                                                                   :   ¨        Ô€           :   —W d   d   €  ÿÿÿÿÿÿ          Ðªª    E  @ "  @  
-
-ÿºº ,   $ "†  
-  '    
-  
-    :   ã· \   \   €  ÿÿÿÿÿÿ          Ðªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    :   Ð‰ \   \   €  ÿÿÿÿÿÿ          €ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    ;   €  x   x   €:               �ªª    E  T 	  @  
-
-      	                                                            ;   Š        Ô€           ;   ì  x   x   €:               àªª    E  T 	  @  
-
-       	                                                            ;   ¨        Ô€           <   €  x   x   €:                ªª    E  T 
-  @  
-
-      
-                                                            <   Š        Ô€           <   ì  x   x   €:               ðªª    E  T 
-  @  
-
-       
-                                                            <   ¨        Ô€           <   %‘  \   \   €  ÿÿÿÿÿÿ          àªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    <   %… |   |   €  ÿÿÿÿÿÿ           ªª    E  X #  @  
-
-ÿºº D   < #ç 
-ÿ  (   
-
-†  
-  )    
-  
-    <   ƒ' \   \   €  ÿÿÿÿÿÿ          °ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    =   €  x   x   €:               Àªª    E  T   @  
-
-                                                                  =   Š        Ô€           =   ì  x   x   €:               ªª    E  T   @  
-
-                                                                   =   ¨        Ô€           >   €  x   x   €:               Ðªª    E  T   @  
-
-                                                                  >   Š        Ô€           >   ì  x   x   €:                ªª    E  T   @  
-
-                                                                   >   ¨        Ô€           >   ‘þ d   d   €  ÿÿÿÿÿÿ          0ªª    E  @ $  @  
-
-ÿºº ,   $ $†  
-  *    
-  
-    >   æ` \   \   €  ÿÿÿÿÿÿ          àªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    >   6– \   \   €  ÿÿÿÿÿÿ          ðªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    ?   €  x   x   €:               ðªª    E  T   @  
-
-                                                                  ?   Š        Ô€           ?   ì  x   x   €:               @ªª    E  T   @  
-
-                                                                   ?   ¨        Ô€           @   €  x   x   €:                ªª    E  T   @  
-
-                                                                  @   Š        Ô€           @   ì  x   x   €:               Pªª    E  T   @  
-
-                                                                   @   ¨        Ô€           @   .Æ \   \   €  ÿÿÿÿÿÿ           ªª    E  8    @  
-
-ÿºº $     † 
-     
-  
-    @   xé d   d   €  ÿÿÿÿÿÿ          `ªª    E  @ %  @  
-
-ÿºº ,   $ %†  
-  +    
-  
-    @   C \   \   €  ÿÿÿÿÿÿ          ªª    E  8    @  
-
-ÿºº $     † 
-     
-  
-    A   €  x   x   €:                ªª    E  T   @  
-
-                                                                  A   Š        Ô€           A   ì  x   x   €:               pªª    E  T   @  
-
-                                                                   A   ¨        Ô€           A   0_ \   \   €  ÿÿÿÿÿÿ          €ªª    E  8 &  @  
-
-ÿºº $    &ç 
-ÿ  ,   
-
-    B   €  x   x   €:               0ªª    E  T   @  
-
-                                                                  B   Š        Ô€           B   ì  x   x   €:               �ªª    E  T   @  
-
-                                                                   B   ¨        Ô€           B   Á  \   \   €  ÿÿÿÿÿÿ          ªª    E  8 !  @  
-
-ÿºº $    !† 
-  !  
-  
-    B   Æ \   \   €  ÿÿÿÿÿÿ          @ªª    E  8 !  @  
-
-ÿºº $    !† 
-  !  
-  
-    B   ¥Ì d   d   €  ÿÿÿÿÿÿ           ªª    E  @ '  @  
-
-ÿºº ,   $ '†  
-  -    
-  
-    C   €  x   x   €:               Pªª    E  T   @  
-
-                                                                  C   Š        Ô€           C   ì  x   x   €:               °ªª    E  T   @  
-
-                                                                   C   ¨        Ô€           D   €  x   x   €:               `ªª    E  T   @  
-
-                                                                  D   Š        Ô€           D   ì  x   x   €:               Àªª    E  T   @  
-
-                                                                   D   ¨        Ô€           D   ¢Æ  \   \   €  ÿÿÿÿÿÿ           ªª    E  8 "  @  
-
-ÿºº $    "† 
-  "  
-  
-    D   n d   d   €  ÿÿÿÿÿÿ          Ðªª    E  @ (  @  
-
-ÿºº ,   $ (†  
-  .    
-  
-    D   Wþ \   \   €  ÿÿÿÿÿÿ          pªª    E  8 "  @  
-
-ÿºº $    "† 
-  "  
-  
-    E   €  x   x   €:               €ªª    E  T   @  
-
-                                                                  E   Š        Ô€           E   ì  x   x   €:               àªª    E  T   @  
-
-                                                                   E   ¨        Ô€           F   €  x   x   €:               �ªª    E  T   @  
-
-                                                                  F   Š        Ô€           F   ì  x   x   €:               ðªª    E  T   @  
-
-                                                                   F   ¨        Ô€           F   ž- \   \   €  ÿÿÿÿÿÿ           ªª    E  8 #  @  
-
-ÿºº $    #† 
-  #  
-  
-    F   æê \   \   €  ÿÿÿÿÿÿ          0ªª    E  8 #  @  
-
-ÿºº $    #† 
-  #  
-  
-    F   Íd |   |   €  ÿÿÿÿÿÿ           ªª    E  X )  @  
-
-ÿºº D   < )ç 
-ÿ  /   
-
-†  
-  0    
-  
-    G   €  x   x   €:               °ªª    E  T   @  
-
-                                                                  G   Š        Ô€           G   ì  x   x   €:               ªª    E  T   @  
-
-                                                                   G   ¨        Ô€           H   €  x   x   €:               Àªª    E  T   @  
-
-                                                                  H   Š        Ô€           H   ì  x   x   €:                ªª    E  T   @  
-
-                                                                   H   ¨        Ô€           H   5 \   \   €  ÿÿÿÿÿÿ          @ªª    E  8 $  @  
-
-ÿºº $    $† 
-  $  
-  
-    H   �¡ d   d   €  ÿÿÿÿÿÿ          0ªª    E  @ *  @  
-
-ÿºº ,   $ *†  
-  1    
-  
-    H   òÖ \   \   €  ÿÿÿÿÿÿ          Ðªª    E  8 $  @  
-
-ÿºº $    $† 
-  $  
-  
-    I   €  x   x   €:               àªª    E  T   @  
-
-                                                                  I   Š        Ô€           I   ì  x   x   €:               @ªª    E  T   @  
-
-                                                                   I   ¨        Ô€           J   €  x   x   €:               ðªª    E  T   @  
-
-                                                                  J   Š        Ô€           J   ì  x   x   €:               Pªª    E  T   @  
-
-                                                                   J   ¨        Ô€           J   \ d   d   €  ÿÿÿÿÿÿ          `ªª    E  @ +  @  
-
-ÿºº ,   $ +†  
-  2    
-  
-    J   ç \   \   €  ÿÿÿÿÿÿ           ªª    E  8 %  @  
-
-ÿºº $    %† 
-  %  
-  
-    J   ú_ \   \   €  ÿÿÿÿÿÿ          Pªª    E  8 %  @  
-
-ÿºº $    %† 
-  %  
-  
-    K   €  x   x   €:               ªª    E  T   @  
-
-                                                                  K   Š        Ô€           K   ì  x   x   €:               pªª    E  T   @  
-
-                                                                   K   ¨        Ô€           K   @å \   \   €  ÿÿÿÿÿÿ          €ªª    E  8 ,  @  
-
-ÿºº $    ,ç 
-ÿ  3   
-
-    L   €  x   x   €:                ªª    E  T   @  
-
-                                                                  L   Š        Ô€           L   ì  x   x   €:               �ªª    E  T   @  
-
-                                                                   L   ¨        Ô€           L   ;Ð \   \   €  ÿÿÿÿÿÿ          `ªª    E  8 &  @  
-
-ÿºº $    &† 
-  &  
-  
-    L   ‚. \   \   €  ÿÿÿÿÿÿ          0ªª    E  8 &  @  
-
-ÿºº $    &† 
-  &  
-  
-    L   ¦ d   d   €  ÿÿÿÿÿÿ           ªª    E  @ -  @  
-
-ÿºº ,   $ -†  
-  4    
-  
-    M   €  x   x   €:               @ªª    E  T   @  
-
-                                                                  M   Š        Ô€           M   ì  x   x   €:               °ªª    E  T   @  
-
-                                                                   M   ¨        Ô€           N   €  x   x   €:               Pªª    E  T   @  
-
-                                                                  N   Š        Ô€           N   ì  x   x   €:               Àªª    E  T   @  
-
-                                                                   N   ¨        Ô€           N    ’ d   d   €  ÿÿÿÿÿÿ          Ðªª    E  @ .  @  
-
-ÿºº ,   $ .†  
-  5    
-  
-    N   â \   \   €  ÿÿÿÿÿÿ          pªª    E  8 '  @  
-
-ÿºº $    '† 
-  '  
-  
-    N   - \   \   €  ÿÿÿÿÿÿ          `ªª    E  8 '  @  
-
-ÿºº $    '† 
-  '  
-  
-    O   €  x   x   €:               pªª    E  T   @  
-
-                                                                  O   Š        Ô€           O   ì  x   x   €:               àªª    E  T   @  
-
-                                                                   O   ¨        Ô€           P   €  x   x   €:               €ªª    E  T   @  
-
-                                                                  P   Š        Ô€           P   ì  x   x   €:               ðªª    E  T   @  
-
-                                                                   P   ¨        Ô€           P   øð d   d   €  ÿÿÿÿÿÿ          �ªª    E  @ (  @  
-
-ÿºº ,   $ (†  
-  (  
-  
-  
-    P   Úû d   d   €  ÿÿÿÿÿÿ          €ªª    E  @ (  @  
-
-ÿºº ,   $ (†  
-  (  
-  
-  
-    P   {I |   |   €  ÿÿÿÿÿÿ           ªª    E  X /  @  
-
-ÿºº D   < /ç 
-ÿ  6   
-
-†  
-  7    
-  
-    Q   €  x   x   €:                ªª    E  T   @  
-
-                                                                  Q   Š        Ô€           Q   ì  x   x   €:               ªª    E  T   @  
-
-                                                                   Q   ¨        Ô€           R   €  x   x   €:               °ªª    E  T    @  
-
-                                                                   R   Š        Ô€           R   ì  x   x   €:                ªª    E  T    @  
-
-                                                                    R   ¨        Ô€           R   µC d   d   €  ÿÿÿÿÿÿ          0ªª    E  @ 0  @  
-
-ÿºº ,   $ 0†  
-  8    
-  
-    R   x„ d   d   €  ÿÿÿÿÿÿ          �ªª    E  @ )  @  
-
-ÿºº ,   $ )†  
-  )    
-  
-    R   ¼Ž d   d   €  ÿÿÿÿÿÿ          Àªª    E  @ )  @  
-
-ÿºº ,   $ )†  
-  )    
-  
-    S   €  x   x   €:               Ðªª    E  T !  @  
-
-      !                                                            S   Š        Ô€           S   ì  x   x   €:               @ªª    E  T !  @  
-
-       !                                                            S   ¨        Ô€           T   €  x   x   €:               àªª    E  T "  @  
-
-      "                                                            T   Š        Ô€           T   ì  x   x   €:               Pªª    E  T "  @  
-
-       "                                                            T   ¨        Ô€           T   ¬« d   d   €  ÿÿÿÿÿÿ          ðªª    E  @ *  @  
-
-ÿºº ,   $ *†  
-  *    
-  
-    T   Ý9 d   d   €  ÿÿÿÿÿÿ           ªª    E  @ *  @  
-
-ÿºº ,   $ *†  
-  *    
-  
-    T    d   d   €  ÿÿÿÿÿÿ          `ªª    E  @ 1  @  
-
-ÿºº ,   $ 1†  
-  9    
-  
-    U   €  x   x   €:                ªª    E  T #  @  
-
-      #                                                            U   Š        Ô€           U   ì  x   x   €:               pªª    E  T #  @  
-
-       #                                                            U   ¨        Ô€           U   Ž \   \   €  ÿÿÿÿÿÿ          €ªª    E  8 2  @  
-
-ÿºº $    2ç 
-ÿ  :   
-
-    V   €  x   x   €:               ªª    E  T $  @  
-
-      $                                                            V   Š        Ô€           V   ì  x   x   €:               �ªª    E  T $  @  
-
-       $                                                            V   ¨        Ô€           V   Qê d   d   €  ÿÿÿÿÿÿ           ªª    E  @ 3  @  
-
-ÿºº ,   $ 3†  
-  ;    
-  
-    V   GÑ d   d   €  ÿÿÿÿÿÿ           ªª    E  @ +  @  
-
-ÿºº ,   $ +†  
-  +    
-  
-    V   M d   d   €  ÿÿÿÿÿÿ          °ªª    E  @ +  @  
-
-ÿºº ,   $ +†  
-  +    
-  
-    W   €  x   x   €:               0ªª    E  T %  @  
-
-      %                                                            W   Š        Ô€           W   ì  x   x   €:               °ªª    E  T %  @  
-
-       %                                                            W   ¨        Ô€           X   €  x   x   €:               @ªª    E  T &  @  
-
-      &                                                            X   Š        Ô€           X   ì  x   x   €:               Àªª    E  T &  @  
-
-       &                                                            X   ¨        Ô€           X   ‚Â d   d   €  ÿÿÿÿÿÿ          Àªª    E  @ ,  @  
-
-ÿºº ,   $ ,†  
-  ,    
-  
-    X   ³" d   d   €  ÿÿÿÿÿÿ          Ðªª    E  @ 4  @  
-
-ÿºº ,   $ 4†  
-  <    
-  
-    X   6ˆ d   d   €  ÿÿÿÿÿÿ          Pªª    E  @ ,  @  
-
-ÿºº ,   $ ,†  
-  ,    
-  
-    Y   €  x   x   €:               `ªª    E  T '  @  
-
-      '                                                            Y   Š        Ô€           Y   ì  x   x   €:               àªª    E  T '  @  
-
-       '                                                            Y   ¨        Ô€           Z   €  x   x   €:               pªª    E  T (  @  
-
-      (                                                            Z   Š        Ô€           Z   ì  x   x   €:               ðªª    E  T (  @  
-
-       (                                                            Z   ¨        Ô€           Z   ‡  d   d   €  ÿÿÿÿÿÿ           ªª    E  @ 5  @  
-
-ÿºº ,   $ 5†  
-  =    
-  
-    Z   –E d   d   €  ÿÿÿÿÿÿ          Ðªª    E  @ -  @  
-
-ÿºº ,   $ -†  
-  -    
-  
-    Z   jí d   d   €  ÿÿÿÿÿÿ          €ªª    E  @ -  @  
-
-ÿºº ,   $ -†  
-  -    
-  
-    [   €  x   x   €:               �ªª    E  T )  @  
-
-      )                                                            [   Š        Ô€           [   ì  x   x   €:               ªª    E  T )  @  
-
-       )                                                            [   ¨        Ô€           \   €  x   x   €:                ªª    E  T *  @  
-
-      *                                                            \   Š        Ô€           \   ì  x   x   €:                ªª    E  T *  @  
-
-       *                                                            \   ¨        Ô€           \   ‡Q  d   d   €  ÿÿÿÿÿÿ          àªª    E  @ .  @  
-
-ÿºº ,   $ .†  
-  .    
-  
-    \   ø¡  d   d   €  ÿÿÿÿÿÿ          °ªª    E  @ .  @  
-
-ÿºº ,   $ .†  
-  .    
-  
-    \   R d   d   €  ÿÿÿÿÿÿ          0ªª    E  @ 6  @  
-
-ÿºº ,   $ 6†  
-  >    
-  
-    ]   €  x   x   €:               Àªª    E  T +  @  
-
-      +                                                            ]   Š        Ô€           ]   ì  x   x   €:               @ªª    E  T +  @  
-
-       +                                                            ]   ¨        Ô€           ^   €  x   x   €:               Ðªª    E  T ,  @  
-
-      ,                                                            ^   Š        Ô€           ^   ì  x   x   €:               Pªª    E  T ,  @  
-
-       ,                                                            ^   ¨        Ô€           ^   Åß  d   d   €  ÿÿÿÿÿÿ          ðªª    E  @ /  @  
-
-ÿºº ,   $ /†  
-  /    
-  
-    ^   ÿI d   d   €  ÿÿÿÿÿÿ          `ªª    E  @ 7  @  
-
-ÿºº ,   $ 7†  
-  ?    
-  
-    ^   �� d   d   €  ÿÿÿÿÿÿ          àªª    E  @ /  @  
-
-ÿºº ,   $ /†  
-  /    
-  
-    _   €  x   x   €:               ðªª    E  T -  @  
-
-      -                                                            _   Š        Ô€           _   ì  x   x   €:               pªª    E  T -  @  
-
-       -                                                            _   ¨        Ô€           `   €  x   x   €:                ªª    E  T .  @  
-
-      .                                                            `   Š        Ô€           `   ì  x   x   €:               €ªª    E  T .  @  
-
-       .                                                            `   ¨        Ô€           `   dÿ  d   d   €  ÿÿÿÿÿÿ          ªª    E  @ 0  @  
-
-ÿºº ,   $ 0†  
-  0    
-  
-    `   F3 d   d   €  ÿÿÿÿÿÿ          �ªª    E  @ 8  @  
-
-ÿºº ,   $ 8†  
-  @    
-  
-    `   ¡ù d   d   €  ÿÿÿÿÿÿ           ªª    E  @ 0  @  
-
-ÿºº ,   $ 0†  
-  0    
-  
-    a   €  x   x   €:                ªª    E  T /  @  
-
-      /                                                            a   Š        Ô€           a   ì  x   x   €:                ªª    E  T /  @  
-
-       /                                                            a   ¨        Ô€           b   €  x   x   €:               0ªª    E  T 0  @  
-
-      0                                                            b   Š        Ô€           b   ì  x   x   €:               °ªª    E  T 0  @  
-
-       0                                                            b   ¨        Ô€           b   ûá d   d   €  ÿÿÿÿÿÿ          ªª    E  @ 1  @  
-
-ÿºº ,   $ 1†  
-  1    
-  
-    b   p! d   d   €  ÿÿÿÿÿÿ          @ªª    E  @ 1  @  
-
-ÿºº ,   $ 1†  
-  1    
-  
-    b   T d   d   €  ÿÿÿÿÿÿ          Àªª    E  @ 9  @  
-
-ÿºº ,   $ 9†  
-  A    
-  
-    c   €  x   x   €:               Pªª    E  T 1  @  
-
-      1                                                            c   Š        Ô€           c   ì  x   x   €:               Ðªª    E  T 1  @  
-
-       1                                                            c   ¨        Ô€           d   €  x   x   €:               `ªª    E  T 2  @  
-
-      2                                                            d   Š        Ô€           d   ì  x   x   €:               àªª    E  T 2  @  
-
-       2                                                            d   ¨        Ô€           d   
-– d   d   €  ÿÿÿÿÿÿ          pªª    E  @ 2  @  
-
-ÿºº ,   $ 2†  
-  2    
-  
-    d   òv d   d   €  ÿÿÿÿÿÿ           ªª    E  @ 2  @  
-
-ÿºº ,   $ 2†  
-  2    
-  
-    d   Œ´ d   d   €  ÿÿÿÿÿÿ          ðªª    E  @ :  @  
-
-ÿºº ,   $ :†  
-  B    
-  
-    e   €  x   x   €:               €ªª    E  T 3  @  
-
-      3                                                            e   Š        Ô€           e   ì  x   x   €:                ªª    E  T 3  @  
-
-       3                                                            e   ¨        Ô€           f   €  x   x   €:               �ªª    E  T 4  @  
-
-      4                                                            f   Š        Ô€           f   ì  x   x   €:               ªª    E  T 4  @  
-
-       4                                                            f   ¨        Ô€           f   Ž* d   d   €  ÿÿÿÿÿÿ           ªª    E  @ 3  @  
-
-ÿºº ,   $ 3†  
-  3    
-  
-    f   ½þ d   d   €  ÿÿÿÿÿÿ          0ªª    E  @ 3  @  
-
-ÿºº ,   $ 3†  
-  3    
-  
-    f   ¦� d   d   €  ÿÿÿÿÿÿ           ªª    E  @ ;  @  
-
-ÿºº ,   $ ;†  
-  C    
-  
-    g   €  x   x   €:               °ªª    E  T 5  @  
-
-      5                                                            g   Š        Ô€           g   ì  x   x   €:               0ªª    E  T 5  @  
-
-       5                                                            g   ¨        Ô€           h   €  x   x   €:               Àªª    E  T 6  @  
-
-      6                                                            h   Š        Ô€           h   ì  x   x   €:               @ªª    E  T 6  @  
-
-       6                                                            h   ¨        Ô€           h   dë  d   d   €  ÿÿÿÿÿÿ          @ªª    E  @ 4  @  
-
-ÿºº ,   $ 4†  
-  4    
-  
-    h   ç× d   d   €  ÿÿÿÿÿÿ          Pªª    E  @ <  @  
-
-ÿºº ,   $ <†  
-  D    
-  
-    h   Ï	 d   d   €  ÿÿÿÿÿÿ          Ðªª    E  @ 4  @  
-
-ÿºº ,   $ 4†  
-  4    
-  
-    i   €  x   x   €:               àªª    E  T 7  @  
-
-      7                                                            i   Š        Ô€           i   ì  x   x   €:               `ªª    E  T 7  @  
-
-       7                                                            i   ¨        Ô€           j   €  x   x   €:               ðªª    E  T 8  @  
-
-      8                                                            j   Š        Ô€           j   ì  x   x   €:               pªª    E  T 8  @  
-
-       8                                                            j   ¨        Ô€           j   áô d   d   €  ÿÿÿÿÿÿ          Pªª    E  @ 5  @  
-
-ÿºº ,   $ 5†  
-  5    
-  
-    j   =j d   d   €  ÿÿÿÿÿÿ           ªª    E  @ 5  @  
-
-ÿºº ,   $ 5†  
-  5    
-  
-    j   èê d   d   €  ÿÿÿÿÿÿ          €ªª    E  @ =  @  
-
-ÿºº ,   $ =†  
-  E    
-  
-    k   €  x   x   €:               ªª    E  T 9  @  
-
-      9                                                            k   Š        Ô€           k   ì  x   x   €:               �ªª    E  T 9  @  
-
-       9                                                            k   ¨        Ô€           l   €  x   x   €:                ªª    E  T :  @  
-
-      :                                                            l   Š        Ô€           l   ì  x   x   €:                ªª    E  T :  @  
-
-       :                                                            l   ¨        Ô€           l   û d   d   €  ÿÿÿÿÿÿ          0ªª    E  @ 6  @  
-
-ÿºº ,   $ 6†  
-  6    
-  
-    l   
-ï d   d   €  ÿÿÿÿÿÿ          `ªª    E  @ 6  @  
-
-ÿºº ,   $ 6†  
-  6    
-  
-    l   Á0 d   d   €  ÿÿÿÿÿÿ          °ªª    E  @ >  @  
-
-ÿºº ,   $ >†  
-  F    
-  
-    m   €  x   x   €:               @ªª    E  T ;  @  
-
-      ;                                                            m   Š        Ô€           m   ì  x   x   €:               Àªª    E  T ;  @  
-
-       ;                                                            m   ¨        Ô€           n   �  x   x   €:               Pªª    E  T <  @  
-
-      <                                                            n   ‹        Ô€           n   í  x   x   €:               Ðªª    E  T <  @  
-
-       <                                                            n   ©        Ô€           n   ÙM  d   d   €  ÿÿÿÿÿÿ          àªª    E  @ ?  @  
-
-ÿºº ,   $ ?†  
-  G    
-  
-    n   X d   d   €  ÿÿÿÿÿÿ          `ªª    E  @ 7  @  
-
-ÿºº ,   $ 7†  
-  7    
-  
-    n   ØR d   d   €  ÿÿÿÿÿÿ          pªª    E  @ 7  @  
-
-ÿºº ,   $ 7†  
-  7    
-  
-    o   �  x   x   €:               pªª    E  T =  @  
-
-      =                                                            o   ‹        Ô€           o   í  x   x   €:               ðªª    E  T =  @  
-
-       =                                                            o   ©        Ô€           p   �  x   x   €:               €ªª    E  T >  @  
-
-      >                                                            p   ‹        Ô€           p   í  x   x   €:                ªª    E  T >  @  
-
-       >                                                            p   ©        Ô€           p   ®è  d   d   €  ÿÿÿÿÿÿ          �ªª    E  @ 8  @  
-
-ÿºº ,   $ 8†  
-  8    
-  
-    p   .ˆ d   d   €  ÿÿÿÿÿÿ          ªª    E  @ @  @  
-
-ÿºº ,   $ @†  
-  H    
-  
-    p   %Ä d   d   €  ÿÿÿÿÿÿ          €ªª    E  @ 8  @  
-
-ÿºº ,   $ 8†  
-  8    
-  
-    q   �  x   x   €:                ªª    E  T ?  @  
-
-      ?                                                            q   ‹        Ô€           q   í  x   x   €:                ªª    E  T ?  @  
-
-       ?                                                            q   ©        Ô€           r   �  x   x   €:               °ªª    E  T @  @  
-
-      @                                                            r   ‹        Ô€           r   í  x   x   €:               0ªª    E  T @  @  
-
-       @                                                            r   ©        Ô€           r   Dö d   d   €  ÿÿÿÿÿÿ          @ªª    E  @ A  @  
-
-ÿºº ,   $ A†  
-  I    
-  
-    r   ˆ d   d   €  ÿÿÿÿÿÿ          �ªª    E  @ 9  @  
-
-ÿºº ,   $ 9†  
-  9    
-  
-    r   Ù* d   d   €  ÿÿÿÿÿÿ          Àªª    E  @ 9  @  
-
-ÿºº ,   $ 9†  
-  9    
-  
-    s   �  x   x   €:               Ðªª    E  T A  @  
-
-      A                                                            s   ‹        Ô€           s   í  x   x   €:               Pªª    E  T A  @  
-
-       A                                                            s   ©        Ô€           t   �  x   x   €:               àªª    E  T B  @  
-
-      B                                                            t   ‹        Ô€           t   í  x   x   €:               `ªª    E  T B  @  
-
-       B                                                            t   ©        Ô€           t   æÄ d   d   €  ÿÿÿÿÿÿ          pªª    E  @ B  @  
-
-ÿºº ,   $ B†  
-  J    
-  
-    t   “á d   d   €  ÿÿÿÿÿÿ          ðªª    E  @ :  @  
-
-ÿºº ,   $ :†  
-  :    
-  
-    t   W d   d   €  ÿÿÿÿÿÿ           ªª    E  @ :  @  
-
-ÿºº ,   $ :†  
-  :    
-  
-    u   �  x   x   €:                ªª    E  T C  @  
-
-      C                                                            u   ‹        Ô€           u   í  x   x   €:               €ªª    E  T C  @  
-
-       C                                                            u   ©        Ô€           v   �  x   x   €:               ªª    E  T D  @  
-
-      D                                                            v   ‹        Ô€           v   í  x   x   €:               �ªª    E  T D  @  
-
-       D                                                            v   ©        Ô€           v   ×£ d   d   €  ÿÿÿÿÿÿ           ªª    E  @ ;  @  
-
-ÿºº ,   $ ;†  
-  ;    
-  
-    v   r¡ d   d   €  ÿÿÿÿÿÿ           ªª    E  @ C  @  
-
-ÿºº ,   $ C†  
-  K    
-  
-    v   -È d   d   €  ÿÿÿÿÿÿ          °ªª    E  @ ;  @  
-
-ÿºº ,   $ ;†  
-  ;    
-  
-    w   �  x   x   €:               0ªª    E  T E  @  
-
-      E                                                            w   ‹        Ô€           w   í  x   x   €:               °ªª    E  T E  @  
-
-       E                                                            w   ©        Ô€           x   �  x   x   €:               @ªª    E  T F  @  
-
-      F                                                            x   ‹        Ô€           x   í  x   x   €:               Àªª    E  T F  @  
-
-       F                                                            x   ©        Ô€           x   Ó^ d   d   €  ÿÿÿÿÿÿ          Àªª    E  @ <  @  
-
-ÿºº ,   $ <†  
-  <    
-  
-    x   3½ d   d   €  ÿÿÿÿÿÿ          Pªª    E  @ <  @  
-
-ÿºº ,   $ <†  
-  <    
-  
-    x   n* d   d   €  ÿÿÿÿÿÿ          Ðªª    E  @ D  @  
-
-ÿºº ,   $ D†  
-  L    
-  
-    y   �  x   x   €:               `ªª    E  T G  @  
-
-      G                                                            y   ‹        Ô€           y   í  x   x   €:               àªª    E  T G  @  
-
-       G                                                            y   ©        Ô€           z   �  x   x   €:               pªª    E  T H  @  
-
-      H                                                            z   ‹        Ô€           z   í  x   x   €:               ðªª    E  T H  @  
-
-       H                                                            z   ©        Ô€           z   * d   d   €  ÿÿÿÿÿÿ          Ðªª    E  @ =  @  
-
-ÿºº ,   $ =†  
-  =    
-  
-    z   çL d   d   €  ÿÿÿÿÿÿ           	ªª    E  @ E  @  
-
-ÿºº ,   $ E†  
-  M    
-  
-    |   0µ  d   d   €  ÿÿÿÿÿÿ          àªª    E  @ >  @  
-
-ÿºº ,   $ >†  
-  >    
-  
-    |   XŒ d   d   €  ÿÿÿÿÿÿ          	ªª    E  @ F  @  
-
-ÿºº ,   $ F†  
-  N    
-  
-    ~   @›  d   d   €  ÿÿÿÿÿÿ          ðªª    E  @ ?  @  
-
-ÿºº ,   $ ?†  
-  ?    
-  
-    ~   k> d   d   €  ÿÿÿÿÿÿ           	ªª    E  @ G  @  
-
-ÿºº ,   $ G†  
-  O    
-  
-       k  @   @   €:                ªª           
-     
-       Ò        Ô€              €>  @   @   €  ÿÿÿÿÿÿ          ªª           
-ÿÿÿÿÿÿ
-       ²>  @   @   €:               0	ªª           
-     
-       ­B        Ô€              cH  x   x   €:                ªª    E  T M  ?  
-
-      M                                                               mH        Ô€              ‹k  @   @   €  ÿÿÿÿÿÿ          @	ªª           
-ÿÿÿÿÿÿ
-       >q  @   @   €:               0ªª           
-     
-       Hq        Ô€              u  x   x   €:               P	ªª    E  T I  @  
-
-       M                                                               ½z        Ô€              ›—  @   @   €  ÿÿÿÿÿÿ          @ªª           
-ÿÿÿÿÿÿ
-       É›        Ô€              ß   x   x   €:               Pªª    E  T I  ?  
-
-       M                                                            €   »        Ô€           €   m
-  x   x   €:               `ªª    E  T N  ?  
-
-      N                                                            €   w
-        Ô€           €   Ù  x   x   €:               `	ªª    E  T J  @  
-
-       N                                                            €   ”        Ô€           €     x   x   €:               pªª    E  T J  ?  
-
-       N                                                            €   }¿ d   d   €  ÿÿÿÿÿÿ          €ªª    E  @ @  @  
-
-ÿºº ,   $ @†  
-  @    
-  
-    €   ¡8 d   d   €  ÿÿÿÿÿÿ          p	ªª    E  @ H  @  
-
-ÿºº ,   $ H†  
-  P  
-  
-  
-    �   »        Ô€           �   m
-  x   x   €:               �ªª    E  T O  ?  
-
-      O                                                            �   w
-        Ô€           �   Ù  x   x   €:               €	ªª    E  T K  @  
-
-       O                                                            �   ”        Ô€           �   "  x   x   €:                ªª    E  T K  ?  
-
-       O                                                            ‚   »        Ô€           ‚   m
-  x   x   €:               °ªª    E  T P  ?  
-
-      P                                                            ‚   w
-        Ô€           ‚   Ù  x   x   €:               �	ªª    E  T L  @  
-
-       P                                                            ‚   ”        Ô€           ‚   š  x   x   €:               Àªª    E  T L  ?  
-
-       P                                                            ‚   Rµ d   d   €  ÿÿÿÿÿÿ           	ªª    E  @ I  @  
-
-ÿºº ,   $ I†  
-  Q  
-  
-  
-    ‚   Âz |   |   €  ÿÿÿÿÿÿ          Ðªª    E  X A  @  
-
-ÿºº D   < Aç 
-ÿ  A   
-
-†  
-  B    
-  
-    ƒ   »        Ô€           ƒ   m
-  x   x   €:               àªª    E  T Q  ?  
-
-      Q                                                            ƒ   w
-        Ô€           ƒ   Ù  x   x   €:               °	ªª    E  T M  @  
-
-       Q                                                            ƒ   ”        Ô€           ƒ   ²  x   x   €:               ðªª    E  T M  ?  
-
-       Q                                                            „   »        Ô€           „   m
-  x   x   €:                ªª    E  T R  ?  
-
-      R                                                            „   w
-        Ô€           „   Ù  x   x   €:               À	ªª    E  T N  @  
-
-       R                                                            „   ”        Ô€           „   F  x   x   €:               ªª    E  T N  ?  
-
-       R                                                            „    d   d   €  ÿÿÿÿÿÿ          Ð	ªª    E  @ J  @  
-
-ÿºº ,   $ J†  
-  R  
-  
-  
-    „   ?| d   d   €  ÿÿÿÿÿÿ           ªª    E  @ B  @  
-
-ÿºº ,   $ B†  
-  C    
-  
-    …   »        Ô€           …   m
-  x   x   €:               0ªª    E  T S  ?  
-
-      S                                                            …   w
-        Ô€           …   Ù  x   x   €:               à	ªª    E  T O  @  
-
-       S                                                            …   ”        Ô€           …   ú  x   x   €:               @ªª    E  T O  ?  
-
-       S                                                            †   »        Ô€           †   m
-  x   x   €:               Pªª    E  T T  ?  
-
-      T                                                            †   w
-        Ô€           †   Ù  x   x   €:               ð	ªª    E  T P  @  
-
-       T                                                            †   ”        Ô€           †   6  x   x   €:               `ªª    E  T P  ?  
-
-       T                                                            †   ˆ¶ d   d   €  ÿÿÿÿÿÿ          pªª    E  @ C  @  
-
-ÿºº ,   $ C†  
-  D    
-  
-    †    \   \   €  ÿÿÿÿÿÿ           
-ªª    E  8 K  @  
-
-ÿºº $    K† 
-  S  
-  
-    ‡   »        Ô€           ‡   m
-  x   x   €:               €ªª    E  T U  ?  
-
-      U                                                            ‡   w
-        Ô€           ‡   Ù  x   x   €:               
-ªª    E  T Q  @  
-
-       U                                                            ‡   ”        Ô€           ‡   –  x   x   €:               �ªª    E  T Q  ?  
-
-       U                                                            ‡   qT  \   \   €  ÿÿÿÿÿÿ           ªª    E  8 D  @  
-
-ÿºº $    Dç 
-ÿ  E   
-
-    ˆ   »        Ô€           ˆ   í  \   \   €  ÿÿÿÿÿÿ           
-ªª    E  8 L  @  
-
-ÿºº $    L† 
-  T  
-  
-    ˆ   Ã  x   x   ˆ:               °ªª    E  T V  ?  
-
-      V                                                            ˆ   Í        Ô€           ˆ   /  x   x   €:               0
-ªª    E  T R  @  
-
-       V                                                            ˆ   ê        Ô€           ˆ   T  x   x   €:               Àªª    E  T R  ?  
-
-       V                                                            ˆ   oG d   d   €  ÿÿÿÿÿÿ          Ðªª    E  @ E  @  
-
-ÿºº ,   $ E†  
-  F    
-  
-    ‰   »        Ô€           ‰   m
-  x   x   €:               àªª    E  T W  ?  
-
-      W                                                            ‰   w
-        Ô€           ‰   Ù  x   x   €:               @
-ªª    E  T S  @  
-
-       W                                                            ‰   ”        Ô€           ‰   r  x   x   €:               ðªª    E  T S  ?  
-
-       W                                                            Š   »        Ô€           Š   m
-  x   x   €:                ªª    E  T X  ?  
-
-      X                                                            Š   w
-        Ô€           Š   Ù  x   x   €:               P
-ªª    E  T T  @  
-
-       X                                                            Š   ”        Ô€           Š   6  x   x   €:               ªª    E  T T  ?  
-
-       X                                                            Š   ã» d   d   €  ÿÿÿÿÿÿ           ªª    E  @ F  @  
-
-ÿºº ,   $ F†  
-  G    
-  
-    Š   ç÷ \   \   €  ÿÿÿÿÿÿ          `
-ªª    E  8 M  @  
-
-ÿºº $    M† 
-  U  
-  
-    ‹   »        Ô€           ‹   m
-  x   x   €:               0ªª    E  T Y  ?  
-
-      Y                                                            ‹   w
-        Ô€           ‹   Ù  x   x   €:               p
-ªª    E  T U  @  
-
-       Y                                                            ‹   ”        Ô€           ‹   ž  x   x   €:               @ªª    E  T U  ?  
-
-       Y                                                            Œ   »        Ô€           Œ   m
-  x   x   €:               Pªª    E  T Z  ?  
-
-      Z                                                            Œ   w
-        Ô€           Œ   Ù  x   x   €:               €
-ªª    E  T V  @  
-
-       Z                                                            Œ   ”        Ô€           Œ   J  x   x   €:               `ªª    E  T V  ?  
-
-       Z                                                            Œ   ßÉ  \   \   €  ÿÿÿÿÿÿ          �
-ªª    E  8 N  @  
-
-ÿºº $    N† 
-  V  
-  
-    Œ   hµ |   |   €  ÿÿÿÿÿÿ          pªª    E  X G  @  
-
-ÿºº D   < Gç 
-ÿ  H   
-
-†  
-  I    
-  
-    �   »        Ô€           �   m
-  x   x   €:               €ªª    E  T [  ?  
-
-      [                                                            �   w
-        Ô€           �   Ù  x   x   €:                
-ªª    E  T W  @  
-
-       [                                                            �   ”        Ô€           �   N  x   x   €:               �ªª    E  T W  ?  
-
-       [                                                            Ž   »        Ô€           Ž   m
-  x   x   €:                ªª    E  T \  ?  
-
-      \                                                            Ž   w
-        Ô€           Ž   Ù  x   x   €:               °
-ªª    E  T X  @  
-
-       \                                                            Ž   ”        Ô€           Ž   Š  x   x   €:               °ªª    E  T X  ?  
-
-       \                                                            Ž   <d  \   \   €  ÿÿÿÿÿÿ          À
-ªª    E  8 O  @  
-
-ÿºº $    O† 
-  W  
-  
-    Ž   ^7 d   d   €  ÿÿÿÿÿÿ          Àªª    E  @ H  @  
-
-ÿºº ,   $ H†  
-  J    
-  
-    �   »        Ô€           �   m
-  x   x   €:               Ðªª    E  T ]  ?  
-
-      ]                                                            �   w
-        Ô€           �   Ù  x   x   €:               Ð
-ªª    E  T Y  @  
-
-       ]                                                            �   ”        Ô€           �   &  x   x   €:               àªª    E  T Y  ?  
-
-       ]                                                            �   »        Ô€           �   m
-  x   x   €:               ðªª    E  T ^  ?  
-
-      ^                                                            �   w
-        Ô€           �   Ù  x   x   €:               à
-ªª    E  T Z  @  
-
-       ^                                                            �   •        Ô€           �   «  x   x   €:                ªª    E  T Z  ?  
-
-       ^                                                            �   I  d   d   €  ÿÿÿÿÿÿ          ªª    E  @ I  @  
-
-ÿºº ,   $ I†  
-  K    
-  
-    �    \   \   €  ÿÿÿÿÿÿ          ð
-ªª    E  8 P  @  
-
-ÿºº $    P† 
-  X  
-  
-    ‘   »        Ô€           ‘   m
-  x   x   €:                ªª    E  T _  ?  
-
-      _                                                            ‘   w
-        Ô€           ‘   Ù  x   x   €:                ªª    E  T [  @  
-
-       _                                                            ‘   •        Ô€           ‘   ‹  x   x   €:               0ªª    E  T [  ?  
-
-       _                                                            ‘   kÏ \   \   €  ÿÿÿÿÿÿ          @ªª    E  8 J  @  
-
-ÿºº $    Jç 
-ÿ  L   
-
-    ’   »        Ô€           ’   m
-  x   x   €:               Pªª    E  T `  ?  
-
-      `                                                            ’   w
-        Ô€           ’   Ù  x   x   €:               ªª    E  T \  @  
-
-       `                                                            ’   •        Ô€           ’     x   x   €:               `ªª    E  T \  ?  
-
-       `                                                            ’   ‡j \   \   €  ÿÿÿÿÿÿ           ªª    E  8 Q  @  
-
-ÿºº $    Q† 
-  Y  
-  
-    ’   -è d   d   €  ÿÿÿÿÿÿ          pªª    E  @ K  @  
-
-ÿºº ,   $ K†  
-  M    
-  
-    “   »        Ô€           “   m
-  x   x   €:               €ªª    E  T a  ?  
-
-      a                                                            “   w
-        Ô€           “   Ù  x   x   €:               0ªª    E  T ]  @  
-
-       a                                                            “   •        Ô€           “   c  x   x   €:               �ªª    E  T ]  ?  
-
-       a                                                            ”   »        Ô€           ”   m
-  x   x   €:                ªª    E  T b  ?  
-
-      b                                                            ”   w
-        Ô€           ”   Ù  x   x   €:               @ªª    E  T ^  @  
-
-       b                                                            ”   •        Ô€           ”   ÿ  x   x   €:               °ªª    E  T ^  ?  
-
-       b                                                            ”   b7 d   d   €  ÿÿÿÿÿÿ          Àªª    E  @ L  @  
-
-ÿºº ,   $ L†  
-  N    
-  
-    ”   Ÿ \   \   €  ÿÿÿÿÿÿ          Pªª    E  8 R  @  
-
-ÿºº $    R† 
-  Z  
-  
-    •   »        Ô€           •   m
-  x   x   €:               Ðªª    E  T c  ?  
-
-      c                                                            •   w
-        Ô€           •   Ù  x   x   €:               `ªª    E  T _  @  
-
-       c                                                            •   •        Ô€           •   7  x   x   €:               àªª    E  T _  ?  
-
-       c                                                            –   »        Ô€           –   m
-  x   x   €:               ðªª    E  T d  ?  
-
-      d                                                            –   w
-        Ô€           –   Ù  x   x   €:               pªª    E  T `  @  
-
-       d                                                            –   •        Ô€           –   Ÿ  x   x   €:                ªª    E  T `  ?  
-
-       d                                                            –   s' |   |   €  ÿÿÿÿÿÿ          ªª    E  X M  @  
-
-ÿºº D   < Mç 
-ÿ  O   
-
-†  
-  P    
-  
-    –   Ó  \   \   €  ÿÿÿÿÿÿ          €ªª    E  8 S  @  
-
-ÿºº $    S† 
-  [  
-  
-    —   »        Ô€           —   m
-  x   x   €:                ªª    E  T e  ?  
-
-      e                                                            —   w
-        Ô€           —   Ù  x   x   €:               �ªª    E  T a  @  
-
-       e                                                            —   •        Ô€           —   c  x   x   €:               0ªª    E  T a  ?  
-
-       e                                                            ˜   »        Ô€           ˜   m
-  x   x   €:               @ªª    E  T f  ?  
-
-      f                                                            ˜   w
-        Ô€           ˜   Ù  x   x   €:                ªª    E  T b  @  
-
-       f                                                            ˜   •        Ô€           ˜   #  x   x   €:               Pªª    E  T b  ?  
-
-       f                                                            ˜   í~  \   \   €  ÿÿÿÿÿÿ          °ªª    E  8 T  @  
-
-ÿºº $    T† 
-  \  
-  
-    ˜   ØÍ d   d   €  ÿÿÿÿÿÿ          `ªª    E  @ N  @  
-
-ÿºº ,   $ N†  
-  Q    
-  
-    ™   »        Ô€           ™   m
-  x   x   €:               pªª    E  T g  ?  
-
-      g                                                            ™   w
-        Ô€           ™   Ù  x   x   €:               Àªª    E  T c  @  
-
-       g                                                            ™   •        Ô€           ™   o  x   x   €:               €ªª    E  T c  ?  
-
-       g                                                            š   »        Ô€           š   m
-  x   x   €:               �ªª    E  T h  ?  
-
-      h                                                            š   w
-        Ô€           š   Ù  x   x   €:               Ðªª    E  T d  @  
-
-       h                                                            š   •        Ô€           š   Ÿ  x   x   €:                ªª    E  T d  ?  
-
-       h                                                            š   š<  d   d   €  ÿÿÿÿÿÿ          °ªª    E  @ O  @  
-
-ÿºº ,   $ O†  
-  R    
-  
-    š   Os \   \   €  ÿÿÿÿÿÿ          àªª    E  8 U  @  
-
-ÿºº $    U† 
-  ]  
-  
-    ›   »        Ô€           ›   m
-  x   x   €:               Àªª    E  T i  ?  
-
-      i                                                            ›   w
-        Ô€           ›   Ù  x   x   €:               ðªª    E  T e  @  
-
-       i                                                            ›   •        Ô€           ›   ×  x   x   €:               Ðªª    E  T e  ?  
-
-       i                                                            ›   Èú \   \   €  ÿÿÿÿÿÿ          àªª    E  8 P  @  
-
-ÿºº $    Pç 
-ÿ  S   
-
-    œ   »        Ô€           œ   m
-  x   x   €:               ðªª    E  T j  ?  
-
-      j                                                            œ   w
-        Ô€           œ   Ù  x   x   €:                ªª    E  T f  @  
-
-       j                                                            œ   •        Ô€           œ   7  x   x   €:                	ªª    E  T f  ?  
-
-       j                                                            œ    d   d   €  ÿÿÿÿÿÿ          	ªª    E  @ Q  @  
-
-ÿºº ,   $ Q†  
-  T    
-  
-    œ   Î+ \   \   €  ÿÿÿÿÿÿ          ªª    E  8 V  @  
-
-ÿºº $    V† 
-  ^  
-  
-    �   »        Ô€           �   m
-  x   x   €:                	ªª    E  T k  ?  
-
-      k                                                            �   w
-        Ô€           �   Ù  x   x   €:                ªª    E  T g  @  
-
-       k                                                            �   •        Ô€           �   ¿  x   x   €:               0	ªª    E  T g  ?  
-
-       k                                                            ž   »        Ô€           ž   m
-  x   x   €:               @	ªª    E  T l  ?  
-
-      l                                                            ž   w
-        Ô€           ž   Ù  x   x   €:               0ªª    E  T h  @  
-
-       l                                                            ž   •        Ô€           ž   ‡  x   x   €:               P	ªª    E  T h  ?  
-
-       l                                                            ž   4- \   \   €  ÿÿÿÿÿÿ          @ªª    E  8 W  @  
-
-ÿºº $    W† 
-  _  
-  
-    ž   ­z d   d   €  ÿÿÿÿÿÿ          `	ªª    E  @ R  @  
-
-ÿºº ,   $ R†  
-  U    
-  
-    Ÿ   »        Ô€           Ÿ   m
-  x   x   €:               p	ªª    E  T m  ?  
-
-      m                                                            Ÿ   w
-        Ô€           Ÿ   Ù  x   x   €:               Pªª    E  T i  @  
-
-       m                                                            Ÿ   •        Ô€           Ÿ   7  x   x   €:               €	ªª    E  T i  ?  
-
-       m                                                                »        Ô€               m
-  x   x   €:               �	ªª    E  T n  ?  
-
-      n                                                                w
-        Ô€               Ù  x   x   €:               `ªª    E  T j  @  
-
-       n                                                                •        Ô€               Ÿ  x   x   €:                	ªª    E  T j  ?  
-
-       n                                                                ÆE |   |   €  ÿÿÿÿÿÿ          °	ªª    E  X S  @  
-
-ÿºº D   < Sç 
-ÿ  V   
-
-†  
-  W    
-  
-        _á \   \   €  ÿÿÿÿÿÿ          pªª    E  8 X  @  
-
-ÿºº $    X† 
-  `  
-  
-    ¡   »        Ô€           ¡   m
-  x   x   €:               À	ªª    E  T o  ?  
-
-      o                                                            ¡   w
-        Ô€           ¡   Ù  x   x   €:               €ªª    E  T k  @  
-
-       o                                                            ¡   •        Ô€           ¡     x   x   €:               Ð	ªª    E  T k  ?  
-
-       o                                                            ¢   »        Ô€           ¢   m
-  x   x   €:               à	ªª    E  T p  ?  
-
-      p                                                            ¢   w
-        Ô€           ¢   Ù  x   x   €:               �ªª    E  T l  @  
-
-       p                                                            ¢   •        Ô€           ¢   c  x   x   €:               ð	ªª    E  T l  ?  
-
-       p                                                            ¢   ýE \   \   €  ÿÿÿÿÿÿ           ªª    E  8 Y  @  
-
-ÿºº $    Y† 
-  a  
-  
-    ¢   0˜ d   d   €  ÿÿÿÿÿÿ           
-ªª    E  @ T  @  
-
-ÿºº ,   $ T†  
-  X    
-  
-    £   »        Ô€           £   m
-  x   x   €:               
-ªª    E  T q  ?  
-
-      q                                                            £   w
-        Ô€           £   Ù  x   x   €:               °ªª    E  T m  @  
-
-       q                                                            £   •        Ô€           £   w  x   x   €:                
-ªª    E  T m  ?  
-
-       q                                                            ¤   »        Ô€           ¤   m
-  x   x   €:               0
-ªª    E  T r  ?  
-
-      r                                                            ¤   w
-        Ô€           ¤   Ù  x   x   €:               Àªª    E  T n  @  
-
-       r                                                            ¤   •        Ô€           ¤   ‡  x   x   €:               @
-ªª    E  T n  ?  
-
-       r                                                            ¤   ”õ d   d   €  ÿÿÿÿÿÿ          P
-ªª    E  @ U  @  
-
-ÿºº ,   $ U†  
-  Y    
-  
-    ¤   Mg \   \   €  ÿÿÿÿÿÿ          Ðªª    E  8 Z  @  
-
-ÿºº $    Z† 
-  b  
-  
-    ¥   »        Ô€           ¥   m
-  x   x   €:               `
-ªª    E  T s  ?  
-
-      s                                                            ¥   w
-        Ô€           ¥   Ù  x   x   €:               àªª    E  T o  @  
-
-       s                                                            ¥   •        Ô€           ¥   _  x   x   €:               p
-ªª    E  T o  ?  
-
-       s                                                            ¥   f× \   \   €  ÿÿÿÿÿÿ          €
-ªª    E  8 V  @  
-
-ÿºº $    Vç 
-ÿ  Z   
-
-    ¦   »        Ô€           ¦   m
-  x   x   €:               �
-ªª    E  T t  ?  
-
-      t                                                            ¦   w
-        Ô€           ¦   Ù  x   x   €:               ðªª    E  T p  @  
-
-       t                                                            ¦   •        Ô€           ¦   O  x   x   €:                
-ªª    E  T p  ?  
-
-       t                                                            ¦   Ÿ  \   \   €  ÿÿÿÿÿÿ           ªª    E  8 [  @  
-
-ÿºº $    [† 
-  c  
-  
-    ¦   H4 d   d   €  ÿÿÿÿÿÿ          °
-ªª    E  @ W  @  
-
-ÿºº ,   $ W†  
-  [    
-  
-    §   »        Ô€           §   m
-  x   x   €:               À
-ªª    E  T u  ?  
-
-      u                                                            §   w
-        Ô€           §   Ù  x   x   €:               ªª    E  T q  @  
-
-       u                                                            §   •        Ô€           §   ÿ  x   x   €:               Ð
-ªª    E  T q  ?  
-
-       u                                                            ¨   »        Ô€           ¨   m
-  x   x   €:               à
-ªª    E  T v  ?  
-
-      v                                                            ¨   w
-        Ô€           ¨   Ù  x   x   €:                ªª    E  T r  @  
-
-       v                                                            ¨   •        Ô€           ¨     x   x   €:               ð
-ªª    E  T r  ?  
-
-       v                                                            ¨   LŠ \   \   €  ÿÿÿÿÿÿ          0ªª    E  8 \  @  
-
-ÿºº $    \† 
-  d  
-  
-    ¨   ¨‚ d   d   €  ÿÿÿÿÿÿ           ªª    E  @ X  @  
-
-ÿºº ,   $ X†  
-  \    
-  
-    ©   »        Ô€           ©   m
-  x   x   €:               ªª    E  T w  ?  
-
-      w                                                            ©   w
-        Ô€           ©   Ù  x   x   €:               @ªª    E  T s  @  
-
-       w                                                            ©   •        Ô€           ©   G  x   x   €:                ªª    E  T s  ?  
-
-       w                                                            ª   »        Ô€           ª   m
-  x   x   €:               0ªª    E  T x  ?  
-
-      x                                                            ª   w
-        Ô€           ª   Ù  x   x   €:               Pªª    E  T t  @  
-
-       x                                                            ª   •        Ô€           ª   ×  x   x   €:               @ªª    E  T t  ?  
-
-       x                                                            ª   h=  |   |   €  ÿÿÿÿÿÿ          Pªª    E  X Y  @  
-
-ÿºº D   < Yç 
-ÿ  ]   
-
-†  
-  ^    
-  
-    ª   ÉÄ \   \   €  ÿÿÿÿÿÿ          `ªª    E  8 ]  @  
-
-ÿºº $    ]† 
-  e  
-  
-    «   »        Ô€           «   m
-  x   x   €:               `ªª    E  T y  ?  
-
-      y                                                            «   w
-        Ô€           «   Ù  x   x   €:               pªª    E  T u  @  
-
-       y                                                            «   •        Ô€           «   K  x   x   €:               pªª    E  T u  ?  
-
-       y                                                            ¬   »        Ô€           ¬   m
-  x   x   €:               €ªª    E  T z  ?  
-
-      z                                                            ¬   w
-        Ô€           ¬   Ù  x   x   €:               €ªª    E  T v  @  
-
-       z                                                            ¬   •        Ô€           ¬   ¿  x   x   €:               �ªª    E  T v  ?  
-
-       z                                                            ¬   UZ d   d   €  ÿÿÿÿÿÿ           ªª    E  @ Z  @  
-
-ÿºº ,   $ Z†  
-  _    
-  
-    ¬   �÷ \   \   €  ÿÿÿÿÿÿ          �ªª    E  8 ^  @  
-
-ÿºº $    ^† 
-  f  
-  
-    ­   »        Ô€           ­   m
-  x   x   €:               °ªª    E  T {  ?  
-
-      {                                                            ­   w
-        Ô€           ­   Ù  x   x   €:                ªª    E  T w  @  
-
-       {                                                            ­   •        Ô€           ­   Ã  x   x   €:               Àªª    E  T w  ?  
-
-       {                                                            ®   »        Ô€           ®   í  \   \   €  ÿÿÿÿÿÿ          °ªª    E  8 _  @  
-
-ÿºº $    _† 
-  g  
-  
-    ®   +  x   x   ˆ:               Ðªª    E  T |  ?  
-
-      |                                                            ®   5        Ô€           ®   —  x   x   €:               Àªª    E  T x  @  
-
-       |                                                            ®   S        Ô€           ®   ]   x   x   €:               àªª    E  T x  ?  
-
-       |                                                            ®   Y d   d   €  ÿÿÿÿÿÿ          ðªª    E  @ [  @  
-
-ÿºº ,   $ [†  
-  `    
-  
-    ¯   »        Ô€           ¯   m
-  x   x   €:                ªª    E  T }  ?  
-
-      }                                                            ¯   w
-        Ô€           ¯   Ù  x   x   €:               Ðªª    E  T y  @  
-
-       }                                                            ¯   •        Ô€           ¯   #  x   x   €:               ªª    E  T y  ?  
-
-       }                                                            ¯   ÷ä \   \   €  ÿÿÿÿÿÿ           ªª    E  8 \  @  
-
-ÿºº $    \ç 
-ÿ  a   
-
-    °   »        Ô€           °   m
-  x   x   €:               0ªª    E  T ~  ?  
-
-      ~                                                            °   w
-        Ô€           °   Ù  x   x   €:               àªª    E  T z  @  
-
-       ~                                                            °   •        Ô€           °   ƒ  x   x   €:               @ªª    E  T z  ?  
-
-       ~                                                            °   Ÿy d   d   €  ÿÿÿÿÿÿ          Pªª    E  @ ]  @  
-
-ÿºº ,   $ ]†  
-  b    
-  
-    °   TÁ \   \   €  ÿÿÿÿÿÿ          ðªª    E  8 `  @  
-
-ÿºº $    `† 
-  h  
-  
-    ±   »        Ô€           ±   m
-  x   x   €:               `ªª    E  T   ?  
-
-                                                                  ±   w
-        Ô€           ±   Ù  x   x   €:                ªª    E  T {  @  
-
-                                                                   ±   •        Ô€           ±   ‹  x   x   €:               pªª    E  T {  ?  
-
-                                                                   ²   »        Ô€           ²   m
-  x   x   €:               €ªª    E  T €  ?  
-
-      €                                                            ²   w
-        Ô€           ²   Ù  x   x   €:               ªª    E  T |  @  
-
-       €                                                            ²   •        Ô€           ²   G  x   x   €:               �ªª    E  T |  ?  
-
-       €                                                            ²   • d   d   €  ÿÿÿÿÿÿ           ªª    E  @ ^  @  
-
-ÿºº ,   $ ^†  
-  c    
-  
-    ²   /6 \   \   €  ÿÿÿÿÿÿ           ªª    E  8 a  @  
-
-ÿºº $    a† 
-  i  
-  
-    ³   »        Ô€           ³   m
-  x   x   €:               °ªª    E  T �  ?  
-
-      �                                                            ³   w
-        Ô€           ³   Ù  x   x   €:               0ªª    E  T }  @  
-
-       �                                                            ³   •        Ô€           ³   _  x   x   €:               Àªª    E  T }  ?  
-
-       �                                                            ´   »        Ô€           ´   m
-  x   x   €:               Ðªª    E  T ‚  ?  
-
-      ‚                                                            ´   w
-        Ô€           ´   Ù  x   x   €:               @ªª    E  T ~  @  
-
-       ‚                                                            ´   •        Ô€           ´   7  x   x   €:               àªª    E  T ~  ?  
-
-       ‚                                                            ´   � |   |   €  ÿÿÿÿÿÿ          ðªª    E  X _  @  
-
-ÿºº D   < _ç 
-ÿ  d   
-
-†  
-  e    
-  
-    ´   žÍ \   \   €  ÿÿÿÿÿÿ          Pªª    E  8 b  @  
-
-ÿºº $    b† 
-  j  
-  
-    µ   »        Ô€           µ   m
-  x   x   €:                ªª    E  T ƒ  ?  
-
-      ƒ                                                            µ   w
-        Ô€           µ   Ù  x   x   €:               `ªª    E  T   @  
-
-       ƒ                                                            µ   •        Ô€           µ   s  x   x   €:               ªª    E  T   ?  
-
-       ƒ                                                            ¶   »        Ô€           ¶   m
-  x   x   €:                ªª    E  T „  ?  
-
-      „                                                            ¶   w
-        Ô€           ¶   Ù  x   x   €:               pªª    E  T €  @  
-
-       „                                                            ¶   •        Ô€           ¶   —  x   x   €:               0ªª    E  T €  ?  
-
-       „                                                            ¶   îà \   \   €  ÿÿÿÿÿÿ          €ªª    E  8 c  @  
-
-ÿºº $    c† 
-  k  
-  
-    ¶   ÉŸ d   d   €  ÿÿÿÿÿÿ          @ªª    E  @ `  @  
-
-ÿºº ,   $ `†  
-  f    
-  
-    ·   »        Ô€           ·   m
-  x   x   €:               Pªª    E  T …  ?  
-
-      …                                                            ·   w
-        Ô€           ·   Ù  x   x   €:               �ªª    E  T �  @  
-
-       …                                                            ·   •        Ô€           ·   '  x   x   €:               `ªª    E  T �  ?  
-
-       …                                                            ¸   »        Ô€           ¸   m
-  x   x   €:               pªª    E  T †  ?  
-
-      †                                                            ¸   w
-        Ô€           ¸   Ù  x   x   €:                ªª    E  T ‚  @  
-
-       †                                                            ¸   •        Ô€           ¸   ›  x   x   €:               €ªª    E  T ‚  ?  
-
-       †                                                            ¸   å d   d   €  ÿÿÿÿÿÿ          �ªª    E  @ a  @  
-
-ÿºº ,   $ a†  
-  g    
-  
-    ¸   …Ð \   \   €  ÿÿÿÿÿÿ          °ªª    E  8 d  @  
-
-ÿºº $    d† 
-  l  
-  
-    ¹   »        Ô€           ¹   m
-  x   x   €:                ªª    E  T ‡  ?  
-
-      ‡                                                            ¹   w
-        Ô€           ¹   Ù  x   x   €:               Àªª    E  T ƒ  @  
-
-       ‡                                                            ¹   •        Ô€           ¹   K  x   x   €:               °ªª    E  T ƒ  ?  
-
-       ‡                                                            ¹   aQ \   \   €  ÿÿÿÿÿÿ          Àªª    E  8 b  @  
-
-ÿºº $    bç 
-ÿ  h   
-
-    º   »        Ô€           º   m
-  x   x   €:               Ðªª    E  T ˆ  ?  
-
-      ˆ                                                            º   w
-        Ô€           º   Ù  x   x   €:               Ðªª    E  T „  @  
-
-       ˆ                                                            º   •        Ô€           º   ³  x   x   €:               àªª    E  T „  ?  
-
-       ˆ                                                            º   `  d   d   €  ÿÿÿÿÿÿ          ðªª    E  @ c  @  
-
-ÿºº ,   $ c†  
-  i    
-  
-    º   !Ÿ \   \   €  ÿÿÿÿÿÿ          àªª    E  8 e  @  
-
-ÿºº $    e† 
-  m  
-  
-    »   »        Ô€           »   m
-  x   x   €:                ªª    E  T ‰  ?  
-
-      ‰                                                            »   w
-        Ô€           »   Ù  x   x   €:               ðªª    E  T …  @  
-
-       ‰                                                            »   •        Ô€           »     x   x   €:               ªª    E  T …  ?  
-
-       ‰                                                            ¼   »        Ô€           ¼   m
-  x   x   €:                ªª    E  T Š  ?  
-
-      Š                                                            ¼   w
-        Ô€           ¼   Ù  x   x   €:                ªª    E  T †  @  
-
-       Š                                                            ¼   •        Ô€           ¼   ;  x   x   €:               0ªª    E  T †  ?  
-
-       Š                                                            ¼   f \   \   €  ÿÿÿÿÿÿ          ªª    E  8 f  @  
-
-ÿºº $    f† 
-  n  
-  
-    ¼   ë% d   d   €  ÿÿÿÿÿÿ          @ªª    E  @ d  @  
-
-ÿºº ,   $ d†  
-  j    
-  
-    ½   »        Ô€           ½   m
-  x   x   €:               Pªª    E  T ‹  ?  
-
-      ‹                                                            ½   w
-        Ô€           ½   Ù  x   x   €:                ªª    E  T ‡  @  
-
-       ‹                                                            ½   •        Ô€           ½   7  x   x   €:               `ªª    E  T ‡  ?  
-
-       ‹                                                            ¾   »        Ô€           ¾   m
-  x   x   €:               pªª    E  T Œ  ?  
-
-      Œ                                                            ¾   w
-        Ô€           ¾   Ù  x   x   €:               0ªª    E  T ˆ  @  
-
-       Œ                                                            ¾   •        Ô€           ¾   #  x   x   €:               €ªª    E  T ˆ  ?  
-
-       Œ                                                            ¾   Àñ |   |   €  ÿÿÿÿÿÿ          �ªª    E  X e  @  
-
-ÿºº D   < eç 
-ÿ  k   
-
-†  
-  l    
-  
-    ¾   Ž§ \   \   €  ÿÿÿÿÿÿ          @ªª    E  8 g  @  
-
-ÿºº $    g† 
-  o  
-  
-    ¿   »        Ô€           ¿   m
-  x   x   €:                ªª    E  T �  ?  
-
-      �                                                            ¿   w
-        Ô€           ¿   Ù  x   x   €:               Pªª    E  T ‰  @  
-
-       �                                                            ¿   •        Ô€           ¿   ÿ  x   x   €:               °ªª    E  T ‰  ?  
-
-       �                                                            À   »        Ô€           À   m
-  x   x   €:               Àªª    E  T Ž  ?  
-
-      Ž                                                            À   w
-        Ô€           À   Ù  x   x   €:               `ªª    E  T Š  @  
-
-       Ž                                                            À   •        Ô€           À   ‹  x   x   €:               Ðªª    E  T Š  ?  
-
-       Ž                                                            À   ä? d   d   €  ÿÿÿÿÿÿ          àªª    E  @ f  @  
-
-ÿºº ,   $ f†  
-  m    
-  
-    À   €ð \   \   €  ÿÿÿÿÿÿ          pªª    E  8 h  @  
-
-ÿºº $    h† 
-  p  
-  
-    Á   »        Ô€           Á   m
-  x   x   €:               ðªª    E  T �  ?  
-
-      �                                                            Á   w
-        Ô€           Á   Ù  x   x   €:               €ªª    E  T ‹  @  
-
-       �                                                            Á   •        Ô€           Á   Ÿ  x   x   €:                ªª    E  T ‹  ?  
-
-       �                                                            Â   »        Ô€           Â   m
-  x   x   €:               ªª    E  T �  ?  
-
-      �                                                            Â   w
-        Ô€           Â   Ù  x   x   €:               �ªª    E  T Œ  @  
-
-       �                                                            Â   •        Ô€           Â   ³  x   x   €:                ªª    E  T Œ  ?  
-
-       �                                                            Â   ùÜ \   \   €  ÿÿÿÿÿÿ           ªª    E  8 i  @  
-
-ÿºº $    i† 
-  q  
-  
-    Â   á| d   d   €  ÿÿÿÿÿÿ          0ªª    E  @ g  @  
-
-ÿºº ,   $ g†  
-  n    
-  
-    Ã   »        Ô€           Ã   m
-  x   x   €:               @ªª    E  T ‘  ?  
-
-      ‘                                                            Ã   w
-        Ô€           Ã   Ù  x   x   €:               °ªª    E  T �  @  
-
-       ‘                                                            Ã   •        Ô€           Ã   ›  x   x   €:               Pªª    E  T �  ?  
-
-       ‘                                                            Ã   4‹ \   \   €  ÿÿÿÿÿÿ          `ªª    E  8 h  @  
-
-ÿºº $    hç 
-ÿ  o   
-
-    Ä   »        Ô€           Ä   m
-  x   x   €:               pªª    E  T ’  ?  
-
-      ’                                                            Ä   w
-        Ô€           Ä   Ù  x   x   €:               Àªª    E  T Ž  @  
-
-       ’                                                            Ä   •        Ô€           Ä   ç  x   x   €:               €ªª    E  T Ž  ?  
-
-       ’                                                            Ä   ÙN d   d   €  ÿÿÿÿÿÿ          �ªª    E  @ i  @  
-
-ÿºº ,   $ i†  
-  p    
-  
-    Ä   »ž \   \   €  ÿÿÿÿÿÿ          Ðªª    E  8 j  @  
-
-ÿºº $    j† 
-  r  
-  
-    Å   »        Ô€           Å   m
-  x   x   €:                ªª    E  T “  ?  
-
-      “                                                            Å   w
-        Ô€           Å   Ù  x   x   €:               àªª    E  T �  @  
-
-       “                                                            Å   •        Ô€           Å   K  x   x   €:               °ªª    E  T �  ?  
-
-       “                                                            Æ   »        Ô€           Æ   m
-  x   x   €:               Àªª    E  T ”  ?  
-
-      ”                                                            Æ   w
-        Ô€           Æ   Ù  x   x   €:               ðªª    E  T �  @  
-
-       ”                                                            Æ   •        Ô€           Æ   _  x   x   €:               Ðªª    E  T �  ?  
-
-       ”                                                            Æ   ¸õ \   \   €  ÿÿÿÿÿÿ           ªª    E  8 k  @  
-
-ÿºº $    k† 
-  s  
-  
-    Æ   $¼ d   d   €  ÿÿÿÿÿÿ          àªª    E  @ j  @  
-
-ÿºº ,   $ j†  
-  q    
-  
-    Ç   »        Ô€           Ç   m
-  x   x   €:               ðªª    E  T •  ?  
-
-      •                                                            Ç   w
-        Ô€           Ç   Ù  x   x   €:               ªª    E  T ‘  @  
-
-       •                                                            Ç   •        Ô€           Ç   ›  x   x   €:                ªª    E  T ‘  ?  
-
-       •                                                            
\ No newline at end of file
diff -Naur ns-3.23/src/olsr/test/bug780-2-0.pcap ns-3.24/src/olsr/test/bug780-2-0.pcap
--- ns-3.23/src/olsr/test/bug780-2-0.pcap	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/olsr/test/bug780-2-0.pcap	1969-12-31 16:00:00.000000000 -0800
@@ -1,2453 +0,0 @@
-ÔÃ²¡          ÿÿ  i       yv T   T   €  ÿÿÿÿÿÿ            ªª    E  0    @  
-
-ÿºº      † 
-             eW T   T   €  ÿÿÿÿÿÿ            ªª    E  0    @  
-
-ÿºº      † 
-            • d   d   €  ÿÿÿÿÿÿ           ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       # \   \   €  ÿÿÿÿÿÿ           ªª    E  8   @  
-
-ÿºº $    † 
-      
-       �B d   d   €  ÿÿÿÿÿÿ            ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       …m \   \   €  ÿÿÿÿÿÿ            ªª    E  8   @  
-
-ÿºº $    † 
-      
-       ôŠ d   d   €  ÿÿÿÿÿÿ          0 ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       V- \   \   €  ÿÿÿÿÿÿ          0 ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       ÇF d   d   €  ÿÿÿÿÿÿ          @ ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       þ… \   \   €  ÿÿÿÿÿÿ          @ ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    
-   B9 |   |   €  ÿÿÿÿÿÿ          P ªª    E  X   @  
-
-ÿºº D   < ç 
-ÿ     
-
-†  
-      
-  
-    
-   ^Ô \   \   €  ÿÿÿÿÿÿ          P ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       Õ \   \   €  ÿÿÿÿÿÿ          ` ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       é“ d   d   €  ÿÿÿÿÿÿ          ` ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       ÛŽ \   \   €  ÿÿÿÿÿÿ          p ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       8c d   d   €  ÿÿÿÿÿÿ          p ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       ÷ \   \   €  ÿÿÿÿÿÿ          € ªª    E  8   @  
-
-ÿºº $    ç 
-ÿ  	   
-
-       »í  \   \   €  ÿÿÿÿÿÿ          € ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       Š d   d   €  ÿÿÿÿÿÿ          � ªª    E  @ 	  @  
-
-ÿºº ,   $ 	†  
-  
-    
-  
-       { \   \   €  ÿÿÿÿÿÿ          � ªª    E  8 	  @  
-
-ÿºº $    	† 
-  	  
-  
-       2 d   d   €  ÿÿÿÿÿÿ            ªª    E  @ 
-  @  
-
-ÿºº ,   $ 
-†  
-      
-  
-        \   \   €  ÿÿÿÿÿÿ            ªª    E  8 
-  @  
-
-ÿºº $    
-† 
-  
-  
-  
-       ì— |   |   €  ÿÿÿÿÿÿ          ° ªª    E  X   @  
-
-ÿºº D   < ç 
-ÿ     
-
-†  
-      
-  
-       ½¿ \   \   €  ÿÿÿÿÿÿ          ° ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       ïO d   d   €  ÿÿÿÿÿÿ          À ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       p  d   d   €  ÿÿÿÿÿÿ          Ð ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       þ‰ \   \   €  ÿÿÿÿÿÿ          À ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       qI \   \   €  ÿÿÿÿÿÿ          à ªª    E  8   @  
-
-ÿºº $    ç 
-ÿ     
-
-       ~ú \   \   €  ÿÿÿÿÿÿ          Ð ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       ¦Ã d   d   €  ÿÿÿÿÿÿ          ð ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       ÁÉ \   \   €  ÿÿÿÿÿÿ          à ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       S¨ d   d   €  ÿÿÿÿÿÿ           ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       Ûa \   \   €  ÿÿÿÿÿÿ          ð ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       ÄW |   |   €  ÿÿÿÿÿÿ          ªª    E  X   @  
-
-ÿºº D   < ç 
-ÿ     
-
-†  
-      
-  
-        Qk d   d   €  ÿÿÿÿÿÿ           ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-        Š| \   \   €  ÿÿÿÿÿÿ           ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    "   #  d   d   €  ÿÿÿÿÿÿ          0ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-    "   ß  \   \   €  ÿÿÿÿÿÿ          ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    #   *Ã \   \   €  ÿÿÿÿÿÿ          @ªª    E  8   @  
-
-ÿºº $    ç 
-ÿ     
-
-    $   eq d   d   €  ÿÿÿÿÿÿ          Pªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-    $   �‰ \   \   €  ÿÿÿÿÿÿ           ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    &   èÝ  d   d   €  ÿÿÿÿÿÿ          `ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-    &   å¡ \   \   €  ÿÿÿÿÿÿ          0ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    (   Â‰ \   \   €  ÿÿÿÿÿÿ          @ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    (   Ë† |   |   €  ÿÿÿÿÿÿ          pªª    E  X   @  
-
-ÿºº D   < ç 
-ÿ     
-
-†  
-      
-  
-    *   ŽÇ d   d   €  ÿÿÿÿÿÿ          €ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-    *   -| \   \   €  ÿÿÿÿÿÿ          Pªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    ,   À \   \   €  ÿÿÿÿÿÿ          `ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    ,   bÏ d   d   €  ÿÿÿÿÿÿ          �ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-    -   Þ \   \   €  ÿÿÿÿÿÿ           ªª    E  8   @  
-
-ÿºº $    ç 
-ÿ     
-
-    .   ùD  d   d   €  ÿÿÿÿÿÿ          °ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-    .   þY \   \   €  ÿÿÿÿÿÿ          pªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    0   �s d   d   €  ÿÿÿÿÿÿ          Àªª    E  @   @  
-
-ÿºº ,   $ †  
-       
-  
-    0   õ“ \   \   €  ÿÿÿÿÿÿ          €ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    2   k  @   @   €:               Ðªª           
-     
-    2   ÿ        Ô€           2   0  @   @   €  ÿÿÿÿÿÿ          àªª           
-ÿÿÿÿÿÿ
-    2   :4        Ô€           2   ¤:  x   x   €:               ðªª    E  T    @  
-
-                                                                    2   ¾B |   |   €  ÿÿÿÿÿÿ           ªª    E  X   @  
-
-ÿºº D   < ç 
-ÿ  !   
-
-†  
-  "    
-  
-    2   ü. \   \   €  ÿÿÿÿÿÿ          �ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    3   »        Ô€           3   m
-  x   x   €:               ªª    E  T   @  
-
-                                                                   4   »        Ô€           4   m
-  x   x   €:                ªª    E  T   @  
-
-                                                                   4   ° \   \   €  ÿÿÿÿÿÿ           ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    4   õ8 d   d   €  ÿÿÿÿÿÿ          0ªª    E  @   @  
-
-ÿºº ,   $ †  
-  #    
-  
-    5   »        Ô€           5   m
-  x   x   €:               @ªª    E  T   @  
-
-                                                                   6   »        Ô€           6   m
-  x   x   €:               Pªª    E  T   @  
-
-                                                                   6   X` \   \   €  ÿÿÿÿÿÿ          °ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    6   M7 d   d   €  ÿÿÿÿÿÿ          `ªª    E  @   @  
-
-ÿºº ,   $ †  
-  $    
-  
-    7   »        Ô€           7   m
-  x   x   €:               pªª    E  T   @  
-
-                                                                   7   µ \   \   €  ÿÿÿÿÿÿ          €ªª    E  8    @  
-
-ÿºº $     ç 
-ÿ  %   
-
-    8   »        Ô€           8   m
-  x   x   €:               �ªª    E  T   @  
-
-                                                                   8   ³{ \   \   €  ÿÿÿÿÿÿ          Àªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    8    d   d   €  ÿÿÿÿÿÿ           ªª    E  @ !  @  
-
-ÿºº ,   $ !†  
-  &    
-  
-    9   »        Ô€           9   m
-  x   x   €:               °ªª    E  T   @  
-
-                                                                   :   »        Ô€           :   m
-  x   x   €:               Àªª    E  T   @  
-
-                                                                   :   x[ d   d   €  ÿÿÿÿÿÿ          Ðªª    E  @ "  @  
-
-ÿºº ,   $ "†  
-  '    
-  
-    :   B´ \   \   €  ÿÿÿÿÿÿ          Ðªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    ;   »        Ô€           ;   m
-  x   x   €:               àªª    E  T 	  @  
-
-       	                                                            <   »        Ô€           <   m
-  x   x   €:               ðªª    E  T 
-  @  
-
-       
-                                                            <   „�  \   \   €  ÿÿÿÿÿÿ          àªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    <   Æ‰ |   |   €  ÿÿÿÿÿÿ           ªª    E  X #  @  
-
-ÿºº D   < #ç 
-ÿ  (   
-
-†  
-  )    
-  
-    =   »        Ô€           =   m
-  x   x   €:               ªª    E  T   @  
-
-                                                                   >   »        Ô€           >   m
-  x   x   €:                ªª    E  T   @  
-
-                                                                   >   q d   d   €  ÿÿÿÿÿÿ          0ªª    E  @ $  @  
-
-ÿºº ,   $ $†  
-  *    
-  
-    >   •’ \   \   €  ÿÿÿÿÿÿ          ðªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    ?   »        Ô€           ?   m
-  x   x   €:               @ªª    E  T   @  
-
-                                                                   @   »        Ô€           @   m
-  x   x   €:               Pªª    E  T   @  
-
-                                                                   @   ŽÂ \   \   €  ÿÿÿÿÿÿ           ªª    E  8    @  
-
-ÿºº $     † 
-     
-  
-    @   Yí d   d   €  ÿÿÿÿÿÿ          `ªª    E  @ %  @  
-
-ÿºº ,   $ %†  
-  +    
-  
-    A   »        Ô€           A   m
-  x   x   €:               pªª    E  T   @  
-
-                                                                   A   Ðb \   \   €  ÿÿÿÿÿÿ          €ªª    E  8 &  @  
-
-ÿºº $    &ç 
-ÿ  ,   
-
-    B   »        Ô€           B   m
-  x   x   €:               �ªª    E  T   @  
-
-                                                                   B   ! \   \   €  ÿÿÿÿÿÿ          ªª    E  8 !  @  
-
-ÿºº $    !† 
-  !  
-  
-    B   †Ð d   d   €  ÿÿÿÿÿÿ           ªª    E  @ '  @  
-
-ÿºº ,   $ '†  
-  -    
-  
-    C   »        Ô€           C   m
-  x   x   €:               °ªª    E  T   @  
-
-                                                                   D   »        Ô€           D   m
-  x   x   €:               Àªª    E  T   @  
-
-                                                                   D   Ã  \   \   €  ÿÿÿÿÿÿ           ªª    E  8 "  @  
-
-ÿºº $    "† 
-  "  
-  
-    D   úq d   d   €  ÿÿÿÿÿÿ          Ðªª    E  @ (  @  
-
-ÿºº ,   $ (†  
-  .    
-  
-    E   »        Ô€           E   m
-  x   x   €:               àªª    E  T   @  
-
-                                                                   F   »        Ô€           F   m
-  x   x   €:               ðªª    E  T   @  
-
-                                                                   F   Fç \   \   €  ÿÿÿÿÿÿ          0ªª    E  8 #  @  
-
-ÿºº $    #† 
-  #  
-  
-    F   mi |   |   €  ÿÿÿÿÿÿ           ªª    E  X )  @  
-
-ÿºº D   < )ç 
-ÿ  /   
-
-†  
-  0    
-  
-    G   »        Ô€           G   m
-  x   x   €:               ªª    E  T   @  
-
-                                                                   H   »        Ô€           H   m
-  x   x   €:                ªª    E  T   @  
-
-                                                                   H   j1 \   \   €  ÿÿÿÿÿÿ          @ªª    E  8 $  @  
-
-ÿºº $    $† 
-  $  
-  
-    H   q¥ d   d   €  ÿÿÿÿÿÿ          0ªª    E  @ *  @  
-
-ÿºº ,   $ *†  
-  1    
-  
-    I   »        Ô€           I   m
-  x   x   €:               @ªª    E  T   @  
-
-                                                                   J   »        Ô€           J   m
-  x   x   €:               Pªª    E  T   @  
-
-                                                                   J   < d   d   €  ÿÿÿÿÿÿ          `ªª    E  @ +  @  
-
-ÿºº ,   $ +†  
-  2    
-  
-    J   Z\ \   \   €  ÿÿÿÿÿÿ          Pªª    E  8 %  @  
-
-ÿºº $    %† 
-  %  
-  
-    K   »        Ô€           K   m
-  x   x   €:               pªª    E  T   @  
-
-                                                                   K   àè \   \   €  ÿÿÿÿÿÿ          €ªª    E  8 ,  @  
-
-ÿºº $    ,ç 
-ÿ  3   
-
-    L   »        Ô€           L   m
-  x   x   €:               �ªª    E  T   @  
-
-                                                                   L   šÌ \   \   €  ÿÿÿÿÿÿ          `ªª    E  8 &  @  
-
-ÿºº $    &† 
-  &  
-  
-    L   õ© d   d   €  ÿÿÿÿÿÿ           ªª    E  @ -  @  
-
-ÿºº ,   $ -†  
-  4    
-  
-    M   »        Ô€           M   m
-  x   x   €:               °ªª    E  T   @  
-
-                                                                   N   �  x   x   €:               Pªª    E  T   @  
-
-                                                                  N   »        Ô€           N   m
-  x   x   €:               Àªª    E  T   @  
-
-                                                                   N   ¨        Ô€           N    – d   d   €  ÿÿÿÿÿÿ          Ðªª    E  @ .  @  
-
-ÿºº ,   $ .†  
-  5    
-  
-    N   A \   \   €  ÿÿÿÿÿÿ          pªª    E  8 '  @  
-
-ÿºº $    '† 
-  '  
-  
-    N   . \   \   €  ÿÿÿÿÿÿ          `ªª    E  8 '  @  
-
-ÿºº $    '† 
-  '  
-  
-    O   �  x   x   €:               pªª    E  T   @  
-
-                                                                  O   »        Ô€           O   m
-  x   x   €:               àªª    E  T   @  
-
-                                                                   O   ¨        Ô€           P   �  x   x   €:               €ªª    E  T   @  
-
-                                                                  P   »        Ô€           P   m
-  x   x   €:               ðªª    E  T   @  
-
-                                                                   P   ¨        Ô€           P   ùð d   d   €  ÿÿÿÿÿÿ          �ªª    E  @ (  @  
-
-ÿºº ,   $ (†  
-  (  
-  
-  
-    P   ú÷ d   d   €  ÿÿÿÿÿÿ          €ªª    E  @ (  @  
-
-ÿºº ,   $ (†  
-  (  
-  
-  
-    P   N |   |   €  ÿÿÿÿÿÿ           ªª    E  X /  @  
-
-ÿºº D   < /ç 
-ÿ  6   
-
-†  
-  7    
-  
-    Q   �  x   x   €:                ªª    E  T   @  
-
-                                                                  Q   »        Ô€           Q   m
-  x   x   €:               ªª    E  T   @  
-
-                                                                   Q   ¨        Ô€           R   �  x   x   €:               °ªª    E  T    @  
-
-                                                                   R   »        Ô€           R   m
-  x   x   €:                ªª    E  T    @  
-
-                                                                    R   ¨        Ô€           R   •G d   d   €  ÿÿÿÿÿÿ          0ªª    E  @ 0  @  
-
-ÿºº ,   $ 0†  
-  8    
-  
-    R   —€ d   d   €  ÿÿÿÿÿÿ          �ªª    E  @ )  @  
-
-ÿºº ,   $ )†  
-  )    
-  
-    R   ¼Ž d   d   €  ÿÿÿÿÿÿ          Àªª    E  @ )  @  
-
-ÿºº ,   $ )†  
-  )    
-  
-    S   �  x   x   €:               Ðªª    E  T !  @  
-
-      !                                                            S   »        Ô€           S   m
-  x   x   €:               @ªª    E  T !  @  
-
-       !                                                            S   ¨        Ô€           T   �  x   x   €:               àªª    E  T "  @  
-
-      "                                                            T   »        Ô€           T   m
-  x   x   €:               Pªª    E  T "  @  
-
-       "                                                            T   ¨        Ô€           T   ¬« d   d   €  ÿÿÿÿÿÿ          ðªª    E  @ *  @  
-
-ÿºº ,   $ *†  
-  *    
-  
-    T   ý5 d   d   €  ÿÿÿÿÿÿ           ªª    E  @ *  @  
-
-ÿºº ,   $ *†  
-  *    
-  
-    T   ç‚ d   d   €  ÿÿÿÿÿÿ          `ªª    E  @ 1  @  
-
-ÿºº ,   $ 1†  
-  9    
-  
-    U   �  x   x   €:                ªª    E  T #  @  
-
-      #                                                            U   »        Ô€           U   m
-  x   x   €:               pªª    E  T #  @  
-
-       #                                                            U   ¨        Ô€           U   / \   \   €  ÿÿÿÿÿÿ          €ªª    E  8 2  @  
-
-ÿºº $    2ç 
-ÿ  :   
-
-    V   �  x   x   €:               ªª    E  T $  @  
-
-      $                                                            V   »        Ô€           V   m
-  x   x   €:               �ªª    E  T $  @  
-
-       $                                                            V   ¨        Ô€           V   1î d   d   €  ÿÿÿÿÿÿ           ªª    E  @ 3  @  
-
-ÿºº ,   $ 3†  
-  ;    
-  
-    V   GÑ d   d   €  ÿÿÿÿÿÿ           ªª    E  @ +  @  
-
-ÿºº ,   $ +†  
-  +    
-  
-    V   m d   d   €  ÿÿÿÿÿÿ          °ªª    E  @ +  @  
-
-ÿºº ,   $ +†  
-  +    
-  
-    W   �  x   x   €:               0ªª    E  T %  @  
-
-      %                                                            W   »        Ô€           W   m
-  x   x   €:               °ªª    E  T %  @  
-
-       %                                                            W   ¨        Ô€           X   �  x   x   €:               @ªª    E  T &  @  
-
-      &                                                            X   »        Ô€           X   m
-  x   x   €:               Àªª    E  T &  @  
-
-       &                                                            X   ¨        Ô€           X   ¡¾ d   d   €  ÿÿÿÿÿÿ          Àªª    E  @ ,  @  
-
-ÿºº ,   $ ,†  
-  ,    
-  
-    X   “& d   d   €  ÿÿÿÿÿÿ          Ðªª    E  @ 4  @  
-
-ÿºº ,   $ 4†  
-  <    
-  
-    X   6ˆ d   d   €  ÿÿÿÿÿÿ          Pªª    E  @ ,  @  
-
-ÿºº ,   $ ,†  
-  ,    
-  
-    Y   �  x   x   €:               `ªª    E  T '  @  
-
-      '                                                            Y   »        Ô€           Y   m
-  x   x   €:               àªª    E  T '  @  
-
-       '                                                            Y   ¨        Ô€           Z   �  x   x   €:               pªª    E  T (  @  
-
-      (                                                            Z   º        Ô€           Z   l
-  x   x   €:               ðªª    E  T (  @  
-
-       (                                                            Z   ¨        Ô€           Z   h  d   d   €  ÿÿÿÿÿÿ           ªª    E  @ 5  @  
-
-ÿºº ,   $ 5†  
-  =    
-  
-    Z   ¶A d   d   €  ÿÿÿÿÿÿ          Ðªª    E  @ -  @  
-
-ÿºº ,   $ -†  
-  -    
-  
-    Z   jí d   d   €  ÿÿÿÿÿÿ          €ªª    E  @ -  @  
-
-ÿºº ,   $ -†  
-  -    
-  
-    [   €  x   x   €:               �ªª    E  T )  @  
-
-      )                                                            [   º        Ô€           [   l
-  x   x   €:               ªª    E  T )  @  
-
-       )                                                            [   ¨        Ô€           \   €  x   x   €:                ªª    E  T *  @  
-
-      *                                                            \   º        Ô€           \   l
-  x   x   €:                ªª    E  T *  @  
-
-       *                                                            \   ¨        Ô€           \   §M  d   d   €  ÿÿÿÿÿÿ          àªª    E  @ .  @  
-
-ÿºº ,   $ .†  
-  .    
-  
-    \   ø¡  d   d   €  ÿÿÿÿÿÿ          °ªª    E  @ .  @  
-
-ÿºº ,   $ .†  
-  .    
-  
-    \   áU d   d   €  ÿÿÿÿÿÿ          0ªª    E  @ 6  @  
-
-ÿºº ,   $ 6†  
-  >    
-  
-    ]   €  x   x   €:               Àªª    E  T +  @  
-
-      +                                                            ]   º        Ô€           ]   l
-  x   x   €:               @ªª    E  T +  @  
-
-       +                                                            ]   ¨        Ô€           ^   €  x   x   €:               Ðªª    E  T ,  @  
-
-      ,                                                            ^   º        Ô€           ^   l
-  x   x   €:               Pªª    E  T ,  @  
-
-       ,                                                            ^   ¨        Ô€           ^   åÛ  d   d   €  ÿÿÿÿÿÿ          ðªª    E  @ /  @  
-
-ÿºº ,   $ /†  
-  /    
-  
-    ^   àM d   d   €  ÿÿÿÿÿÿ          `ªª    E  @ 7  @  
-
-ÿºº ,   $ 7†  
-  ?    
-  
-    ^   �� d   d   €  ÿÿÿÿÿÿ          àªª    E  @ /  @  
-
-ÿºº ,   $ /†  
-  /    
-  
-    _   €  x   x   €:               ðªª    E  T -  @  
-
-      -                                                            _   º        Ô€           _   l
-  x   x   €:               pªª    E  T -  @  
-
-       -                                                            _   ¨        Ô€           `   €  x   x   €:                ªª    E  T .  @  
-
-      .                                                            `   º        Ô€           `   l
-  x   x   €:               €ªª    E  T .  @  
-
-       .                                                            `   ¨        Ô€           `   dÿ  d   d   €  ÿÿÿÿÿÿ          ªª    E  @ 0  @  
-
-ÿºº ,   $ 0†  
-  0    
-  
-    `   &7 d   d   €  ÿÿÿÿÿÿ          �ªª    E  @ 8  @  
-
-ÿºº ,   $ 8†  
-  @    
-  
-    `   Áõ d   d   €  ÿÿÿÿÿÿ           ªª    E  @ 0  @  
-
-ÿºº ,   $ 0†  
-  0    
-  
-    a   €  x   x   €:                ªª    E  T /  @  
-
-      /                                                            a   º        Ô€           a   l
-  x   x   €:                ªª    E  T /  @  
-
-       /                                                            a   ¨        Ô€           b   €  x   x   €:               0ªª    E  T 0  @  
-
-      0                                                            b   º        Ô€           b   l
-  x   x   €:               °ªª    E  T 0  @  
-
-       0                                                            b   ¨        Ô€           b   Þ d   d   €  ÿÿÿÿÿÿ          ªª    E  @ 1  @  
-
-ÿºº ,   $ 1†  
-  1    
-  
-    b   p! d   d   €  ÿÿÿÿÿÿ          @ªª    E  @ 1  @  
-
-ÿºº ,   $ 1†  
-  1    
-  
-    b   âW d   d   €  ÿÿÿÿÿÿ          Àªª    E  @ 9  @  
-
-ÿºº ,   $ 9†  
-  A    
-  
-    c   €  x   x   €:               Pªª    E  T 1  @  
-
-      1                                                            c   º        Ô€           c   l
-  x   x   €:               Ðªª    E  T 1  @  
-
-       1                                                            c   ¨        Ô€           d   €  x   x   €:               `ªª    E  T 2  @  
-
-      2                                                            d   º        Ô€           d   l
-  x   x   €:               àªª    E  T 2  @  
-
-       2                                                            d   ¨        Ô€           d   
-– d   d   €  ÿÿÿÿÿÿ          pªª    E  @ 2  @  
-
-ÿºº ,   $ 2†  
-  2    
-  
-    d   s d   d   €  ÿÿÿÿÿÿ           ªª    E  @ 2  @  
-
-ÿºº ,   $ 2†  
-  2    
-  
-    d   l¸ d   d   €  ÿÿÿÿÿÿ          ðªª    E  @ :  @  
-
-ÿºº ,   $ :†  
-  B    
-  
-    e   €  x   x   €:               €ªª    E  T 3  @  
-
-      3                                                            e   º        Ô€           e   l
-  x   x   €:                ªª    E  T 3  @  
-
-       3                                                            e   ¨        Ô€           f   €  x   x   €:               �ªª    E  T 4  @  
-
-      4                                                            f   º        Ô€           f   l
-  x   x   €:               ªª    E  T 4  @  
-
-       4                                                            f   ¨        Ô€           f   Ž* d   d   €  ÿÿÿÿÿÿ           ªª    E  @ 3  @  
-
-ÿºº ,   $ 3†  
-  3    
-  
-    f   Ýú d   d   €  ÿÿÿÿÿÿ          0ªª    E  @ 3  @  
-
-ÿºº ,   $ 3†  
-  3    
-  
-    f   ‡“ d   d   €  ÿÿÿÿÿÿ           ªª    E  @ ;  @  
-
-ÿºº ,   $ ;†  
-  C    
-  
-    g   €  x   x   €:               °ªª    E  T 5  @  
-
-      5                                                            g   º        Ô€           g   l
-  x   x   €:               0ªª    E  T 5  @  
-
-       5                                                            g   ¨        Ô€           h   €  x   x   €:               Àªª    E  T 6  @  
-
-      6                                                            h   º        Ô€           h   l
-  x   x   €:               @ªª    E  T 6  @  
-
-       6                                                            h   ¨        Ô€           h   „ç  d   d   €  ÿÿÿÿÿÿ          @ªª    E  @ 4  @  
-
-ÿºº ,   $ 4†  
-  4    
-  
-    h   ÇÛ d   d   €  ÿÿÿÿÿÿ          Pªª    E  @ <  @  
-
-ÿºº ,   $ <†  
-  D    
-  
-    h   Ï	 d   d   €  ÿÿÿÿÿÿ          Ðªª    E  @ 4  @  
-
-ÿºº ,   $ 4†  
-  4    
-  
-    i   €  x   x   €:               àªª    E  T 7  @  
-
-      7                                                            i   »        Ô€           i   m
-  x   x   €:               `ªª    E  T 7  @  
-
-       7                                                            i   ¨        Ô€           j   €  x   x   €:               ðªª    E  T 8  @  
-
-      8                                                            j   »        Ô€           j   m
-  x   x   €:               pªª    E  T 8  @  
-
-       8                                                            j   ¨        Ô€           j   ñ d   d   €  ÿÿÿÿÿÿ          Pªª    E  @ 5  @  
-
-ÿºº ,   $ 5†  
-  5    
-  
-    j   =j d   d   €  ÿÿÿÿÿÿ           ªª    E  @ 5  @  
-
-ÿºº ,   $ 5†  
-  5    
-  
-    j   Èî d   d   €  ÿÿÿÿÿÿ          €ªª    E  @ =  @  
-
-ÿºº ,   $ =†  
-  E    
-  
-    k   €  x   x   €:               ªª    E  T 9  @  
-
-      9                                                            k   »        Ô€           k   m
-  x   x   €:               �ªª    E  T 9  @  
-
-       9                                                            k   ¨        Ô€           l   €  x   x   €:                ªª    E  T :  @  
-
-      :                                                            l   »        Ô€           l   m
-  x   x   €:                ªª    E  T :  @  
-
-       :                                                            l   ¨        Ô€           l   ú d   d   €  ÿÿÿÿÿÿ          0ªª    E  @ 6  @  
-
-ÿºº ,   $ 6†  
-  6    
-  
-    l   *ë d   d   €  ÿÿÿÿÿÿ          `ªª    E  @ 6  @  
-
-ÿºº ,   $ 6†  
-  6    
-  
-    l   ¡4 d   d   €  ÿÿÿÿÿÿ          °ªª    E  @ >  @  
-
-ÿºº ,   $ >†  
-  F    
-  
-    m   €  x   x   €:               @ªª    E  T ;  @  
-
-      ;                                                            m   »        Ô€           m   m
-  x   x   €:               Àªª    E  T ;  @  
-
-       ;                                                            m   ¨        Ô€           n   €  x   x   €:               Pªª    E  T <  @  
-
-      <                                                            n   »        Ô€           n   m
-  x   x   €:               Ðªª    E  T <  @  
-
-       <                                                            n   ¨        Ô€           n   ¹Q  d   d   €  ÿÿÿÿÿÿ          àªª    E  @ ?  @  
-
-ÿºº ,   $ ?†  
-  G    
-  
-    n   X d   d   €  ÿÿÿÿÿÿ          `ªª    E  @ 7  @  
-
-ÿºº ,   $ 7†  
-  7    
-  
-    n   øN d   d   €  ÿÿÿÿÿÿ          pªª    E  @ 7  @  
-
-ÿºº ,   $ 7†  
-  7    
-  
-    o   €  x   x   €:               pªª    E  T =  @  
-
-      =                                                            o   »        Ô€           o   m
-  x   x   €:               ðªª    E  T =  @  
-
-       =                                                            o   ¨        Ô€           p   €  x   x   €:               €ªª    E  T >  @  
-
-      >                                                            p   »        Ô€           p   m
-  x   x   €:                ªª    E  T >  @  
-
-       >                                                            p   ¨        Ô€           p   ­è  d   d   €  ÿÿÿÿÿÿ          �ªª    E  @ 8  @  
-
-ÿºº ,   $ 8†  
-  8    
-  
-    p   Œ d   d   €  ÿÿÿÿÿÿ          ªª    E  @ @  @  
-
-ÿºº ,   $ @†  
-  H    
-  
-    p   DÀ d   d   €  ÿÿÿÿÿÿ          €ªª    E  @ 8  @  
-
-ÿºº ,   $ 8†  
-  8    
-  
-    q   €  x   x   €:                ªª    E  T ?  @  
-
-      ?                                                            q   »        Ô€           q   m
-  x   x   €:                ªª    E  T ?  @  
-
-       ?                                                            q   ¨        Ô€           r   €  x   x   €:               °ªª    E  T @  @  
-
-      @                                                            r   »        Ô€           r   m
-  x   x   €:               0ªª    E  T @  @  
-
-       @                                                            r   ¨        Ô€           r   $ú d   d   €  ÿÿÿÿÿÿ          @ªª    E  @ A  @  
-
-ÿºº ,   $ A†  
-  I    
-  
-    r   ¨ý d   d   €  ÿÿÿÿÿÿ          �ªª    E  @ 9  @  
-
-ÿºº ,   $ 9†  
-  9    
-  
-    r   Ù* d   d   €  ÿÿÿÿÿÿ          Àªª    E  @ 9  @  
-
-ÿºº ,   $ 9†  
-  9    
-  
-    s   €  x   x   €:               Ðªª    E  T A  @  
-
-      A                                                            s   »        Ô€           s   m
-  x   x   €:               Pªª    E  T A  @  
-
-       A                                                            s   ©        Ô€           t   €  x   x   €:               àªª    E  T B  @  
-
-      B                                                            t   »        Ô€           t   m
-  x   x   €:               `ªª    E  T B  @  
-
-       B                                                            t   ©        Ô€           t   ÆÈ d   d   €  ÿÿÿÿÿÿ          pªª    E  @ B  @  
-
-ÿºº ,   $ B†  
-  J    
-  
-    t   “á d   d   €  ÿÿÿÿÿÿ          ðªª    E  @ :  @  
-
-ÿºº ,   $ :†  
-  :    
-  
-    t   :S d   d   €  ÿÿÿÿÿÿ           ªª    E  @ :  @  
-
-ÿºº ,   $ :†  
-  :    
-  
-    u   €  x   x   €:                ªª    E  T C  @  
-
-      C                                                            u   »        Ô€           u   m
-  x   x   €:               €ªª    E  T C  @  
-
-       C                                                            u   ©        Ô€           v   €  x   x   €:               ªª    E  T D  @  
-
-      D                                                            v   »        Ô€           v   m
-  x   x   €:               �ªª    E  T D  @  
-
-       D                                                            v   ©        Ô€           v   ×£ d   d   €  ÿÿÿÿÿÿ           ªª    E  @ ;  @  
-
-ÿºº ,   $ ;†  
-  ;    
-  
-    v   R¥ d   d   €  ÿÿÿÿÿÿ           ªª    E  @ C  @  
-
-ÿºº ,   $ C†  
-  K    
-  
-    v   MÄ d   d   €  ÿÿÿÿÿÿ          °ªª    E  @ ;  @  
-
-ÿºº ,   $ ;†  
-  ;    
-  
-    w   €  x   x   €:               0ªª    E  T E  @  
-
-      E                                                            w   »        Ô€           w   m
-  x   x   €:               °ªª    E  T E  @  
-
-       E                                                            w   ©        Ô€           x   €  x   x   €:               @ªª    E  T F  @  
-
-      F                                                            x   »        Ô€           x   m
-  x   x   €:               Àªª    E  T F  @  
-
-       F                                                            x   ©        Ô€           x   óZ d   d   €  ÿÿÿÿÿÿ          Àªª    E  @ <  @  
-
-ÿºº ,   $ <†  
-  <    
-  
-    x   3½ d   d   €  ÿÿÿÿÿÿ          Pªª    E  @ <  @  
-
-ÿºº ,   $ <†  
-  <    
-  
-    x   O. d   d   €  ÿÿÿÿÿÿ          Ðªª    E  @ D  @  
-
-ÿºº ,   $ D†  
-  L    
-  
-    y   €  x   x   €:               `ªª    E  T G  @  
-
-      G                                                            y   »        Ô€           y   m
-  x   x   €:               àªª    E  T G  @  
-
-       G                                                            y   ©        Ô€           z   €  x   x   €:               pªª    E  T H  @  
-
-      H                                                            z   »        Ô€           z   m
-  x   x   €:               ðªª    E  T H  @  
-
-       H                                                            z   ©        Ô€           z   �# d   d   €  ÿÿÿÿÿÿ          €ªª    E  @ =  @  
-
-ÿºº ,   $ =†  
-  =    
-  
-    z   I d   d   €  ÿÿÿÿÿÿ          Ðªª    E  @ =  @  
-
-ÿºº ,   $ =†  
-  =    
-  
-    z   ÇP d   d   €  ÿÿÿÿÿÿ           	ªª    E  @ E  @  
-
-ÿºº ,   $ E†  
-  M    
-  
-    {   €  x   x   €:               �ªª    E  T I  @  
-
-      I                                                            {   "  x   x   ˆ:               �ªª    E  T I  @  
-
-      I                                                            {   „  x   x   ˆ:               �ªª    E  T I  @  
-
-      I                                                            {   –&  x   x   ˆ:               �ªª    E  T I  @  
-
-      I                                                            {   ¤8  x   x   ˆ:               �ªª    E  T I  @  
-
-      I                                                            {   š]  x   x   ˆ:               �ªª    E  T I  @  
-
-      I                                                            {   }  x   x   ˆ:               �ªª    E  T I  @  
-
-      I                                                            |   €  x   x   €:                ªª    E  T J  @  
-
-      J                                                            |   Ž  x   x   ˆ:                ªª    E  T J  @  
-
-      J                                                            |   ä  x   x   ˆ:                ªª    E  T J  @  
-
-      J                                                            |   b#  x   x   ˆ:                ªª    E  T J  @  
-
-      J                                                            |   ¼M  x   x   ˆ:                ªª    E  T J  @  
-
-      J                                                            |   j�  x   x   ˆ:                ªª    E  T J  @  
-
-      J                                                            |   �¯  x   x   ˆ:                ªª    E  T J  @  
-
-      J                                                            |   P±  d   d   €  ÿÿÿÿÿÿ          àªª    E  @ >  @  
-
-ÿºº ,   $ >†  
-  >    
-  
-    |   8� d   d   €  ÿÿÿÿÿÿ          	ªª    E  @ F  @  
-
-ÿºº ,   $ F†  
-  N    
-  
-    |   wÚ d   d   €  ÿÿÿÿÿÿ          °ªª    E  @ >  @  
-
-ÿºº ,   $ >†  
-  >    
-  
-    }   €  x   x   €:               Àªª    E  T K  @  
-
-      K                                                            }   :  x   x   ˆ:               Àªª    E  T K  @  
-
-      K                                                            }   X  x   x   ˆ:               Àªª    E  T K  @  
-
-      K                                                            }   N-  x   x   ˆ:               Àªª    E  T K  @  
-
-      K                                                            }   hG  x   x   ˆ:               Àªª    E  T K  @  
-
-      K                                                            }   ÖS  x   x   ˆ:               Àªª    E  T K  @  
-
-      K                                                            }   t…  x   x   ˆ:               Àªª    E  T K  @  
-
-      K                                                            ~   €  x   x   €:               Ðªª    E  T L  @  
-
-      L                                                            ~   â  x   x   ˆ:               Ðªª    E  T L  @  
-
-      L                                                            ~   \  x   x   ˆ:               Ðªª    E  T L  @  
-
-      L                                                            ~   †1  x   x   ˆ:               Ðªª    E  T L  @  
-
-      L                                                            ~    K  x   x   ˆ:               Ðªª    E  T L  @  
-
-      L                                                            ~   ’�  x   x   ˆ:               Ðªª    E  T L  @  
-
-      L                                                            ~   `—  d   d   €  ÿÿÿÿÿÿ          ðªª    E  @ ?  @  
-
-ÿºº ,   $ ?†  
-  ?    
-  
-    ~   ŸÕ  x   x   ˆ:               Ðªª    E  T L  @  
-
-      L                                                            ~   ©Ü  d   d   €  ÿÿÿÿÿÿ          àªª    E  @ ?  @  
-
-ÿºº ,   $ ?†  
-  ?    
-  
-    ~   KB d   d   €  ÿÿÿÿÿÿ           	ªª    E  @ G  @  
-
-ÿºº ,   $ G†  
-  O    
-  
-       x  @   @   €  ÿÿÿÿÿÿ          ðªª           
-ÿÿÿÿÿÿ
-       ª  @   @   €:                ªª           
-     
-       ¦        Ô€              ˜  x   x   €:                	ªª    E  T M  @  
-
-      M                                                               ¢        Ô€              À;  @   @   €  ÿÿÿÿÿÿ          ªª           
-ÿÿÿÿÿÿ
-       sA  @   @   €:               0	ªª           
-     
-       }A        Ô€              ãC  x   x   €:                ªª    E  T M  ?  
-
-      M                                                               žI        Ô€              Ln  @   @   €  ÿÿÿÿÿÿ          @	ªª           
-ÿÿÿÿÿÿ
-       ~n  @   @   €:               0ªª           
-     
-       yr        Ô€              ƒy  x   x   €:               P	ªª    E  T I  @  
-
-       M                                                               �y        Ô€              Û”  @   @   €  ÿÿÿÿÿÿ          @ªª           
-ÿÿÿÿÿÿ
-       Žš  @   @   €:               	ªª           
-     
-       ˜š        Ô€              ^œ  x   x   €:               Pªª    E  T I  ?  
-
-       M                                                               ¢        Ô€           €   €  x   x   €:                	ªª    E  T N  @  
-
-      N                                                            €   Š        Ô€           €   ì  x   x   €:               `ªª    E  T N  ?  
-
-      N                                                            €   §        Ô€           €   Y  x   x   €:               `	ªª    E  T J  @  
-
-       N                                                            €   c        Ô€           €   ‘  x   x   €:               pªª    E  T J  ?  
-
-       N                                                            €   M        Ô€           €   ý d   d   €  ÿÿÿÿÿÿ          0	ªª    E  @ @  @  
-
-ÿºº ,   $ @†  
-  @    
-
-  
-    €   �» d   d   €  ÿÿÿÿÿÿ          €ªª    E  @ @  @  
-
-ÿºº ,   $ @†  
-  @    
-  
-    €   �< d   d   €  ÿÿÿÿÿÿ          p	ªª    E  @ H  @  
-
-ÿºº ,   $ H†  
-  P  
-  
-  
-    �   €  x   x   €:               @	ªª    E  T O  @  
-
-      O                                                            �   Š        Ô€           �   ì  x   x   €:               �ªª    E  T O  ?  
-
-      O                                                            �   §        Ô€           �   Y  x   x   €:               €	ªª    E  T K  @  
-
-       O                                                            �   c        Ô€           �   ¡  x   x   €:                ªª    E  T K  ?  
-
-       O                                                            �   ]        Ô€           ‚   €  x   x   €:               P	ªª    E  T P  @  
-
-      P                                                            ‚   Š        Ô€           ‚   ì  x   x   €:               °ªª    E  T P  ?  
-
-      P                                                            ‚   §        Ô€           ‚   Y  x   x   €:               �	ªª    E  T L  @  
-
-       P                                                            ‚   c        Ô€           ‚     x   x   €:               Àªª    E  T L  ?  
-
-       P                                                            ‚   Õ        Ô€           ‚   2¹ d   d   €  ÿÿÿÿÿÿ           	ªª    E  @ I  @  
-
-ÿºº ,   $ I†  
-  Q  
-  
-  
-    ‚   Õ d   d   €  ÿÿÿÿÿÿ          `	ªª    E  @ A  @  
-
-ÿºº ,   $ A†  
-  A    
-
-  
-    ‚   !v |   |   €  ÿÿÿÿÿÿ          Ðªª    E  X A  @  
-
-ÿºº D   < Aç 
-ÿ  A   
-
-†  
-  B    
-  
-    ƒ   €  x   x   €:               p	ªª    E  T Q  @  
-
-      Q                                                            ƒ   Š        Ô€           ƒ   ì  x   x   €:               àªª    E  T Q  ?  
-
-      Q                                                            ƒ   §        Ô€           ƒ   Y  x   x   €:               °	ªª    E  T M  @  
-
-       Q                                                            ƒ   c        Ô€           ƒ   1  x   x   €:               ðªª    E  T M  ?  
-
-       Q                                                            ƒ   í        Ô€           „   €  x   x   €:               €	ªª    E  T R  @  
-
-      R                                                            „   Š        Ô€           „   ì  x   x   €:                ªª    E  T R  ?  
-
-      R                                                            „   §        Ô€           „   Y  x   x   €:               À	ªª    E  T N  @  
-
-       R                                                            „   c        Ô€           „   Å  x   x   €:               ªª    E  T N  ?  
-
-       R                                                            „   �        Ô€           „   â d   d   €  ÿÿÿÿÿÿ          Ð	ªª    E  @ J  @  
-
-ÿºº ,   $ J†  
-  R  
-  
-  
-    „   ^x d   d   €  ÿÿÿÿÿÿ           ªª    E  @ B  @  
-
-ÿºº ,   $ B†  
-  C    
-  
-    „   Ä/ d   d   €  ÿÿÿÿÿÿ          �	ªª    E  @ B  @  
-
-ÿºº ,   $ B†  
-  B    
-
-  
-    …   €  x   x   €:                	ªª    E  T S  @  
-
-      S                                                            …   Š        Ô€           …   ì  x   x   €:               0ªª    E  T S  ?  
-
-      S                                                            …   §        Ô€           …   Y  x   x   €:               à	ªª    E  T O  @  
-
-       S                                                            …   c        Ô€           …   y  x   x   €:               @ªª    E  T O  ?  
-
-       S                                                            …   5        Ô€           †   €  x   x   €:               °	ªª    E  T T  @  
-
-      T                                                            †   Š        Ô€           †   ì  x   x   €:               Pªª    E  T T  ?  
-
-      T                                                            †   §        Ô€           †   Y  x   x   €:               ð	ªª    E  T P  @  
-
-       T                                                            †   c        Ô€           †   µ  x   x   €:               `ªª    E  T P  ?  
-
-       T                                                            †   q        Ô€           †   ¨² d   d   €  ÿÿÿÿÿÿ          pªª    E  @ C  @  
-
-ÿºº ,   $ C†  
-  D    
-  
-    †   G� \   \   €  ÿÿÿÿÿÿ          À	ªª    E  8 C  @  
-
-ÿºº $    C† 
-  C  
-  
-    †   ¼ \   \   €  ÿÿÿÿÿÿ           
-ªª    E  8 K  @  
-
-ÿºº $    K† 
-  S  
-  
-    ‡   €  x   x   €:               Ð	ªª    E  T U  @  
-
-      U                                                            ‡   Š        Ô€           ‡   ì  x   x   €:               €ªª    E  T U  ?  
-
-      U                                                            ‡   §        Ô€           ‡   Y  x   x   €:               
-ªª    E  T Q  @  
-
-       U                                                            ‡   c        Ô€           ‡     x   x   €:               �ªª    E  T Q  ?  
-
-       U                                                            ‡   Ñ        Ô€           ‡   ÑP  \   \   €  ÿÿÿÿÿÿ           ªª    E  8 D  @  
-
-ÿºº $    Dç 
-ÿ  E   
-
-    ˆ   €  x   x   €:               à	ªª    E  T V  @  
-
-      V                                                            ˆ   Š        Ô€           ˆ   ì  x   x   €:               °ªª    E  T V  ?  
-
-      V                                                            ˆ   B  x   x   ˆ:               °ªª    E  T V  ?  
-
-      V                                                            ˆ   þ        Ô€           ˆ   °  x   x   €:               0
-ªª    E  T R  @  
-
-       V                                                            ˆ   º        Ô€           ˆ   Ô  x   x   €:               Àªª    E  T R  ?  
-
-       V                                                            ˆ   �        Ô€           ˆ    ø \   \   €  ÿÿÿÿÿÿ          ð	ªª    E  8 D  @  
-
-ÿºº $    D† 
-  D  
-  
-    ˆ   ŽC d   d   €  ÿÿÿÿÿÿ          Ðªª    E  @ E  @  
-
-ÿºº ,   $ E†  
-  F    
-  
-    ‰   €  x   x   €:                
-ªª    E  T W  @  
-
-      W                                                            ‰   Š        Ô€           ‰   ì  x   x   €:               àªª    E  T W  ?  
-
-      W                                                            ‰   ¨        Ô€           ‰   Z  x   x   €:               @
-ªª    E  T S  @  
-
-       W                                                            ‰   d        Ô€           ‰   ò  x   x   €:               ðªª    E  T S  ?  
-
-       W                                                            ‰   ­        Ô€           Š   €  x   x   €:               
-ªª    E  T X  @  
-
-      X                                                            Š   Š        Ô€           Š   ì  x   x   €:                ªª    E  T X  ?  
-
-      X                                                            Š   ¨        Ô€           Š   Z  x   x   €:               P
-ªª    E  T T  @  
-
-       X                                                            Š   d        Ô€           Š   ¶  x   x   €:               ªª    E  T T  ?  
-
-       X                                                            Š   q        Ô€           Š   æ™  \   \   €  ÿÿÿÿÿÿ           
-ªª    E  8 E  @  
-
-ÿºº $    E† 
-  E  
-  
-    Š   ¸ d   d   €  ÿÿÿÿÿÿ           ªª    E  @ F  @  
-
-ÿºº ,   $ F†  
-  G    
-  
-    Š   ‡û \   \   €  ÿÿÿÿÿÿ          `
-ªª    E  8 M  @  
-
-ÿºº $    M† 
-  U  
-  
-    ‹   €  x   x   €:               0
-ªª    E  T Y  @  
-
-      Y                                                            ‹   Š        Ô€           ‹   ì  x   x   €:               0ªª    E  T Y  ?  
-
-      Y                                                            ‹   ¨        Ô€           ‹   Z  x   x   €:               p
-ªª    E  T U  @  
-
-       Y                                                            ‹   d        Ô€           ‹     x   x   €:               @ªª    E  T U  ?  
-
-       Y                                                            ‹   Ù        Ô€           Œ   €  x   x   €:               @
-ªª    E  T Z  @  
-
-      Z                                                            Œ   Š        Ô€           Œ   ì  x   x   €:               Pªª    E  T Z  ?  
-
-      Z                                                            Œ   ¨        Ô€           Œ   Z  x   x   €:               €
-ªª    E  T V  @  
-
-       Z                                                            Œ   d        Ô€           Œ   Ê  x   x   €:               `ªª    E  T V  ?  
-
-       Z                                                            Œ   …        Ô€           Œ   õu  \   \   €  ÿÿÿÿÿÿ          P
-ªª    E  8 F  @  
-
-ÿºº $    F† 
-  F  
-  
-    Œ   €Í  \   \   €  ÿÿÿÿÿÿ          �
-ªª    E  8 N  @  
-
-ÿºº $    N† 
-  V  
-  
-    Œ   È° |   |   €  ÿÿÿÿÿÿ          pªª    E  X G  @  
-
-ÿºº D   < Gç 
-ÿ  H   
-
-†  
-  I    
-  
-    �   €  x   x   €:               `
-ªª    E  T [  @  
-
-      [                                                            �   Š        Ô€           �   ì  x   x   €:               €ªª    E  T [  ?  
-
-      [                                                            �   ¨        Ô€           �   Z  x   x   €:                
-ªª    E  T W  @  
-
-       [                                                            �   d        Ô€           �   Î  x   x   €:               �ªª    E  T W  ?  
-
-       [                                                            �   ‰        Ô€           Ž   €  x   x   €:               p
-ªª    E  T \  @  
-
-      \                                                            Ž   Š        Ô€           Ž   ì  x   x   €:                ªª    E  T \  ?  
-
-      \                                                            Ž   ¨        Ô€           Ž   Z  x   x   €:               °
-ªª    E  T X  @  
-
-       \                                                            Ž   d        Ô€           Ž   
-  x   x   €:               °ªª    E  T X  ?  
-
-       \                                                            Ž   Å        Ô€           Ž   Üg  \   \   €  ÿÿÿÿÿÿ          À
-ªª    E  8 O  @  
-
-ÿºº $    O† 
-  W  
-  
-    Ž   ) \   \   €  ÿÿÿÿÿÿ          €
-ªª    E  8 G  @  
-
-ÿºº $    G† 
-  G  
-  
-    Ž   ~3 d   d   €  ÿÿÿÿÿÿ          Àªª    E  @ H  @  
-
-ÿºº ,   $ H†  
-  J    
-  
-    �   €  x   x   €:               �
-ªª    E  T ]  @  
-
-      ]                                                            �   Š        Ô€           �   ì  x   x   €:               Ðªª    E  T ]  ?  
-
-      ]                                                            �   ¨        Ô€           �   Z  x   x   €:               Ð
-ªª    E  T Y  @  
-
-       ]                                                            �   d        Ô€           �   ¦  x   x   €:               àªª    E  T Y  ?  
-
-       ]                                                            �   a        Ô€           �   €  x   x   €:                
-ªª    E  T ^  @  
-
-      ^                                                            �   Š        Ô€           �   ì  x   x   €:               ðªª    E  T ^  ?  
-
-      ^                                                            �   ¨        Ô€           �   Z  x   x   €:               à
-ªª    E  T Z  @  
-
-       ^                                                            �   d        Ô€           �   *  x   x   €:                ªª    E  T Z  ?  
-
-       ^                                                            �   å        Ô€           �   žE  d   d   €  ÿÿÿÿÿÿ          ªª    E  @ I  @  
-
-ÿºº ,   $ I†  
-  K    
-  
-    �   Ý� \   \   €  ÿÿÿÿÿÿ          °
-ªª    E  8 H  @  
-
-ÿºº $    H† 
-  H  
-  
-    �   © \   \   €  ÿÿÿÿÿÿ          ð
-ªª    E  8 P  @  
-
-ÿºº $    P† 
-  X  
-  
-    ‘   €  x   x   €:               À
-ªª    E  T _  @  
-
-      _                                                            ‘   Š        Ô€           ‘   ì  x   x   €:                ªª    E  T _  ?  
-
-      _                                                            ‘   ¨        Ô€           ‘   Z  x   x   €:                ªª    E  T [  @  
-
-       _                                                            ‘   d        Ô€           ‘   
-  x   x   €:               0ªª    E  T [  ?  
-
-       _                                                            ‘   Å        Ô€           ‘   ÊË \   \   €  ÿÿÿÿÿÿ          @ªª    E  8 J  @  
-
-ÿºº $    Jç 
-ÿ  L   
-
-    ’   €  x   x   €:               Ð
-ªª    E  T `  @  
-
-      `                                                            ’   Š        Ô€           ’   ì  x   x   €:               Pªª    E  T `  ?  
-
-      `                                                            ’   ¨        Ô€           ’   Z  x   x   €:               ªª    E  T \  @  
-
-       `                                                            ’   d        Ô€           ’   ’  x   x   €:               `ªª    E  T \  ?  
-
-       `                                                            ’   N        Ô€           ’   (n \   \   €  ÿÿÿÿÿÿ           ªª    E  8 Q  @  
-
-ÿºº $    Q† 
-  Y  
-  
-    ’   Lä d   d   €  ÿÿÿÿÿÿ          pªª    E  @ K  @  
-
-ÿºº ,   $ K†  
-  M    
-  
-    ’   ½> \   \   €  ÿÿÿÿÿÿ          à
-ªª    E  8 I  @  
-
-ÿºº $    I† 
-  I  
-  
-    “   €  x   x   €:               ð
-ªª    E  T a  @  
-
-      a                                                            “   Š        Ô€           “   ì  x   x   €:               €ªª    E  T a  ?  
-
-      a                                                            “   ¨        Ô€           “   Z  x   x   €:               0ªª    E  T ]  @  
-
-       a                                                            “   d        Ô€           “   â  x   x   €:               �ªª    E  T ]  ?  
-
-       a                                                            “   ž        Ô€           ”   €  x   x   €:                ªª    E  T b  @  
-
-      b                                                            ”   Š        Ô€           ”   ì  x   x   €:                ªª    E  T b  ?  
-
-      b                                                            ”   ¨        Ô€           ”   Z  x   x   €:               @ªª    E  T ^  @  
-
-       b                                                            ”   d        Ô€           ”   ~  x   x   €:               °ªª    E  T ^  ?  
-
-       b                                                            ”   :        Ô€           ”   �3 d   d   €  ÿÿÿÿÿÿ          Àªª    E  @ L  @  
-
-ÿºº ,   $ L†  
-  N    
-  
-    ”   ½¢ \   \   €  ÿÿÿÿÿÿ          Pªª    E  8 R  @  
-
-ÿºº $    R† 
-  Z  
-  
-    ”   ‚ \   \   €  ÿÿÿÿÿÿ          ªª    E  8 J  @  
-
-ÿºº $    J† 
-  J  
-  
-    •   €  x   x   €:                ªª    E  T c  @  
-
-      c                                                            •   Š        Ô€           •   ì  x   x   €:               Ðªª    E  T c  ?  
-
-      c                                                            •   ¨        Ô€           •   Z  x   x   €:               `ªª    E  T _  @  
-
-       c                                                            •   d        Ô€           •   ¶  x   x   €:               àªª    E  T _  ?  
-
-       c                                                            •   r        Ô€           –   €  x   x   €:               0ªª    E  T d  @  
-
-      d                                                            –   Š        Ô€           –   ì  x   x   €:               ðªª    E  T d  ?  
-
-      d                                                            –   ¨        Ô€           –   Z  x   x   €:               pªª    E  T `  @  
-
-       d                                                            –   d        Ô€           –     x   x   €:                ªª    E  T `  ?  
-
-       d                                                            –   Ú        Ô€           –   Ò" |   |   €  ÿÿÿÿÿÿ          ªª    E  X M  @  
-
-ÿºº D   < Mç 
-ÿ  O   
-
-†  
-  P    
-  
-    –   t \   \   €  ÿÿÿÿÿÿ          €ªª    E  8 S  @  
-
-ÿºº $    S† 
-  [  
-  
-    –   j@ \   \   €  ÿÿÿÿÿÿ          @ªª    E  8 K  @  
-
-ÿºº $    K† 
-  K  
-  
-    —   €  x   x   €:               Pªª    E  T e  @  
-
-      e                                                            —   Š        Ô€           —   ì  x   x   €:                ªª    E  T e  ?  
-
-      e                                                            —   ¨        Ô€           —   Z  x   x   €:               �ªª    E  T a  @  
-
-       e                                                            —   d        Ô€           —   â  x   x   €:               0ªª    E  T a  ?  
-
-       e                                                            —   ž        Ô€           ˜   €  x   x   €:               `ªª    E  T f  @  
-
-      f                                                            ˜   Š        Ô€           ˜   ì  x   x   €:               @ªª    E  T f  ?  
-
-      f                                                            ˜   ¨        Ô€           ˜   Z  x   x   €:                ªª    E  T b  @  
-
-       f                                                            ˜   d        Ô€           ˜   ¢  x   x   €:               Pªª    E  T b  ?  
-
-       f                                                            ˜   ^        Ô€           ˜   Ž‚  \   \   €  ÿÿÿÿÿÿ          °ªª    E  8 T  @  
-
-ÿºº $    T† 
-  \  
-  
-    ˜   ú> \   \   €  ÿÿÿÿÿÿ          pªª    E  8 L  @  
-
-ÿºº $    L† 
-  L  
-  
-    ˜   ÷É d   d   €  ÿÿÿÿÿÿ          `ªª    E  @ N  @  
-
-ÿºº ,   $ N†  
-  Q    
-  
-    ™   €  x   x   €:               €ªª    E  T g  @  
-
-      g                                                            ™   Š        Ô€           ™   ì  x   x   €:               pªª    E  T g  ?  
-
-      g                                                            ™   ¨        Ô€           ™   Z  x   x   €:               Àªª    E  T c  @  
-
-       g                                                            ™   d        Ô€           ™   î  x   x   €:               €ªª    E  T c  ?  
-
-       g                                                            ™   ª        Ô€           š   €  x   x   €:               �ªª    E  T h  @  
-
-      h                                                            š   Š        Ô€           š   ì  x   x   €:               �ªª    E  T h  ?  
-
-      h                                                            š   ¨        Ô€           š   Z  x   x   €:               Ðªª    E  T d  @  
-
-       h                                                            š   d        Ô€           š     x   x   €:                ªª    E  T d  ?  
-
-       h                                                            š   Ú        Ô€           š   ¹8  d   d   €  ÿÿÿÿÿÿ          °ªª    E  @ O  @  
-
-ÿºº ,   $ O†  
-  R    
-  
-    š   Q \   \   €  ÿÿÿÿÿÿ           ªª    E  8 M  @  
-
-ÿºº $    M† 
-  M  
-  
-    š   ðv \   \   €  ÿÿÿÿÿÿ          àªª    E  8 U  @  
-
-ÿºº $    U† 
-  ]  
-  
-    ›   €  x   x   €:               °ªª    E  T i  @  
-
-      i                                                            ›   Š        Ô€           ›   ì  x   x   €:               Àªª    E  T i  ?  
-
-      i                                                            ›   ¨        Ô€           ›   Z  x   x   €:               ðªª    E  T e  @  
-
-       i                                                            ›   d        Ô€           ›   V  x   x   €:               Ðªª    E  T e  ?  
-
-       i                                                            ›           Ô€           ›   '÷ \   \   €  ÿÿÿÿÿÿ          àªª    E  8 P  @  
-
-ÿºº $    Pç 
-ÿ  S   
-
-    œ   €  x   x   €:               Àªª    E  T j  @  
-
-      j                                                            œ   Š        Ô€           œ   ì  x   x   €:               ðªª    E  T j  ?  
-
-      j                                                            œ   ¨        Ô€           œ   Z  x   x   €:                ªª    E  T f  @  
-
-       j                                                            œ   d        Ô€           œ   ¶  x   x   €:                	ªª    E  T f  ?  
-
-       j                                                            œ   r        Ô€           œ   & d   d   €  ÿÿÿÿÿÿ          	ªª    E  @ Q  @  
-
-ÿºº ,   $ Q†  
-  T    
-  
-    œ   o/ \   \   €  ÿÿÿÿÿÿ          ªª    E  8 V  @  
-
-ÿºº $    V† 
-  ^  
-  
-    œ   L \   \   €  ÿÿÿÿÿÿ          Ðªª    E  8 N  @  
-
-ÿºº $    N† 
-  N  
-  
-    �   €  x   x   €:               àªª    E  T k  @  
-
-      k                                                            �   Š        Ô€           �   ì  x   x   €:                	ªª    E  T k  ?  
-
-      k                                                            �   ¨        Ô€           �   Z  x   x   €:                ªª    E  T g  @  
-
-       k                                                            �   d        Ô€           �   >  x   x   €:               0	ªª    E  T g  ?  
-
-       k                                                            �   ú        Ô€           ž   €  x   x   €:               ðªª    E  T l  @  
-
-      l                                                            ž   Š        Ô€           ž   ì  x   x   €:               @	ªª    E  T l  ?  
-
-      l                                                            ž   ¨        Ô€           ž   Z  x   x   €:               0ªª    E  T h  @  
-
-       l                                                            ž   d        Ô€           ž     x   x   €:               P	ªª    E  T h  ?  
-
-       l                                                            ž   Â        Ô€           ž   - \   \   €  ÿÿÿÿÿÿ           ªª    E  8 O  @  
-
-ÿºº $    O† 
-  O  
-  
-    ž   Ô0 \   \   €  ÿÿÿÿÿÿ          @ªª    E  8 W  @  
-
-ÿºº $    W† 
-  _  
-  
-    ž   Ív d   d   €  ÿÿÿÿÿÿ          `	ªª    E  @ R  @  
-
-ÿºº ,   $ R†  
-  U    
-  
-    Ÿ   €  x   x   €:               ªª    E  T m  @  
-
-      m                                                            Ÿ   Š        Ô€           Ÿ   ì  x   x   €:               p	ªª    E  T m  ?  
-
-      m                                                            Ÿ   ¨        Ô€           Ÿ   Z  x   x   €:               Pªª    E  T i  @  
-
-       m                                                            Ÿ   d        Ô€           Ÿ   ¶  x   x   €:               €	ªª    E  T i  ?  
-
-       m                                                            Ÿ   r        Ô€               €  x   x   €:                ªª    E  T n  @  
-
-      n                                                                Š        Ô€               ì  x   x   €:               �	ªª    E  T n  ?  
-
-      n                                                                ¨        Ô€               Z  x   x   €:               `ªª    E  T j  @  
-
-       n                                                                d        Ô€                 x   x   €:                	ªª    E  T j  ?  
-
-       n                                                                Ú        Ô€               '5 \   \   €  ÿÿÿÿÿÿ          0ªª    E  8 P  @  
-
-ÿºº $    P† 
-  P  
-  
-        %A |   |   €  ÿÿÿÿÿÿ          °	ªª    E  X S  @  
-
-ÿºº D   < Sç 
-ÿ  V   
-
-†  
-  W    
-  
-        ÿä \   \   €  ÿÿÿÿÿÿ          pªª    E  8 X  @  
-
-ÿºº $    X† 
-  `  
-  
-    ¡   €  x   x   €:               @ªª    E  T o  @  
-
-      o                                                            ¡   Š        Ô€           ¡   ì  x   x   €:               À	ªª    E  T o  ?  
-
-      o                                                            ¡   ¨        Ô€           ¡   Z  x   x   €:               €ªª    E  T k  @  
-
-       o                                                            ¡   d        Ô€           ¡   ’  x   x   €:               Ð	ªª    E  T k  ?  
-
-       o                                                            ¡   N        Ô€           ¢   €  x   x   €:               Pªª    E  T p  @  
-
-      p                                                            ¢   Š        Ô€           ¢   ì  x   x   €:               à	ªª    E  T p  ?  
-
-      p                                                            ¢   ¨        Ô€           ¢   Z  x   x   €:               �ªª    E  T l  @  
-
-       p                                                            ¢   d        Ô€           ¢   â  x   x   €:               ð	ªª    E  T l  ?  
-
-       p                                                            ¢   ž        Ô€           ¢   žI \   \   €  ÿÿÿÿÿÿ           ªª    E  8 Y  @  
-
-ÿºº $    Y† 
-  a  
-  
-    ¢   P” d   d   €  ÿÿÿÿÿÿ           
-ªª    E  @ T  @  
-
-ÿºº ,   $ T†  
-  X    
-  
-    ¢   ÷b \   \   €  ÿÿÿÿÿÿ          `ªª    E  8 Q  @  
-
-ÿºº $    Q† 
-  Q  
-  
-    £   €  x   x   €:               pªª    E  T q  @  
-
-      q                                                            £   Š        Ô€           £   ì  x   x   €:               
-ªª    E  T q  ?  
-
-      q                                                            £   ¨        Ô€           £   Z  x   x   €:               °ªª    E  T m  @  
-
-       q                                                            £   d        Ô€           £   ö  x   x   €:                
-ªª    E  T m  ?  
-
-       q                                                            £   ²        Ô€           ¤   €  x   x   €:               €ªª    E  T r  @  
-
-      r                                                            ¤   Š        Ô€           ¤   ì  x   x   €:               0
-ªª    E  T r  ?  
-
-      r                                                            ¤   ¨        Ô€           ¤   Z  x   x   €:               Àªª    E  T n  @  
-
-       r                                                            ¤   d        Ô€           ¤     x   x   €:               @
-ªª    E  T n  ?  
-
-       r                                                            ¤   Â        Ô€           ¤   ³ñ d   d   €  ÿÿÿÿÿÿ          P
-ªª    E  @ U  @  
-
-ÿºº ,   $ U†  
-  Y    
-  
-    ¤   îj \   \   €  ÿÿÿÿÿÿ          Ðªª    E  8 Z  @  
-
-ÿºº $    Z† 
-  b  
-  
-    ¤   Ü® \   \   €  ÿÿÿÿÿÿ          �ªª    E  8 R  @  
-
-ÿºº $    R† 
-  R  
-  
-    ¥   €  x   x   €:                ªª    E  T s  @  
-
-      s                                                            ¥   Š        Ô€           ¥   ì  x   x   €:               `
-ªª    E  T s  ?  
-
-      s                                                            ¥   ¨        Ô€           ¥   Z  x   x   €:               àªª    E  T o  @  
-
-       s                                                            ¥   d        Ô€           ¥   Þ  x   x   €:               p
-ªª    E  T o  ?  
-
-       s                                                            ¥   š        Ô€           ¥   ÅÓ \   \   €  ÿÿÿÿÿÿ          €
-ªª    E  8 V  @  
-
-ÿºº $    Vç 
-ÿ  Z   
-
-    ¦   €  x   x   €:               °ªª    E  T t  @  
-
-      t                                                            ¦   Š        Ô€           ¦   ì  x   x   €:               �
-ªª    E  T t  ?  
-
-      t                                                            ¦   ¨        Ô€           ¦   Z  x   x   €:               ðªª    E  T p  @  
-
-       t                                                            ¦   d        Ô€           ¦   Î  x   x   €:                
-ªª    E  T p  ?  
-
-       t                                                            ¦   Š        Ô€           ¦   ³ \   \   €  ÿÿÿÿÿÿ          Àªª    E  8 S  @  
-
-ÿºº $    S† 
-  S  
-  
-    ¦   @¤ \   \   €  ÿÿÿÿÿÿ           ªª    E  8 [  @  
-
-ÿºº $    [† 
-  c  
-  
-    ¦   g0 d   d   €  ÿÿÿÿÿÿ          °
-ªª    E  @ W  @  
-
-ÿºº ,   $ W†  
-  [    
-  
-    §   €  x   x   €:               Ðªª    E  T u  @  
-
-      u                                                            §   Š        Ô€           §   ì  x   x   €:               À
-ªª    E  T u  ?  
-
-      u                                                            §   ¨        Ô€           §   Z  x   x   €:               ªª    E  T q  @  
-
-       u                                                            §   d        Ô€           §   ~  x   x   €:               Ð
-ªª    E  T q  ?  
-
-       u                                                            §   :        Ô€           ¨   €  x   x   €:               àªª    E  T v  @  
-
-      v                                                            ¨   Š        Ô€           ¨   ì  x   x   €:               à
-ªª    E  T v  ?  
-
-      v                                                            ¨   ¨        Ô€           ¨   Z  x   x   €:                ªª    E  T r  @  
-
-       v                                                            ¨   d        Ô€           ¨   Ž  x   x   €:               ð
-ªª    E  T r  ?  
-
-       v                                                            ¨   J        Ô€           ¨   – \   \   €  ÿÿÿÿÿÿ          ðªª    E  8 T  @  
-
-ÿºº $    T† 
-  T  
-  
-    ¨   í� \   \   €  ÿÿÿÿÿÿ          0ªª    E  8 \  @  
-
-ÿºº $    \† 
-  d  
-  
-    ¨   Ç~ d   d   €  ÿÿÿÿÿÿ           ªª    E  @ X  @  
-
-ÿºº ,   $ X†  
-  \    
-  
-    ©   €  x   x   €:                ªª    E  T w  @  
-
-      w                                                            ©   Š        Ô€           ©   ì  x   x   €:               ªª    E  T w  ?  
-
-      w                                                            ©   ¨        Ô€           ©   Z  x   x   €:               @ªª    E  T s  @  
-
-       w                                                            ©   d        Ô€           ©   Æ  x   x   €:                ªª    E  T s  ?  
-
-       w                                                            ©   ‚        Ô€           ª   €  x   x   €:               ªª    E  T x  @  
-
-      x                                                            ª   Š        Ô€           ª   ì  x   x   €:               0ªª    E  T x  ?  
-
-      x                                                            ª   ¨        Ô€           ª   Z  x   x   €:               Pªª    E  T t  @  
-
-       x                                                            ª   d        Ô€           ª   V  x   x   €:               @ªª    E  T t  ?  
-
-       x                                                            ª           Ô€           ª   È8  |   |   €  ÿÿÿÿÿÿ          Pªª    E  X Y  @  
-
-ÿºº D   < Yç 
-ÿ  ]   
-
-†  
-  ^    
-  
-    ª   jÈ \   \   €  ÿÿÿÿÿÿ          `ªª    E  8 ]  @  
-
-ÿºº $    ]† 
-  e  
-  
-    ª   <z \   \   €  ÿÿÿÿÿÿ           ªª    E  8 U  @  
-
-ÿºº $    U† 
-  U  
-  
-    «   €  x   x   €:               0ªª    E  T y  @  
-
-      y                                                            «   Š        Ô€           «   ì  x   x   €:               `ªª    E  T y  ?  
-
-      y                                                            «   ¨        Ô€           «   Z  x   x   €:               pªª    E  T u  @  
-
-       y                                                            «   d        Ô€           «   Ê  x   x   €:               pªª    E  T u  ?  
-
-       y                                                            «   †        Ô€           ¬   €  x   x   €:               @ªª    E  T z  @  
-
-      z                                                            ¬   Š        Ô€           ¬   ì  x   x   €:               €ªª    E  T z  ?  
-
-      z                                                            ¬   ¨        Ô€           ¬   Z  x   x   €:               €ªª    E  T v  @  
-
-       z                                                            ¬   d        Ô€           ¬   >  x   x   €:               �ªª    E  T v  ?  
-
-       z                                                            ¬   ú        Ô€           ¬   ¬P \   \   €  ÿÿÿÿÿÿ          Pªª    E  8 V  @  
-
-ÿºº $    V† 
-  V  
-  
-    ¬   uV d   d   €  ÿÿÿÿÿÿ           ªª    E  @ Z  @  
-
-ÿºº ,   $ Z†  
-  _    
-  
-    ¬   "û \   \   €  ÿÿÿÿÿÿ          �ªª    E  8 ^  @  
-
-ÿºº $    ^† 
-  f  
-  
-    ­   €  x   x   €:               `ªª    E  T {  @  
-
-      {                                                            ­   Š        Ô€           ­   ì  x   x   €:               °ªª    E  T {  ?  
-
-      {                                                            ­   ¨        Ô€           ­   Z  x   x   €:                ªª    E  T w  @  
-
-       {                                                            ­   d        Ô€           ­   B  x   x   €:               Àªª    E  T w  ?  
-
-       {                                                            ­   þ        Ô€           ®   €  x   x   €:               pªª    E  T |  @  
-
-      |                                                            ®   Š        Ô€           ®   ì  x   x   €:               Ðªª    E  T |  ?  
-
-      |                                                            ®   ª  x   x   ˆ:               Ðªª    E  T |  ?  
-
-      |                                                            ®   f        Ô€           ®     x   x   €:               Àªª    E  T x  @  
-
-       |                                                            ®   "        Ô€           ®   Ü  x   x   €:               àªª    E  T x  ?  
-
-       |                                                            ®   ˜!        Ô€           ®   ¸.  \   \   €  ÿÿÿÿÿÿ          €ªª    E  8 W  @  
-
-ÿºº $    W† 
-  W  
-  
-    ®   x{ d   d   €  ÿÿÿÿÿÿ          ðªª    E  @ [  @  
-
-ÿºº ,   $ [†  
-  `    
-  
-    ¯   €  x   x   €:               �ªª    E  T }  @  
-
-      }                                                            ¯   Š        Ô€           ¯   ì  x   x   €:                ªª    E  T }  ?  
-
-      }                                                            ¯   ¨        Ô€           ¯   Z  x   x   €:               Ðªª    E  T y  @  
-
-       }                                                            ¯   d        Ô€           ¯   ¢  x   x   €:               ªª    E  T y  ?  
-
-       }                                                            ¯   ^        Ô€           ¯   Vá \   \   €  ÿÿÿÿÿÿ           ªª    E  8 \  @  
-
-ÿºº $    \ç 
-ÿ  a   
-
-    °   €  x   x   €:                ªª    E  T ~  @  
-
-      ~                                                            °   Š        Ô€           °   ì  x   x   €:               0ªª    E  T ~  ?  
-
-      ~                                                            °   ¨        Ô€           °   Z  x   x   €:               àªª    E  T z  @  
-
-       ~                                                            °   d        Ô€           °     x   x   €:               @ªª    E  T z  ?  
-
-       ~                                                            °   ¾        Ô€           °   ¾u d   d   €  ÿÿÿÿÿÿ          Pªª    E  @ ]  @  
-
-ÿºº ,   $ ]†  
-  b    
-  
-    °   = \   \   €  ÿÿÿÿÿÿ          °ªª    E  8 X  @  
-
-ÿºº $    X† 
-  X  
-  
-    °   õÄ \   \   €  ÿÿÿÿÿÿ          ðªª    E  8 `  @  
-
-ÿºº $    `† 
-  h  
-  
-    ±   €  x   x   €:               Àªª    E  T   @  
-
-                                                                  ±   Š        Ô€           ±   ì  x   x   €:               `ªª    E  T   ?  
-
-                                                                  ±   ¨        Ô€           ±   Z  x   x   €:                ªª    E  T {  @  
-
-                                                                   ±   d        Ô€           ±   
-  x   x   €:               pªª    E  T {  ?  
-
-                                                                   ±   Æ        Ô€           ²   €  x   x   €:               Ðªª    E  T €  @  
-
-      €                                                            ²   Š        Ô€           ²   ì  x   x   €:               €ªª    E  T €  ?  
-
-      €                                                            ²   ¨        Ô€           ²   Z  x   x   €:               ªª    E  T |  @  
-
-       €                                                            ²   d        Ô€           ²   Æ  x   x   €:               �ªª    E  T |  ?  
-
-       €                                                            ²   ‚        Ô€           ²   (ü \   \   €  ÿÿÿÿÿÿ          àªª    E  8 Y  @  
-
-ÿºº $    Y† 
-  Y  
-  
-    ²   >‘ d   d   €  ÿÿÿÿÿÿ           ªª    E  @ ^  @  
-
-ÿºº ,   $ ^†  
-  c    
-  
-    ²   Ð9 \   \   €  ÿÿÿÿÿÿ           ªª    E  8 a  @  
-
-ÿºº $    a† 
-  i  
-  
-    ³   €  x   x   €:               ðªª    E  T �  @  
-
-      �                                                            ³   Š        Ô€           ³   ì  x   x   €:               °ªª    E  T �  ?  
-
-      �                                                            ³   ¨        Ô€           ³   Z  x   x   €:               0ªª    E  T }  @  
-
-       �                                                            ³   d        Ô€           ³   Þ  x   x   €:               Àªª    E  T }  ?  
-
-       �                                                            ³   š        Ô€           ´   €  x   x   €:                ªª    E  T ‚  @  
-
-      ‚                                                            ´   Š        Ô€           ´   ì  x   x   €:               Ðªª    E  T ‚  ?  
-
-      ‚                                                            ´   ¨        Ô€           ´   Z  x   x   €:               @ªª    E  T ~  @  
-
-       ‚                                                            ´   d        Ô€           ´   ¶  x   x   €:               àªª    E  T ~  ?  
-
-       ‚                                                            ´   r        Ô€           ´    ê  \   \   €  ÿÿÿÿÿÿ          ªª    E  8 Z  @  
-
-ÿºº $    Z† 
-  Z  
-  
-    ´   {Š |   |   €  ÿÿÿÿÿÿ          ðªª    E  X _  @  
-
-ÿºº D   < _ç 
-ÿ  d   
-
-†  
-  e    
-  
-    ´   >Ñ \   \   €  ÿÿÿÿÿÿ          Pªª    E  8 b  @  
-
-ÿºº $    b† 
-  j  
-  
-    µ   €  x   x   €:                ªª    E  T ƒ  @  
-
-      ƒ                                                            µ   Š        Ô€           µ   ì  x   x   €:                ªª    E  T ƒ  ?  
-
-      ƒ                                                            µ   ¨        Ô€           µ   Z  x   x   €:               `ªª    E  T   @  
-
-       ƒ                                                            µ   d        Ô€           µ   ò  x   x   €:               ªª    E  T   ?  
-
-       ƒ                                                            µ   ®        Ô€           ¶   €  x   x   €:               0ªª    E  T „  @  
-
-      „                                                            ¶   Š        Ô€           ¶   ì  x   x   €:                ªª    E  T „  ?  
-
-      „                                                            ¶   ¨        Ô€           ¶   Z  x   x   €:               pªª    E  T €  @  
-
-       „                                                            ¶   d        Ô€           ¶     x   x   €:               0ªª    E  T €  ?  
-
-       „                                                            ¶   Ò        Ô€           ¶   �ä \   \   €  ÿÿÿÿÿÿ          €ªª    E  8 c  @  
-
-ÿºº $    c† 
-  k  
-  
-    ¶   �´ \   \   €  ÿÿÿÿÿÿ          @ªª    E  8 [  @  
-
-ÿºº $    [† 
-  [  
-  
-    ¶   é› d   d   €  ÿÿÿÿÿÿ          @ªª    E  @ `  @  
-
-ÿºº ,   $ `†  
-  f    
-  
-    ·   €  x   x   €:               Pªª    E  T …  @  
-
-      …                                                            ·   Š        Ô€           ·   ì  x   x   €:               Pªª    E  T …  ?  
-
-      …                                                            ·   ¨        Ô€           ·   Z  x   x   €:               �ªª    E  T �  @  
-
-       …                                                            ·   d        Ô€           ·   ¦  x   x   €:               `ªª    E  T �  ?  
-
-       …                                                            ·   b        Ô€           ¸   €  x   x   €:               `ªª    E  T †  @  
-
-      †                                                            ¸   Š        Ô€           ¸   ì  x   x   €:               pªª    E  T †  ?  
-
-      †                                                            ¸   ¨        Ô€           ¸   Z  x   x   €:                ªª    E  T ‚  @  
-
-       †                                                            ¸   d        Ô€           ¸     x   x   €:               €ªª    E  T ‚  ?  
-
-       †                                                            ¸   Ö        Ô€           ¸   4á d   d   €  ÿÿÿÿÿÿ          �ªª    E  @ a  @  
-
-ÿºº ,   $ a†  
-  g    
-  
-    ¸   &Ô \   \   €  ÿÿÿÿÿÿ          °ªª    E  8 d  @  
-
-ÿºº $    d† 
-  l  
-  
-    ¸   ð  \   \   €  ÿÿÿÿÿÿ          pªª    E  8 \  @  
-
-ÿºº $    \† 
-  \  
-  
-    ¹   €  x   x   €:               €ªª    E  T ‡  @  
-
-      ‡                                                            ¹   Š        Ô€           ¹   ì  x   x   €:                ªª    E  T ‡  ?  
-
-      ‡                                                            ¹   ¨        Ô€           ¹   Z  x   x   €:               Àªª    E  T ƒ  @  
-
-       ‡                                                            ¹   d        Ô€           ¹   Ê  x   x   €:               °ªª    E  T ƒ  ?  
-
-       ‡                                                            ¹   †        Ô€           ¹   ÀM \   \   €  ÿÿÿÿÿÿ          Àªª    E  8 b  @  
-
-ÿºº $    bç 
-ÿ  h   
-
-    º   €  x   x   €:               �ªª    E  T ˆ  @  
-
-      ˆ                                                            º   Š        Ô€           º   ì  x   x   €:               Ðªª    E  T ˆ  ?  
-
-      ˆ                                                            º   ¨        Ô€           º   Z  x   x   €:               Ðªª    E  T „  @  
-
-       ˆ                                                            º   d        Ô€           º   2  x   x   €:               àªª    E  T „  ?  
-
-       ˆ                                                            º   î        Ô€           º   ;\  d   d   €  ÿÿÿÿÿÿ          ðªª    E  @ c  @  
-
-ÿºº ,   $ c†  
-  i    
-  
-    º   Â¢ \   \   €  ÿÿÿÿÿÿ          àªª    E  8 e  @  
-
-ÿºº $    e† 
-  m  
-  
-    º   ©^ \   \   €  ÿÿÿÿÿÿ           ªª    E  8 ]  @  
-
-ÿºº $    ]† 
-  ]  
-  
-    »   €  x   x   €:               °ªª    E  T ‰  @  
-
-      ‰                                                            »   Š        Ô€           »   ì  x   x   €:                ªª    E  T ‰  ?  
-
-      ‰                                                            »   ¨        Ô€           »   Z  x   x   €:               ðªª    E  T …  @  
-
-       ‰                                                            »   d        Ô€           »   Ž  x   x   €:               ªª    E  T …  ?  
-
-       ‰                                                            »   J        Ô€           ¼   €  x   x   €:               Àªª    E  T Š  @  
-
-      Š                                                            ¼   Š        Ô€           ¼   ì  x   x   €:                ªª    E  T Š  ?  
-
-      Š                                                            ¼   ¨        Ô€           ¼   Z  x   x   €:                ªª    E  T †  @  
-
-       Š                                                            ¼   d        Ô€           ¼   º  x   x   €:               0ªª    E  T †  ?  
-
-       Š                                                            ¼   v        Ô€           ¼   ­i \   \   €  ÿÿÿÿÿÿ          ªª    E  8 f  @  
-
-ÿºº $    f† 
-  n  
-  
-    ¼   
-" d   d   €  ÿÿÿÿÿÿ          @ªª    E  @ d  @  
-
-ÿºº ,   $ d†  
-  j    
-  
-    ¼   Êá \   \   €  ÿÿÿÿÿÿ          Ðªª    E  8 ^  @  
-
-ÿºº $    ^† 
-  ^  
-  
-    ½   €  x   x   €:               àªª    E  T ‹  @  
-
-      ‹                                                            ½   Š        Ô€           ½   ì  x   x   €:               Pªª    E  T ‹  ?  
-
-      ‹                                                            ½   ¨        Ô€           ½   Z  x   x   €:                ªª    E  T ‡  @  
-
-       ‹                                                            ½   d        Ô€           ½   ¶  x   x   €:               `ªª    E  T ‡  ?  
-
-       ‹                                                            ½   r        Ô€           ¾   €  x   x   €:               ðªª    E  T Œ  @  
-
-      Œ                                                            ¾   Š        Ô€           ¾   ì  x   x   €:               pªª    E  T Œ  ?  
-
-      Œ                                                            ¾   ¨        Ô€           ¾   Z  x   x   €:               0ªª    E  T ˆ  @  
-
-       Œ                                                            ¾   d        Ô€           ¾   ¢  x   x   €:               €ªª    E  T ˆ  ?  
-
-       Œ                                                            ¾   ^        Ô€           ¾   –„ \   \   €  ÿÿÿÿÿÿ           ªª    E  8 _  @  
-
-ÿºº $    _† 
-  _  
-  
-    ¾    í |   |   €  ÿÿÿÿÿÿ          �ªª    E  X e  @  
-
-ÿºº D   < eç 
-ÿ  k   
-
-†  
-  l    
-  
-    ¾   /« \   \   €  ÿÿÿÿÿÿ          @ªª    E  8 g  @  
-
-ÿºº $    g† 
-  o  
-  
-    ¿   €  x   x   €:               ªª    E  T �  @  
-
-      �                                                            ¿   Š        Ô€           ¿   ì  x   x   €:                ªª    E  T �  ?  
-
-      �                                                            ¿   ¨        Ô€           ¿   Z  x   x   €:               Pªª    E  T ‰  @  
-
-       �                                                            ¿   d        Ô€           ¿   ~  x   x   €:               °ªª    E  T ‰  ?  
-
-       �                                                            ¿   :        Ô€           À   €  x   x   €:                ªª    E  T Ž  @  
-
-      Ž                                                            À   Š        Ô€           À   ì  x   x   €:               Àªª    E  T Ž  ?  
-
-      Ž                                                            À   ¨        Ô€           À   Z  x   x   €:               `ªª    E  T Š  @  
-
-       Ž                                                            À   d        Ô€           À   
-  x   x   €:               Ðªª    E  T Š  ?  
-
-       Ž                                                            À   Æ        Ô€           À   Ô" \   \   €  ÿÿÿÿÿÿ          0ªª    E  8 `  @  
-
-ÿºº $    `† 
-  `  
-  
-    À   < d   d   €  ÿÿÿÿÿÿ          àªª    E  @ f  @  
-
-ÿºº ,   $ f†  
-  m    
-  
-    À   !ô \   \   €  ÿÿÿÿÿÿ          pªª    E  8 h  @  
-
-ÿºº $    h† 
-  p  
-  
-    Á   €  x   x   €:               @ªª    E  T �  @  
-
-      �                                                            Á   Š        Ô€           Á   ì  x   x   €:               ðªª    E  T �  ?  
-
-      �                                                            Á   ¨        Ô€           Á   Z  x   x   €:               €ªª    E  T ‹  @  
-
-       �                                                            Á   d        Ô€           Á     x   x   €:                ªª    E  T ‹  ?  
-
-       �                                                            Á   Ú        Ô€           Â   €  x   x   €:               Pªª    E  T �  @  
-
-      �                                                            Â   Š        Ô€           Â   ì  x   x   €:               ªª    E  T �  ?  
-
-      �                                                            Â   ¨        Ô€           Â   Z  x   x   €:               �ªª    E  T Œ  @  
-
-       �                                                            Â   d        Ô€           Â   2  x   x   €:                ªª    E  T Œ  ?  
-
-       �                                                            Â   î        Ô€           Â   ?R  \   \   €  ÿÿÿÿÿÿ          `ªª    E  8 a  @  
-
-ÿºº $    a† 
-  a  
-  
-    Â   šà \   \   €  ÿÿÿÿÿÿ           ªª    E  8 i  @  
-
-ÿºº $    i† 
-  q  
-  
-    Â    y d   d   €  ÿÿÿÿÿÿ          0ªª    E  @ g  @  
-
-ÿºº ,   $ g†  
-  n    
-  
-    Ã   €  x   x   €:               pªª    E  T ‘  @  
-
-      ‘                                                            Ã   Š        Ô€           Ã   ì  x   x   €:               @ªª    E  T ‘  ?  
-
-      ‘                                                            Ã   ¨        Ô€           Ã   Z  x   x   €:               °ªª    E  T �  @  
-
-       ‘                                                            Ã   d        Ô€           Ã     x   x   €:               Pªª    E  T �  ?  
-
-       ‘                                                            Ã   Ö        Ô€           Ã   “‡ \   \   €  ÿÿÿÿÿÿ          `ªª    E  8 h  @  
-
-ÿºº $    hç 
-ÿ  o   
-
-    Ä   €  x   x   €:               €ªª    E  T ’  @  
-
-      ’                                                            Ä   Š        Ô€           Ä   ì  x   x   €:               pªª    E  T ’  ?  
-
-      ’                                                            Ä   ¨        Ô€           Ä   Z  x   x   €:               Àªª    E  T Ž  @  
-
-       ’                                                            Ä   d        Ô€           Ä   f  x   x   €:               €ªª    E  T Ž  ?  
-
-       ’                                                            Ä   "        Ô€           Ä   ûÛ \   \   €  ÿÿÿÿÿÿ          �ªª    E  8 b  @  
-
-ÿºº $    b† 
-  b  
-  
-    Ä   øJ d   d   €  ÿÿÿÿÿÿ          �ªª    E  @ i  @  
-
-ÿºº ,   $ i†  
-  p    
-  
-    Ä   \¢ \   \   €  ÿÿÿÿÿÿ          Ðªª    E  8 j  @  
-
-ÿºº $    j† 
-  r  
-  
-    Å   €  x   x   €:                ªª    E  T “  @  
-
-      “                                                            Å   Š        Ô€           Å   ì  x   x   €:                ªª    E  T “  ?  
-
-      “                                                            Å   ¨        Ô€           Å   Z  x   x   €:               àªª    E  T �  @  
-
-       “                                                            Å   d        Ô€           Å   Ê  x   x   €:               °ªª    E  T �  ?  
-
-       “                                                            Å   †        Ô€           Æ   €  x   x   €:               °ªª    E  T ”  @  
-
-      ”                                                            Æ   Š        Ô€           Æ   ì  x   x   €:               Àªª    E  T ”  ?  
-
-      ”                                                            Æ   ¨        Ô€           Æ   Z  x   x   €:               ðªª    E  T �  @  
-
-       ”                                                            Æ   d        Ô€           Æ   Þ  x   x   €:               Ðªª    E  T �  ?  
-
-       ”                                                            Æ   š        Ô€           Æ   Xù \   \   €  ÿÿÿÿÿÿ           ªª    E  8 k  @  
-
-ÿºº $    k† 
-  s  
-  
-    Æ   &9 \   \   €  ÿÿÿÿÿÿ          Àªª    E  8 c  @  
-
-ÿºº $    c† 
-  c  
-  
-    Æ   C¸ d   d   €  ÿÿÿÿÿÿ          àªª    E  @ j  @  
-
-ÿºº ,   $ j†  
-  q    
-  
-    Ç   €  x   x   €:               Ðªª    E  T •  @  
-
-      •                                                            Ç   Š        Ô€           Ç   ì  x   x   €:               ðªª    E  T •  ?  
-
-      •                                                            Ç   ¨        Ô€           Ç   Z  x   x   €:               ªª    E  T ‘  @  
-
-       •                                                            Ç   d        Ô€           Ç     x   x   €:                ªª    E  T ‘  ?  
-
-       •                                                            Ç   Ö        Ô€           
\ No newline at end of file
diff -Naur ns-3.23/src/olsr/test/bug780-test.cc ns-3.24/src/olsr/test/bug780-test.cc
--- ns-3.23/src/olsr/test/bug780-test.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/olsr/test/bug780-test.cc	2015-09-15 11:18:44.000000000 -0700
@@ -21,32 +21,23 @@
 // should show about 395 packets; there is a ping outage from time
 // 123-127 due to the mobility.
 
-#include <fstream>
-#include <iostream>
-
 #include "ns3/test.h"
 #include "ns3/olsr-helper.h"
 #include "ns3/ipv4-list-routing-helper.h"
-#include "ns3/wifi-helper.h"
-#include "ns3/yans-wifi-helper.h"
-#include "ns3/nqos-wifi-mac-helper.h"
-#include "ns3/constant-velocity-mobility-model.h"
-#include "ns3/mobility-helper.h"
 #include "ns3/olsr-routing-protocol.h"
 #include "ns3/internet-stack-helper.h"
 #include "ns3/log.h"
-#include "ns3/config.h"
 #include "ns3/double.h"
+#include "ns3/uinteger.h"
 #include "ns3/string.h"
 #include "ns3/boolean.h"
 #include "ns3/ipv4-address-helper.h"
 #include "ns3/ipv4-interface-container.h"
 #include "ns3/internet-stack-helper.h"
-#include "ns3/v4ping-helper.h"
-#include "ns3/pcap-file.h"
-#include "ns3/pcap-test.h"
 #include "ns3/rng-seed-manager.h"
-
+#include "ns3/simple-net-device-helper.h"
+#include "ns3/simple-net-device.h"
+#include "ns3/icmpv4.h"
 #include "bug780-test.h"
 
 namespace ns3
@@ -54,20 +45,9 @@
 namespace olsr
 {
 
-const char * const Bug780Test::PREFIX = "bug780";
-
-static void
-SetVelocity (Ptr<Node> node, Vector vel)
-{
-  Ptr<ConstantVelocityMobilityModel> mobility =
-    node->GetObject<ConstantVelocityMobilityModel> ();
-  mobility->SetVelocity (vel);
-}
-
-
 Bug780Test::Bug780Test() : 
   TestCase ("Test OLSR bug 780"),
-  m_time (Seconds (200.0))
+  m_time (Seconds (200.0)), m_seq (0), m_recvCount (0)
 {
 }
 
@@ -84,118 +64,106 @@
 
   Simulator::Stop (m_time);
   Simulator::Run ();
-  Simulator::Destroy ();
 
-  CheckResults ();  
+  NS_TEST_EXPECT_MSG_EQ (m_recvCount, 192, "192 out of 200 ping received.");
+
+  Simulator::Destroy ();
 }
 
 void
 Bug780Test::CreateNodes (void)
 {
-  int nWifis = 3;
-  double SimTime = 200.0;
-  std::string phyMode ("DsssRate1Mbps");
-  int64_t streamsUsed = 0;
-
-  //sending one packets per sec
-  // Fix non-unicast data rate to be the same as that of unicast
-  Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold",
-                      StringValue ("400"));
-
-  NodeContainer adhocNodes;
-  adhocNodes.Create (nWifis);
-
-  WifiHelper wifi;
-  YansWifiPhyHelper wifiPhy =  YansWifiPhyHelper::Default ();
-  YansWifiChannelHelper wifiChannel;
-  wifiChannel.SetPropagationDelay ("ns3::ConstantSpeedPropagationDelayModel");
-  wifiChannel.AddPropagationLoss ("ns3::FriisPropagationLossModel");
-  Ptr<YansWifiChannel> chan = wifiChannel.Create ();
-  wifiPhy.SetChannel (chan);
-
-  // Add a non-QoS upper mac, and disable rate control
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
-  wifi.SetStandard (WIFI_PHY_STANDARD_80211b);
-  wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
-                                "DataMode",StringValue (phyMode),
-                                "ControlMode",StringValue (phyMode));
-
-  //set the tx range to 300
-  wifiPhy.Set ("TxPowerStart",DoubleValue (-0.1615));
-  wifiPhy.Set ("TxPowerEnd", DoubleValue (-0.1615));
-
-  // Set it to adhoc mode
-  wifiMac.SetType ("ns3::AdhocWifiMac");
-  NetDeviceContainer adhocDevices = wifi.Install (wifiPhy, wifiMac, adhocNodes);
-
-  // Assign fixed stream numbers to wifi and channel random variables
-  streamsUsed += wifi.AssignStreams (adhocDevices, streamsUsed);
-  // Assign 6 streams per Wifi device
-  NS_TEST_ASSERT_MSG_EQ (streamsUsed, (adhocDevices.GetN () * 6), "Stream assignment mismatch");
-  streamsUsed += wifiChannel.AssignStreams (chan, streamsUsed);
-  // Assign 0 additional streams per channel for this configuration 
-  NS_TEST_ASSERT_MSG_EQ (streamsUsed, (adhocDevices.GetN () * 6), "Stream assignment mismatch");
+  NodeContainer c;
+  c.Create (3);
 
+  // install TCP/IP & OLSR
   OlsrHelper olsr;
-
   InternetStackHelper internet;
   internet.SetRoutingHelper (olsr);
-  internet.Install (adhocNodes);
-  // Assign 3 streams per node to internet stack for this configuration
-  streamsUsed += internet.AssignStreams (adhocNodes, streamsUsed);
-  NS_TEST_ASSERT_MSG_EQ (streamsUsed, (adhocDevices.GetN () * 6) + (adhocNodes.GetN () * 3), "Stream assignment mismatch");
-  // Olsr uses one additional stream per wifi device for this configuration
-  streamsUsed += olsr.AssignStreams (adhocNodes, 0);
-  NS_TEST_ASSERT_MSG_EQ (streamsUsed, ((adhocDevices.GetN () * 6) + (adhocDevices.GetN () * 3) + nWifis), "Should have assigned 3 streams");
+  internet.Install (c);
+  int64_t streamsUsed = olsr.AssignStreams (c, 0);
+  NS_TEST_EXPECT_MSG_EQ (streamsUsed, 3, "Should have assigned 3 streams");
+
+  // create channel & devices
+  SimpleNetDeviceHelper simpleNetHelper;
+  simpleNetHelper.SetDeviceAttribute ("DataRate", StringValue ("10Mbps"));
+  simpleNetHelper.SetChannelAttribute ("Delay", StringValue ("2ms"));
+  NetDeviceContainer nd = simpleNetHelper.Install (c);
 
   Ipv4AddressHelper addressAdhoc;
   addressAdhoc.SetBase ("10.1.1.0", "255.255.255.0");
   Ipv4InterfaceContainer adhocInterfaces;
-  adhocInterfaces = addressAdhoc.Assign (adhocDevices);
+  adhocInterfaces = addressAdhoc.Assign (nd);
+
+  // Blacklist some devices (equivalent to Wireless out of range)
+  Ptr<SimpleNetDevice> nd0 = DynamicCast<SimpleNetDevice> (nd.Get (0));
+  Ptr<SimpleNetDevice> nd2 = DynamicCast<SimpleNetDevice> (nd.Get (2));
+  Ptr<SimpleChannel> ch = DynamicCast<SimpleChannel> (nd.Get (0)->GetChannel ());
+
+  Simulator::Schedule (Seconds (100.0), &SimpleChannel::BlackList, ch, nd0, nd2);
+  Simulator::Schedule (Seconds (100.0), &SimpleChannel::BlackList, ch, nd2, nd0);
+
+  // 3. Setup ping
+  m_socket = Socket::CreateSocket (c.Get (0), TypeId::LookupByName ("ns3::Ipv4RawSocketFactory"));
+  m_socket->SetAttribute ("Protocol", UintegerValue (1)); // icmp
+  m_socket->SetRecvCallback (MakeCallback (&Bug780Test::Receive, this));
+  InetSocketAddress src = InetSocketAddress (Ipv4Address::GetAny (), 0);
+  m_socket->Bind (src);
+  InetSocketAddress dst = InetSocketAddress (adhocInterfaces.GetAddress (2), 0);
+  m_socket->Connect (dst);
 
-  MobilityHelper mobilityAdhoc;
+  SendPing ();
+}
 
-  Ptr<ListPositionAllocator> positionAlloc_Adhoc =
-    CreateObject<ListPositionAllocator>();
-  double distance = 0.0;
-  for (uint32_t i = 0; i <= adhocNodes.GetN (); i++)
+void
+Bug780Test::SendPing ()
+{
+  if (Simulator::Now () >= m_time)
     {
-      positionAlloc_Adhoc->Add (Vector (distance,0.0,0.0));
-      distance += 250.0;
+      return;
     }
 
-  mobilityAdhoc.SetMobilityModel ("ns3::ConstantVelocityMobilityModel");
-  mobilityAdhoc.SetPositionAllocator (positionAlloc_Adhoc);
-  mobilityAdhoc.Install (adhocNodes);
-
-  //At 50 sec node 3 moves towards node 2
-  Simulator::Schedule (Seconds (50.0), &SetVelocity, adhocNodes.Get (2),Vector (-5.0,0.0,0.0));
-  //AT 100 sec set node 3 with zero velocity
-  Simulator::Schedule (Seconds (100.0), &SetVelocity, adhocNodes.Get (2),Vector (0.0,0.0,0.0));
-  //Move node2 away from node 3
-  Simulator::Schedule (Seconds (100.0), &SetVelocity, adhocNodes.Get (1),Vector (5.0,0.0,0.0));
-  //AT 150 sec set node 2 with zero velocity
-  Simulator::Schedule (Seconds (150.0), &SetVelocity, adhocNodes.Get (1), Vector (0.0,0.0,0.0));
-
-
-  // Ping 10.1.1.1 -> 10.1.1.2
-  V4PingHelper ping (adhocInterfaces.GetAddress (1));
-  ping.SetAttribute ("Verbose", BooleanValue (true));
-
-  ApplicationContainer p = ping.Install (adhocNodes.Get (0));
-  p.Start (Seconds (50));
-  p.Stop (Seconds (SimTime) - Seconds (0.001));
-
-  // pcap
-  wifiPhy.EnablePcapAll (CreateTempDirFilename (PREFIX));
+  Ptr<Packet> p = Create<Packet> ();
+  Icmpv4Echo echo;
+  echo.SetSequenceNumber (m_seq);
+  m_seq++;
+  echo.SetIdentifier (0);
+
+  Ptr<Packet> dataPacket = Create<Packet> (56);
+  echo.SetData (dataPacket);
+  p->AddHeader (echo);
+  Icmpv4Header header;
+  header.SetType (Icmpv4Header::ECHO);
+  header.SetCode (0);
+  if (Node::ChecksumEnabled ())
+    {
+      header.EnableChecksum ();
+    }
+  p->AddHeader (header);
+  m_socket->Send (p, 0);
+  Simulator::Schedule (Seconds (1), &Bug780Test::SendPing, this);
 }
 
 void
-Bug780Test::CheckResults ()
+Bug780Test::Receive (Ptr<Socket> socket)
 {
-  for (uint32_t i = 0; i < 2; ++i)
+  while (m_socket->GetRxAvailable () > 0)
     {
-      NS_PCAP_TEST_EXPECT_EQ (PREFIX << "-" << i << "-0.pcap");
+      Address from;
+      Ptr<Packet> p = m_socket->RecvFrom (0xffffffff, 0, from);
+
+      NS_ASSERT (InetSocketAddress::IsMatchingType (from));
+      InetSocketAddress realFrom = InetSocketAddress::ConvertFrom (from);
+      NS_ASSERT (realFrom.GetPort () == 1); // protocol should be icmp.
+      Ipv4Header ipv4;
+      p->RemoveHeader (ipv4);
+      NS_ASSERT (ipv4.GetProtocol () == 1); // protocol should be icmp.
+      Icmpv4Header icmp;
+      p->RemoveHeader (icmp);
+      if (icmp.GetType () == Icmpv4Header::ECHO_REPLY)
+        {
+          m_recvCount ++;
+        }
     }
 }
 
diff -Naur ns-3.23/src/olsr/test/bug780-test.h ns-3.24/src/olsr/test/bug780-test.h
--- ns-3.23/src/olsr/test/bug780-test.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/olsr/test/bug780-test.h	2015-09-15 11:18:44.000000000 -0700
@@ -34,16 +34,23 @@
   Bug780Test (); 
   ~Bug780Test ();
 private:
-  /// Unique PCAP files prefix for this test
-  static const char * const PREFIX;
   /// Total simulation time
   const Time m_time;
   /// Create & configure test network
   void CreateNodes ();
-  /// Compare traces with reference ones
-  void CheckResults ();
   /// Go
   void DoRun ();
+  /// Send one ping
+  void SendPing ();
+  /// Receive echo reply
+  /// \param socket the socket
+  void Receive (Ptr<Socket> socket);
+  /// Socket
+  Ptr<Socket> m_socket;
+  /// Sequence number
+  uint16_t m_seq;
+  /// Received ECHO Reply counter
+  uint16_t m_recvCount;
 };
 
 }
diff -Naur ns-3.23/src/olsr/test/hello-regression-test.cc ns-3.24/src/olsr/test/hello-regression-test.cc
--- ns-3.23/src/olsr/test/hello-regression-test.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/olsr/test/hello-regression-test.cc	2015-09-15 11:18:44.000000000 -0700
@@ -18,6 +18,7 @@
  * Authors: Pavel Boyko <boyko@iitp.ru>
  */
 
+#include <vector>
 #include "hello-regression-test.h"
 #include "ns3/simulator.h"
 #include "ns3/random-variable-stream.h"
@@ -25,24 +26,25 @@
 #include "ns3/double.h"
 #include "ns3/uinteger.h"
 #include "ns3/string.h"
-#include "ns3/pcap-file.h"
 #include "ns3/olsr-helper.h"
 #include "ns3/internet-stack-helper.h"
-#include "ns3/point-to-point-helper.h"
+#include "ns3/simple-net-device-helper.h"
 #include "ns3/ipv4-address-helper.h"
 #include "ns3/abort.h"
-#include "ns3/pcap-test.h"
+#include "ns3/socket-factory.h"
+#include "ns3/ipv4-raw-socket-factory.h"
+#include "ns3/udp-l4-protocol.h"
+#include "ns3/udp-header.h"
+#include "ns3/olsr-header.h"
 
 namespace ns3
 {
 namespace olsr
 {
 
-const char * const HelloRegressionTest::PREFIX = "olsr-hello-regression-test";
-
 HelloRegressionTest::HelloRegressionTest() : 
   TestCase ("Test OLSR Hello messages generation"),
-  m_time (Seconds (5))
+  m_time (Seconds (5)), m_countA (0), m_countB (0)
 {
 }
 
@@ -59,9 +61,10 @@
 
   Simulator::Stop (m_time);
   Simulator::Run ();
-  Simulator::Destroy ();
 
-  CheckResults ();
+  m_rxSocketA = 0;
+  m_rxSocketB = 0;
+  Simulator::Destroy ();
 }
 
 void
@@ -78,26 +81,122 @@
   // Assign OLSR RVs to specific streams
   int64_t streamsUsed = olsr.AssignStreams (c, 0);
   NS_TEST_ASSERT_MSG_EQ (streamsUsed, 2, "Should have assigned 2 streams");
-  // create p2p channel & devices
-  PointToPointHelper p2p;
-  p2p.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
-  p2p.SetChannelAttribute ("Delay", StringValue ("2ms"));
-  NetDeviceContainer nd = p2p.Install (c);
+  // create channel & devices
+  SimpleNetDeviceHelper simpleNetHelper;
+  simpleNetHelper.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
+  simpleNetHelper.SetChannelAttribute ("Delay", StringValue ("2ms"));
+  NetDeviceContainer nd = simpleNetHelper.Install (c);
   // setup IP addresses
   Ipv4AddressHelper ipv4;
   ipv4.SetBase ("10.1.1.0", "255.255.255.0");
   ipv4.Assign (nd);
-  // setup PCAP traces
-  p2p.EnablePcapAll (CreateTempDirFilename (PREFIX));
+
+  // Create the sockets
+  Ptr<SocketFactory> rxSocketFactoryA = c.Get (0)->GetObject<Ipv4RawSocketFactory> ();
+  m_rxSocketA = DynamicCast<Ipv4RawSocketImpl> (rxSocketFactoryA->CreateSocket ());
+  m_rxSocketA->SetProtocol (UdpL4Protocol::PROT_NUMBER);
+  m_rxSocketA->SetRecvCallback (MakeCallback (&HelloRegressionTest::ReceivePktProbeA, this));
+
+  Ptr<SocketFactory> rxSocketFactoryB = c.Get (1)->GetObject<Ipv4RawSocketFactory> ();
+  m_rxSocketB = DynamicCast<Ipv4RawSocketImpl> (rxSocketFactoryB->CreateSocket ());
+  m_rxSocketB->SetProtocol (UdpL4Protocol::PROT_NUMBER);
+  m_rxSocketB->SetRecvCallback (MakeCallback (&HelloRegressionTest::ReceivePktProbeB, this));
+}
+
+void
+HelloRegressionTest::ReceivePktProbeA (Ptr<Socket> socket)
+{
+  uint32_t availableData;
+  availableData = socket->GetRxAvailable ();
+  Ptr<Packet> receivedPacketProbe = socket->Recv (std::numeric_limits<uint32_t>::max (), 0);
+  NS_ASSERT (availableData == receivedPacketProbe->GetSize ());
+
+  Ipv4Header ipHdr;
+  receivedPacketProbe->RemoveHeader (ipHdr);
+  UdpHeader udpHdr;
+  receivedPacketProbe->RemoveHeader (udpHdr);
+  PacketHeader pktHdr;
+  receivedPacketProbe->RemoveHeader (pktHdr);
+  MessageHeader msgHdr;
+  receivedPacketProbe->RemoveHeader (msgHdr);
+
+  const olsr::MessageHeader::Hello &hello = msgHdr.GetHello ();
+  NS_TEST_EXPECT_MSG_EQ (msgHdr.GetOriginatorAddress (), Ipv4Address ("10.1.1.2"), "Originator address.");
+
+  if (m_countA == 0)
+    {
+      NS_TEST_EXPECT_MSG_EQ (hello.linkMessages.size (), 0, "No Link messages on the first Hello.");
+    }
+  else
+    {
+      NS_TEST_EXPECT_MSG_EQ (hello.linkMessages.size (), 1, "One Link message on the second and third Hello.");
+    }
+
+  std::vector<olsr::MessageHeader::Hello::LinkMessage>::const_iterator iter;
+  for (iter = hello.linkMessages.begin (); iter != hello.linkMessages.end (); iter ++)
+    {
+      if (m_countA == 1)
+        {
+          NS_TEST_EXPECT_MSG_EQ (iter->linkCode, 1, "Asymmetric link on second Hello.");
+        }
+      else
+        {
+          NS_TEST_EXPECT_MSG_EQ (iter->linkCode, 6, "Symmetric link on second Hello.");
+        }
+
+      NS_TEST_EXPECT_MSG_EQ (iter->neighborInterfaceAddresses.size (), 1, "Only one neighbor.");
+      NS_TEST_EXPECT_MSG_EQ (iter->neighborInterfaceAddresses[0], Ipv4Address ("10.1.1.1"), "Only one neighbor.");
+    }
+
+  m_countA ++;
 }
 
 void
-HelloRegressionTest::CheckResults ()
+HelloRegressionTest::ReceivePktProbeB (Ptr<Socket> socket)
 {
-  for (uint32_t i = 0; i < 2; ++i)
+  uint32_t availableData;
+  availableData = socket->GetRxAvailable ();
+  Ptr<Packet> receivedPacketProbe = socket->Recv (std::numeric_limits<uint32_t>::max (), 0);
+  NS_ASSERT (availableData == receivedPacketProbe->GetSize ());
+
+  Ipv4Header ipHdr;
+  receivedPacketProbe->RemoveHeader (ipHdr);
+  UdpHeader udpHdr;
+  receivedPacketProbe->RemoveHeader (udpHdr);
+  PacketHeader pktHdr;
+  receivedPacketProbe->RemoveHeader (pktHdr);
+  MessageHeader msgHdr;
+  receivedPacketProbe->RemoveHeader (msgHdr);
+
+  const olsr::MessageHeader::Hello &hello = msgHdr.GetHello ();
+  NS_TEST_EXPECT_MSG_EQ (msgHdr.GetOriginatorAddress (), Ipv4Address ("10.1.1.1"), "Originator address.");
+
+  if (m_countA == 0)
     {
-      NS_PCAP_TEST_EXPECT_EQ (PREFIX << "-" << i << "-1.pcap");
+      NS_TEST_EXPECT_MSG_EQ (hello.linkMessages.size (), 0, "No Link messages on the first Hello.");
     }
+  else
+    {
+      NS_TEST_EXPECT_MSG_EQ (hello.linkMessages.size (), 1, "One Link message on the second and third Hello.");
+    }
+
+  std::vector<olsr::MessageHeader::Hello::LinkMessage>::const_iterator iter;
+  for (iter = hello.linkMessages.begin (); iter != hello.linkMessages.end (); iter ++)
+    {
+      if (m_countA == 1)
+        {
+          NS_TEST_EXPECT_MSG_EQ (iter->linkCode, 1, "Asymmetric link on second Hello.");
+        }
+      else
+        {
+          NS_TEST_EXPECT_MSG_EQ (iter->linkCode, 6, "Symmetric link on second Hello.");
+        }
+
+      NS_TEST_EXPECT_MSG_EQ (iter->neighborInterfaceAddresses.size (), 1, "Only one neighbor.");
+      NS_TEST_EXPECT_MSG_EQ (iter->neighborInterfaceAddresses[0], Ipv4Address ("10.1.1.2"), "Only one neighbor.");
+    }
+
+  m_countB ++;
 }
 
 }
diff -Naur ns-3.23/src/olsr/test/hello-regression-test.h ns-3.24/src/olsr/test/hello-regression-test.h
--- ns-3.23/src/olsr/test/hello-regression-test.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/olsr/test/hello-regression-test.h	2015-09-15 11:18:44.000000000 -0700
@@ -23,6 +23,8 @@
 
 #include "ns3/test.h"
 #include "ns3/nstime.h"
+#include "ns3/socket.h"
+#include "ns3/ipv4-raw-socket-impl.h"
 #include "ns3/node-container.h"
 
 namespace ns3
@@ -53,16 +55,25 @@
   HelloRegressionTest (); 
   ~HelloRegressionTest ();
 private:
-  /// Unique PCAP files prefix for this test
-  static const char * const PREFIX;
   /// Total simulation time
   const Time m_time;
   /// Create & configure test network
   void CreateNodes ();
-  /// Compare traces with reference ones
-  void CheckResults ();
   /// Go
   void DoRun ();
+
+  /// Receive raw data on node A
+  void ReceivePktProbeA (Ptr<Socket> socket);
+  /// Packet counter on node A
+  uint8_t m_countA;
+  /// Receiving socket on node A
+  Ptr<Ipv4RawSocketImpl> m_rxSocketA;
+  /// Receive raw data on node B
+  void ReceivePktProbeB (Ptr<Socket> socket);
+  /// Packet counter on node B
+  uint8_t m_countB;
+  /// Receiving socket on node B
+  Ptr<Ipv4RawSocketImpl> m_rxSocketB;
 };
 
 }
diff -Naur ns-3.23/src/olsr/test/olsr-hello-regression-test-0-1.pcap ns-3.24/src/olsr/test/olsr-hello-regression-test-0-1.pcap
--- ns-3.23/src/olsr/test/olsr-hello-regression-test-0-1.pcap	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/olsr/test/olsr-hello-regression-test-0-1.pcap	1969-12-31 16:00:00.000000000 -0800
@@ -1,23 +0,0 @@
-ÔÃ²¡          ÿÿ  	       ‹æ 2   2    !E  0    @  
-
-ÿºº      † 
-         –” 2   2    !E  0    @  
-
-ÿºº      † 
-        Ûñ :   :    !E  8   @  
-
-ÿºº $    † 
-      
-   wS :   :    !E  8   @  
-
-ÿºº $    † 
-      
-   /ï  :   :    !E  8   @  
-
-ÿºº $    † 
-      
-   ßý  :   :    !E  8   @  
-
-ÿºº $    † 
-      
-
\ No newline at end of file
diff -Naur ns-3.23/src/olsr/test/olsr-hello-regression-test-1-1.pcap ns-3.24/src/olsr/test/olsr-hello-regression-test-1-1.pcap
--- ns-3.23/src/olsr/test/olsr-hello-regression-test-1-1.pcap	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/olsr/test/olsr-hello-regression-test-1-1.pcap	1969-12-31 16:00:00.000000000 -0800
@@ -1,23 +0,0 @@
-ÔÃ²¡          ÿÿ  	       «î 2   2    !E  0    @  
-
-ÿºº      † 
-         vŒ 2   2    !E  0    @  
-
-ÿºº      † 
-        ú :   :    !E  8   @  
-
-ÿºº $    † 
-      
-   JK :   :    !E  8   @  
-
-ÿºº $    † 
-      
-   ²õ  :   :    !E  8   @  
-
-ÿºº $    † 
-      
-   \÷  :   :    !E  8   @  
-
-ÿºº $    † 
-      
-
\ No newline at end of file
diff -Naur ns-3.23/src/olsr/test/olsr-tc-regression-test-0-1.pcap ns-3.24/src/olsr/test/olsr-tc-regression-test-0-1.pcap
--- ns-3.23/src/olsr/test/olsr-tc-regression-test-0-1.pcap	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/olsr/test/olsr-tc-regression-test-0-1.pcap	1969-12-31 16:00:00.000000000 -0800
@@ -1,108 +0,0 @@
-ÔÃ²¡          ÿÿ  i       ‹æ T   T   €  ÿÿÿÿÿÿ            ªª    E  0    @  
-
-ÿºº      † 
-             þŒ T   T   €  ÿÿÿÿÿÿ            ªª    E  0    @  
-
-ÿºº      † 
-            Ûñ \   \   €  ÿÿÿÿÿÿ           ªª    E  8   @  
-
-ÿºº $    † 
-      
-       êK d   d   €  ÿÿÿÿÿÿ           ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       /ï  \   \   €  ÿÿÿÿÿÿ            ªª    E  8   @  
-
-ÿºº $    † 
-      
-       Sö  d   d   €  ÿÿÿÿÿÿ            ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       0Ð d   d   €  ÿÿÿÿÿÿ          0 ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       àG \   \   €  ÿÿÿÿÿÿ          0 ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       ô  d   d   €  ÿÿÿÿÿÿ          @ ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       ±6 \   \   €  ÿÿÿÿÿÿ          @ ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    
-   –  |   |   €  ÿÿÿÿÿÿ          P ªª    E  X   @  
-
-ÿºº D   < ç 
-ÿ     
-
-†  
-      
-  
-    
-   "´ \   \   €  ÿÿÿÿÿÿ          P ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       ¬B \   \   €  ÿÿÿÿÿÿ          ` ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       y  d   d   €  ÿÿÿÿÿÿ          ` ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       ˆ¬ \   \   €  ÿÿÿÿÿÿ          p ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       Y… d   d   €  ÿÿÿÿÿÿ          p ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       Gu \   \   €  ÿÿÿÿÿÿ          € ªª    E  8   @  
-
-ÿºº $    ç 
-ÿ  	   
-
-       î8 \   \   €  ÿÿÿÿÿÿ          € ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       4ƒ d   d   €  ÿÿÿÿÿÿ          � ªª    E  @ 	  @  
-
-ÿºº ,   $ 	†  
-  
-    
-  
-       U  d   d   €  ÿÿÿÿÿÿ            ªª    E  @ 
-  @  
-
-ÿºº ,   $ 
-†  
-      
-  
-       óC \   \   €  ÿÿÿÿÿÿ          � ªª    E  8 	  @  
-
-ÿºº $    	† 
-  	  
-  
-    
\ No newline at end of file
diff -Naur ns-3.23/src/olsr/test/olsr-tc-regression-test-1-1.pcap ns-3.24/src/olsr/test/olsr-tc-regression-test-1-1.pcap
--- ns-3.23/src/olsr/test/olsr-tc-regression-test-1-1.pcap	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/olsr/test/olsr-tc-regression-test-1-1.pcap	1969-12-31 16:00:00.000000000 -0800
@@ -1,155 +0,0 @@
-ÔÃ²¡          ÿÿ  i       ï‘ T   T   €  ÿÿÿÿÿÿ            ªª    E  0    @  
-
-ÿºº      † 
-             ç T   T   €  ÿÿÿÿÿÿ            ªª    E  0    @  
-
-ÿºº      † 
-             vŒ T   T   €  ÿÿÿÿÿÿ            ªª    E  0    @  
-
-ÿºº      † 
-            µ \   \   €  ÿÿÿÿÿÿ           ªª    E  8   @  
-
-ÿºº $    † 
-      
-       oò \   \   €  ÿÿÿÿÿÿ           ªª    E  8   @  
-
-ÿºº $    † 
-      
-       JK d   d   €  ÿÿÿÿÿÿ           ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       Äï  \   \   €  ÿÿÿÿÿÿ            ªª    E  8   @  
-
-ÿºº $    † 
-      
-       ²õ  d   d   €  ÿÿÿÿÿÿ            ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       ” \   \   €  ÿÿÿÿÿÿ            ªª    E  8   @  
-
-ÿºº $    † 
-      
-       ,— \   \   €  ÿÿÿÿÿÿ          0 ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       �Ï d   d   €  ÿÿÿÿÿÿ          0 ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       uH \   \   €  ÿÿÿÿÿÿ          0 ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       T  d   d   €  ÿÿÿÿÿÿ          @ ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       ÞN \   \   €  ÿÿÿÿÿÿ          @ ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       E7 \   \   €  ÿÿÿÿÿÿ          @ ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    
-   ð8  \   \   €  ÿÿÿÿÿÿ          P ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    
-   B•  |   |   €  ÿÿÿÿÿÿ          P ªª    E  X   @  
-
-ÿºº D   < ç 
-ÿ     
-
-†  
-      
-  
-    
-   ¶´ \   \   €  ÿÿÿÿÿÿ          P ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       AC \   \   €  ÿÿÿÿÿÿ          ` ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       N+ \   \   €  ÿÿÿÿÿÿ          ` ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       Ø d   d   €  ÿÿÿÿÿÿ          ` ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       ­ \   \   €  ÿÿÿÿÿÿ          p ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       ÒC \   \   €  ÿÿÿÿÿÿ          p ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       ¹„ d   d   €  ÿÿÿÿÿÿ          p ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       ²t \   \   €  ÿÿÿÿÿÿ          € ªª    E  8   @  
-
-ÿºº $    ç 
-ÿ  	   
-
-       ‚9 \   \   €  ÿÿÿÿÿÿ          € ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       ƒÂ \   \   €  ÿÿÿÿÿÿ          € ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       ”‚ d   d   €  ÿÿÿÿÿÿ          � ªª    E  @ 	  @  
-
-ÿºº ,   $ 	†  
-  
-    
-  
-       µ  d   d   €  ÿÿÿÿÿÿ            ªª    E  @ 
-  @  
-
-ÿºº ,   $ 
-†  
-      
-  
-       ‡D \   \   €  ÿÿÿÿÿÿ          � ªª    E  8 	  @  
-
-ÿºº $    	† 
-  	  
-  
-       ¦m \   \   €  ÿÿÿÿÿÿ          � ªª    E  8 	  @  
-
-ÿºº $    	† 
-  	  
-  
-    
\ No newline at end of file
diff -Naur ns-3.23/src/olsr/test/olsr-tc-regression-test-2-1.pcap ns-3.24/src/olsr/test/olsr-tc-regression-test-2-1.pcap
--- ns-3.23/src/olsr/test/olsr-tc-regression-test-2-1.pcap	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/olsr/test/olsr-tc-regression-test-2-1.pcap	1969-12-31 16:00:00.000000000 -0800
@@ -1,108 +0,0 @@
-ÔÃ²¡          ÿÿ  i       f‘ T   T   €  ÿÿÿÿÿÿ            ªª    E  0    @  
-
-ÿºº      † 
-             þŒ T   T   €  ÿÿÿÿÿÿ            ªª    E  0    @  
-
-ÿºº      † 
-            p´ \   \   €  ÿÿÿÿÿÿ           ªª    E  8   @  
-
-ÿºº $    † 
-      
-       êK d   d   €  ÿÿÿÿÿÿ           ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       Sö  d   d   €  ÿÿÿÿÿÿ            ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       q“ \   \   €  ÿÿÿÿÿÿ            ªª    E  8   @  
-
-ÿºº $    † 
-      
-       —– \   \   €  ÿÿÿÿÿÿ          0 ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       0Ð d   d   €  ÿÿÿÿÿÿ          0 ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       ô  d   d   €  ÿÿÿÿÿÿ          @ ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       IN \   \   €  ÿÿÿÿÿÿ          @ ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    
-   [8  \   \   €  ÿÿÿÿÿÿ          P ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-    
-   –  |   |   €  ÿÿÿÿÿÿ          P ªª    E  X   @  
-
-ÿºº D   < ç 
-ÿ     
-
-†  
-      
-  
-       º* \   \   €  ÿÿÿÿÿÿ          ` ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       y  d   d   €  ÿÿÿÿÿÿ          ` ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       =C \   \   €  ÿÿÿÿÿÿ          p ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       Y… d   d   €  ÿÿÿÿÿÿ          p ªª    E  @   @  
-
-ÿºº ,   $ †  
-      
-  
-       Gu \   \   €  ÿÿÿÿÿÿ          € ªª    E  8   @  
-
-ÿºº $    ç 
-ÿ  	   
-
-       ïÁ \   \   €  ÿÿÿÿÿÿ          € ªª    E  8   @  
-
-ÿºº $    † 
-    
-  
-       4ƒ d   d   €  ÿÿÿÿÿÿ          � ªª    E  @ 	  @  
-
-ÿºº ,   $ 	†  
-  
-    
-  
-       U  d   d   €  ÿÿÿÿÿÿ            ªª    E  @ 
-  @  
-
-ÿºº ,   $ 
-†  
-      
-  
-       m \   \   €  ÿÿÿÿÿÿ          � ªª    E  8 	  @  
-
-ÿºº $    	† 
-  	  
-  
-    
\ No newline at end of file
diff -Naur ns-3.23/src/olsr/test/tc-regression-test.cc ns-3.24/src/olsr/test/tc-regression-test.cc
--- ns-3.23/src/olsr/test/tc-regression-test.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/olsr/test/tc-regression-test.cc	2015-09-15 11:18:44.000000000 -0700
@@ -26,28 +26,27 @@
 #include "ns3/double.h"
 #include "ns3/uinteger.h"
 #include "ns3/string.h"
-#include "ns3/pcap-test.h"
-#include "ns3/pcap-file.h"
 #include "ns3/olsr-helper.h"
 #include "ns3/internet-stack-helper.h"
-#include "ns3/point-to-point-helper.h"
 #include "ns3/ipv4-address-helper.h"
 #include "ns3/abort.h"
-#include "ns3/yans-wifi-helper.h"
-#include "ns3/mobility-helper.h"
-#include "ns3/nqos-wifi-mac-helper.h"
+#include "ns3/socket-factory.h"
+#include "ns3/ipv4-raw-socket-factory.h"
+#include "ns3/udp-l4-protocol.h"
+#include "ns3/udp-header.h"
+#include "ns3/olsr-header.h"
+#include "ns3/simple-net-device-helper.h"
+#include "ns3/simple-net-device.h"
 
 namespace ns3
 {
 namespace olsr
 {
 
-const char * const TcRegressionTest::PREFIX = "olsr-tc-regression-test";
-
 TcRegressionTest::TcRegressionTest() : 
   TestCase ("Test OLSR Topology Control message generation"),
   m_time (Seconds (20)),
-  m_step (120)
+  m_countA (0), m_countB (0), m_countC (0)
 {
 }
 
@@ -64,9 +63,11 @@
 
   Simulator::Stop (m_time);
   Simulator::Run ();
-  Simulator::Destroy ();
 
-  CheckResults ();
+  m_rxSocketA = 0;
+  m_rxSocketB = 0;
+  m_rxSocketC = 0;
+  Simulator::Destroy ();
 }
 
 void
@@ -76,55 +77,238 @@
   NodeContainer c;
   c.Create (3);
 
-  // place nodes in the chain
-  MobilityHelper mobility;
-  mobility.SetPositionAllocator ("ns3::GridPositionAllocator",
-                                 "MinX", DoubleValue (0.0),
-                                 "MinY", DoubleValue (0.0),
-                                 "DeltaX", DoubleValue (m_step),
-                                 "DeltaY", DoubleValue (0),
-                                 "GridWidth", UintegerValue (3),
-                                 "LayoutType", StringValue ("RowFirst"));
-  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
-  mobility.Install (c);
-
   // install TCP/IP & OLSR
   OlsrHelper olsr;
   InternetStackHelper internet;
   internet.SetRoutingHelper (olsr);
   internet.Install (c);
   int64_t streamsUsed = olsr.AssignStreams (c, 0);
-  NS_TEST_EXPECT_MSG_EQ (streamsUsed, 3, "Should have assigned 2 streams");
+  NS_TEST_EXPECT_MSG_EQ (streamsUsed, 3, "Should have assigned 3 streams");
 
-  // create wifi channel & devices
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
-  wifiMac.SetType ("ns3::AdhocWifiMac");
-  YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
-  YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default ();
-  wifiPhy.SetChannel (wifiChannel.Create ());
-  // This test suite output was originally based on YansErrorRateModel 
-  wifiPhy.SetErrorRateModel ("ns3::YansErrorRateModel");
-  WifiHelper wifi = WifiHelper::Default ();
-  wifi.SetStandard (WIFI_PHY_STANDARD_80211a);
-  wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager", "DataMode", StringValue ("OfdmRate6Mbps"), "RtsCtsThreshold", StringValue ("2200"));
-  NetDeviceContainer nd = wifi.Install (wifiPhy, wifiMac, c); 
+  // create channel & devices
+  SimpleNetDeviceHelper simpleNetHelper;
+  simpleNetHelper.SetDeviceAttribute ("DataRate", StringValue ("10Mbps"));
+  simpleNetHelper.SetChannelAttribute ("Delay", StringValue ("2ms"));
+  NetDeviceContainer nd = simpleNetHelper.Install (c);
+
+  // Blacklist some devices (equivalent to Wireless out of range)
+  Ptr<SimpleNetDevice> nd0 = DynamicCast<SimpleNetDevice> (nd.Get (0));
+  Ptr<SimpleNetDevice> nd2 = DynamicCast<SimpleNetDevice> (nd.Get (2));
+  Ptr<SimpleChannel> ch = DynamicCast<SimpleChannel> (nd.Get (0)->GetChannel ());
+  ch->BlackList (nd0, nd2);
+  ch->BlackList (nd2, nd0);
 
   // setup IP addresses
   Ipv4AddressHelper ipv4;
   ipv4.SetBase ("10.1.1.0", "255.255.255.0");
   ipv4.Assign (nd);
 
-  // setup PCAP traces
-  wifiPhy.EnablePcapAll (CreateTempDirFilename(PREFIX));
+  // Create the sockets
+  Ptr<SocketFactory> rxSocketFactoryA = c.Get (0)->GetObject<Ipv4RawSocketFactory> ();
+  m_rxSocketA = DynamicCast<Ipv4RawSocketImpl> (rxSocketFactoryA->CreateSocket ());
+  m_rxSocketA->SetProtocol (UdpL4Protocol::PROT_NUMBER);
+  m_rxSocketA->SetRecvCallback (MakeCallback (&TcRegressionTest::ReceivePktProbeA, this));
+
+  Ptr<SocketFactory> rxSocketFactoryB = c.Get (1)->GetObject<Ipv4RawSocketFactory> ();
+  m_rxSocketB = DynamicCast<Ipv4RawSocketImpl> (rxSocketFactoryB->CreateSocket ());
+  m_rxSocketB->SetProtocol (UdpL4Protocol::PROT_NUMBER);
+  m_rxSocketB->SetRecvCallback (MakeCallback (&TcRegressionTest::ReceivePktProbeB, this));
+
+  Ptr<SocketFactory> rxSocketFactoryC = c.Get (2)->GetObject<Ipv4RawSocketFactory> ();
+  m_rxSocketC = DynamicCast<Ipv4RawSocketImpl> (rxSocketFactoryC->CreateSocket ());
+  m_rxSocketC->SetProtocol (UdpL4Protocol::PROT_NUMBER);
+  m_rxSocketC->SetRecvCallback (MakeCallback (&TcRegressionTest::ReceivePktProbeC, this));
+}
+
+// Note: this is identical to ReceivePktProbeC, but the packet counter needs to be different.
+void
+TcRegressionTest::ReceivePktProbeA (Ptr<Socket> socket)
+{
+  uint32_t availableData;
+  availableData = socket->GetRxAvailable ();
+  Ptr<Packet> receivedPacketProbe = socket->Recv (std::numeric_limits<uint32_t>::max (), 0);
+  NS_ASSERT (availableData == receivedPacketProbe->GetSize ());
+
+  Ipv4Header ipHdr;
+  receivedPacketProbe->RemoveHeader (ipHdr);
+  UdpHeader udpHdr;
+  receivedPacketProbe->RemoveHeader (udpHdr);
+  PacketHeader pktHdr;
+  receivedPacketProbe->RemoveHeader (pktHdr);
+
+  if (m_countA == 0)
+    {
+      MessageHeader msgHdr;
+      receivedPacketProbe->RemoveHeader (msgHdr);
+      const olsr::MessageHeader::Hello &hello = msgHdr.GetHello ();
+      NS_TEST_EXPECT_MSG_EQ (msgHdr.GetOriginatorAddress (), Ipv4Address ("10.1.1.2"), "Originator address.");
+      NS_TEST_EXPECT_MSG_EQ (hello.linkMessages.size (), 0, "0 - Hello, No messages.");
+    }
+  else if (m_countA == 1)
+    {
+      MessageHeader msgHdr;
+      receivedPacketProbe->RemoveHeader (msgHdr);
+      NS_TEST_EXPECT_MSG_EQ (msgHdr.GetOriginatorAddress (), Ipv4Address ("10.1.1.2"), "Originator address.");
+      const olsr::MessageHeader::Hello &hello = msgHdr.GetHello ();
+      NS_TEST_EXPECT_MSG_EQ (hello.linkMessages.size (), 2, "1 - Hello, one message.");
+      NS_TEST_EXPECT_MSG_EQ (hello.linkMessages[0].linkCode, 1, "1 - Asymmetric Link.");
+      NS_TEST_EXPECT_MSG_EQ (hello.linkMessages[0].neighborInterfaceAddresses.size (), 1, "1 - Neighbor.");
+      NS_TEST_EXPECT_MSG_EQ (hello.linkMessages[0].neighborInterfaceAddresses[0], Ipv4Address ("10.1.1.3"), "1 - Neighbor.");
+      NS_TEST_EXPECT_MSG_EQ (hello.linkMessages[1].linkCode, 1, "1 - Asymmetric Link.");
+      NS_TEST_EXPECT_MSG_EQ (hello.linkMessages[1].neighborInterfaceAddresses.size (), 1, "1 - Neighbor.");
+      NS_TEST_EXPECT_MSG_EQ (hello.linkMessages[1].neighborInterfaceAddresses[0], Ipv4Address ("10.1.1.1"), "1 - Neighbor.");
+    }
+  else
+    {
+      if (m_countA == 5 || m_countA == 8)
+        {
+          MessageHeader msgHdr;
+          receivedPacketProbe->RemoveHeader (msgHdr);
+          const olsr::MessageHeader::Tc &tc = msgHdr.GetTc ();
+          NS_TEST_EXPECT_MSG_EQ (msgHdr.GetOriginatorAddress (), Ipv4Address ("10.1.1.2"), "Originator address.");
+          NS_TEST_EXPECT_MSG_EQ (tc.neighborAddresses.size (), 2, int(m_countA) << " - TC, one message.");
+          NS_TEST_EXPECT_MSG_EQ (tc.neighborAddresses[0], Ipv4Address ("10.1.1.3"), int(m_countA) << " - Neighbor.");
+          NS_TEST_EXPECT_MSG_EQ (tc.neighborAddresses[1], Ipv4Address ("10.1.1.1"), int(m_countA) << " - Neighbor.");
+        }
+      if (m_countA != 8)
+        {
+          MessageHeader msgHdr;
+          receivedPacketProbe->RemoveHeader (msgHdr);
+          NS_TEST_EXPECT_MSG_EQ (msgHdr.GetOriginatorAddress (), Ipv4Address ("10.1.1.2"), "Originator address.");
+          const olsr::MessageHeader::Hello &hello = msgHdr.GetHello ();
+          NS_TEST_EXPECT_MSG_EQ (hello.linkMessages.size (), 2, int(m_countA) << " - Hello, one message.");
+          NS_TEST_EXPECT_MSG_EQ (hello.linkMessages[0].linkCode, 6, int(m_countA) << " - Symmetric Link.");
+          NS_TEST_EXPECT_MSG_EQ (hello.linkMessages[0].neighborInterfaceAddresses.size (), 1, int(m_countA) << " - Neighbor.");
+          NS_TEST_EXPECT_MSG_EQ (hello.linkMessages[0].neighborInterfaceAddresses[0], Ipv4Address ("10.1.1.3"), int(m_countA) << " - Neighbor.");
+          NS_TEST_EXPECT_MSG_EQ (hello.linkMessages[1].linkCode, 6, int(m_countA) << " - Symmetric Link.");
+          NS_TEST_EXPECT_MSG_EQ (hello.linkMessages[1].neighborInterfaceAddresses.size (), 1, int(m_countA) << " - Neighbor.");
+          NS_TEST_EXPECT_MSG_EQ (hello.linkMessages[1].neighborInterfaceAddresses[0], Ipv4Address ("10.1.1.1"), int(m_countA) << " - Neighbor.");
+        }
+    }
+  m_countA ++;
+}
+
+void
+TcRegressionTest::ReceivePktProbeB (Ptr<Socket> socket)
+{
+  uint32_t availableData;
+  availableData = socket->GetRxAvailable ();
+  Ptr<Packet> receivedPacketProbe = socket->Recv (std::numeric_limits<uint32_t>::max (), 0);
+  NS_ASSERT (availableData == receivedPacketProbe->GetSize ());
+
+  Ipv4Header ipHdr;
+  receivedPacketProbe->RemoveHeader (ipHdr);
+  UdpHeader udpHdr;
+  receivedPacketProbe->RemoveHeader (udpHdr);
+  PacketHeader pktHdr;
+  receivedPacketProbe->RemoveHeader (pktHdr);
+
+  MessageHeader msgHdr;
+  receivedPacketProbe->RemoveHeader (msgHdr);
+  const olsr::MessageHeader::Hello &hello = msgHdr.GetHello ();
+
+  if (m_countB == 0 || m_countB == 2 || m_countB == 5 || m_countB == 6 || m_countB == 8 ||
+      m_countB == 10 || m_countB == 13 || m_countB == 15 || m_countB == 17 || m_countB == 19)
+    {
+      NS_TEST_EXPECT_MSG_EQ (msgHdr.GetOriginatorAddress (), Ipv4Address ("10.1.1.3"), "Originator address.");
+    }
+  else
+    {
+      NS_TEST_EXPECT_MSG_EQ (msgHdr.GetOriginatorAddress (), Ipv4Address ("10.1.1.1"), "Originator address.");
+    }
+
+  if (m_countB == 0 || m_countB == 1)
+    {
+      NS_TEST_EXPECT_MSG_EQ (hello.linkMessages.size (), 0, int(m_countC) << " - Hello, links announced.");
+    }
+  else
+    {
+      NS_TEST_EXPECT_MSG_EQ (hello.linkMessages.size (), 1, int(m_countC) << " - Hello, links announced.");
+      if (m_countB == 2 || m_countB == 3)
+        {
+          NS_TEST_EXPECT_MSG_EQ (hello.linkMessages[0].linkCode, 1, int(m_countC) << " - Asymmetric Link.");
+        }
+      else if (m_countB == 4 || m_countB == 5)
+        {
+          NS_TEST_EXPECT_MSG_EQ (hello.linkMessages[0].linkCode, 6, int(m_countC) << " - Symmetric Link.");
+        }
+      else
+        {
+          NS_TEST_EXPECT_MSG_EQ (hello.linkMessages[0].linkCode, 10, int(m_countC) << " - MPR Link.");
+        }
+
+      NS_TEST_EXPECT_MSG_EQ (hello.linkMessages[0].neighborInterfaceAddresses[0], Ipv4Address ("10.1.1.2"), int(m_countC) << " - Neighbor.");
+    }
+
+  m_countB ++;
 }
 
+// Note: this is identical to ReceivePktProbeA, but the packet counter needs to be different.
 void
-TcRegressionTest::CheckResults ()
+TcRegressionTest::ReceivePktProbeC (Ptr<Socket> socket)
 {
-  for (uint32_t i = 0; i < 3; ++i)
+  uint32_t availableData;
+  availableData = socket->GetRxAvailable ();
+  Ptr<Packet> receivedPacketProbe = socket->Recv (std::numeric_limits<uint32_t>::max (), 0);
+  NS_ASSERT (availableData == receivedPacketProbe->GetSize ());
+
+  Ipv4Header ipHdr;
+  receivedPacketProbe->RemoveHeader (ipHdr);
+  UdpHeader udpHdr;
+  receivedPacketProbe->RemoveHeader (udpHdr);
+  PacketHeader pktHdr;
+  receivedPacketProbe->RemoveHeader (pktHdr);
+
+  if (m_countC == 0)
+    {
+      MessageHeader msgHdr;
+      receivedPacketProbe->RemoveHeader (msgHdr);
+      const olsr::MessageHeader::Hello &hello = msgHdr.GetHello ();
+      NS_TEST_EXPECT_MSG_EQ (msgHdr.GetOriginatorAddress (), Ipv4Address ("10.1.1.2"), "Originator address.");
+      NS_TEST_EXPECT_MSG_EQ (hello.linkMessages.size (), 0, "0 - Hello, No messages.");
+    }
+  else if (m_countC == 1)
+    {
+      MessageHeader msgHdr;
+      receivedPacketProbe->RemoveHeader (msgHdr);
+      NS_TEST_EXPECT_MSG_EQ (msgHdr.GetOriginatorAddress (), Ipv4Address ("10.1.1.2"), "Originator address.");
+      const olsr::MessageHeader::Hello &hello = msgHdr.GetHello ();
+      NS_TEST_EXPECT_MSG_EQ (hello.linkMessages.size (), 2, "1 - Hello, one message.");
+      NS_TEST_EXPECT_MSG_EQ (hello.linkMessages[0].linkCode, 1, "1 - Asymmetric Link.");
+      NS_TEST_EXPECT_MSG_EQ (hello.linkMessages[0].neighborInterfaceAddresses.size (), 1, "1 - Neighbor.");
+      NS_TEST_EXPECT_MSG_EQ (hello.linkMessages[0].neighborInterfaceAddresses[0], Ipv4Address ("10.1.1.3"), "1 - Neighbor.");
+      NS_TEST_EXPECT_MSG_EQ (hello.linkMessages[1].linkCode, 1, "1 - Asymmetric Link.");
+      NS_TEST_EXPECT_MSG_EQ (hello.linkMessages[1].neighborInterfaceAddresses.size (), 1, "1 - Neighbor.");
+      NS_TEST_EXPECT_MSG_EQ (hello.linkMessages[1].neighborInterfaceAddresses[0], Ipv4Address ("10.1.1.1"), "1 - Neighbor.");
+    }
+  else
     {
-      NS_PCAP_TEST_EXPECT_EQ (PREFIX << "-" << i << "-1.pcap");
+      if (m_countC == 5 || m_countC == 8)
+        {
+          MessageHeader msgHdr;
+          receivedPacketProbe->RemoveHeader (msgHdr);
+          const olsr::MessageHeader::Tc &tc = msgHdr.GetTc ();
+          NS_TEST_EXPECT_MSG_EQ (msgHdr.GetOriginatorAddress (), Ipv4Address ("10.1.1.2"), "Originator address.");
+          NS_TEST_EXPECT_MSG_EQ (tc.neighborAddresses.size (), 2, int(m_countC) << " - TC, one message.");
+          NS_TEST_EXPECT_MSG_EQ (tc.neighborAddresses[0], Ipv4Address ("10.1.1.3"), int(m_countC) << " - Neighbor.");
+          NS_TEST_EXPECT_MSG_EQ (tc.neighborAddresses[1], Ipv4Address ("10.1.1.1"), int(m_countC) << " - Neighbor.");
+        }
+      if (m_countC != 8)
+        {
+          MessageHeader msgHdr;
+          receivedPacketProbe->RemoveHeader (msgHdr);
+          NS_TEST_EXPECT_MSG_EQ (msgHdr.GetOriginatorAddress (), Ipv4Address ("10.1.1.2"), "Originator address.");
+          const olsr::MessageHeader::Hello &hello = msgHdr.GetHello ();
+          NS_TEST_EXPECT_MSG_EQ (hello.linkMessages.size (), 2, int(m_countC) << " - Hello, one message.");
+          NS_TEST_EXPECT_MSG_EQ (hello.linkMessages[0].linkCode, 6, int(m_countC) << " - Symmetric Link.");
+          NS_TEST_EXPECT_MSG_EQ (hello.linkMessages[0].neighborInterfaceAddresses.size (), 1, int(m_countC) << " - Neighbor.");
+          NS_TEST_EXPECT_MSG_EQ (hello.linkMessages[0].neighborInterfaceAddresses[0], Ipv4Address ("10.1.1.3"), int(m_countC) << " - Neighbor.");
+          NS_TEST_EXPECT_MSG_EQ (hello.linkMessages[1].linkCode, 6, int(m_countC) << " - Symmetric Link.");
+          NS_TEST_EXPECT_MSG_EQ (hello.linkMessages[1].neighborInterfaceAddresses.size (), 1, int(m_countC) << " - Neighbor.");
+          NS_TEST_EXPECT_MSG_EQ (hello.linkMessages[1].neighborInterfaceAddresses[0], Ipv4Address ("10.1.1.1"), int(m_countC) << " - Neighbor.");
+        }
     }
+  m_countC ++;
 }
 
 }
diff -Naur ns-3.23/src/olsr/test/tc-regression-test.h ns-3.24/src/olsr/test/tc-regression-test.h
--- ns-3.23/src/olsr/test/tc-regression-test.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/olsr/test/tc-regression-test.h	2015-09-15 11:18:44.000000000 -0700
@@ -23,6 +23,8 @@
 
 #include "ns3/test.h"
 #include "ns3/nstime.h"
+#include "ns3/socket.h"
+#include "ns3/ipv4-raw-socket-impl.h"
 #include "ns3/node-container.h"
 
 namespace ns3
@@ -33,7 +35,7 @@
  * \ingroup olsr
  * \brief Less trivial test of OLSR Topology Control message generation
  * 
- * This test creates 3 WiFi stations with chain topology and runs OLSR without any extra traffic. 
+ * This test simulates 3 Wi-Fi stations with chain topology and runs OLSR without any extra traffic.
  * It is expected that only second station will send TC messages.
  * 
  * Expected trace (20 seconds, note random b-cast jitter):
@@ -78,18 +80,34 @@
   TcRegressionTest(); 
   ~TcRegressionTest();
 private:
-  /// Unique PCAP files prefix for this test
-  static const char * const PREFIX;
   /// Total simulation time
   const Time m_time;
-  /// Distance between nodes in meters, 0.8 of RX range is recommended
-  const double m_step;
   /// Create & configure test network
   void CreateNodes ();
-  /// Compare traces with reference ones
-  void CheckResults ();
   /// Go
   void DoRun ();
+
+  /// Receive raw data on node A
+  void ReceivePktProbeA (Ptr<Socket> socket);
+  /// Packet counter on node A
+  uint8_t m_countA;
+  /// Receiving socket on node A
+  Ptr<Ipv4RawSocketImpl> m_rxSocketA;
+
+  /// Receive raw data on node B
+  void ReceivePktProbeB (Ptr<Socket> socket);
+  /// Packet counter on node B
+  uint8_t m_countB;
+  /// Receiving socket on node B
+  Ptr<Ipv4RawSocketImpl> m_rxSocketB;
+
+  /// Receive raw data on node C
+  void ReceivePktProbeC (Ptr<Socket> socket);
+  /// Packet counter on node C
+  uint8_t m_countC;
+  /// Receiving socket on node C
+  Ptr<Ipv4RawSocketImpl> m_rxSocketC;
+
 };
 
 }
diff -Naur ns-3.23/src/olsr/wscript ns-3.24/src/olsr/wscript
--- ns-3.23/src/olsr/wscript	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/olsr/wscript	2015-09-15 11:18:44.000000000 -0700
@@ -1,7 +1,7 @@
 ## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
 
 def build(bld):
-    module = bld.create_ns3_module('olsr', ['internet', 'config-store', 'point-to-point', 'wifi', 'applications'])
+    module = bld.create_ns3_module('olsr', ['internet'])
     module.includes = '.'
     module.source = [
         'model/olsr-header.cc',
diff -Naur ns-3.23/src/openflow/model/openflow-interface.cc ns-3.24/src/openflow/model/openflow-interface.cc
--- ns-3.23/src/openflow/model/openflow-interface.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/openflow/model/openflow-interface.cc	2015-09-15 11:18:44.000000000 -0700
@@ -650,6 +650,23 @@
     }
 }
 
+/* static */
+TypeId
+Controller::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::ofi::Controller")
+    .SetParent<Object> ()
+    .SetGroupName ("OpenFlow")
+    .AddConstructor<Controller> ()
+    ;
+  return tid;
+}
+
+Controller::~Controller ()
+{
+  m_switches.clear ();
+}
+
 void
 Controller::AddSwitch (Ptr<OpenFlowSwitchNetDevice> swtch)
 {
@@ -736,6 +753,18 @@
     }
 }
 
+/* static */
+TypeId
+DropController::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::ofi::DropController")
+    .SetParent<Controller> ()
+    .SetGroupName ("OpenFlow")
+    .AddConstructor<DropController> ()
+    ;
+  return tid;
+}
+
 void
 DropController::ReceiveFromSwitch (Ptr<OpenFlowSwitchNetDevice> swtch, ofpbuf* buffer)
 {
@@ -766,7 +795,7 @@
 TypeId LearningController::GetTypeId (void)
 {
   static TypeId tid = TypeId ("ns3::ofi::LearningController")
-    .SetParent (Controller::GetTypeId ())
+    .SetParent <Controller> ()
     .SetGroupName ("Openflow")
     .AddConstructor<LearningController> ()
     .AddAttribute ("ExpirationTime",
diff -Naur ns-3.23/src/openflow/model/openflow-interface.h ns-3.24/src/openflow/model/openflow-interface.h
--- ns-3.23/src/openflow/model/openflow-interface.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/openflow/model/openflow-interface.h	2015-09-15 11:18:44.000000000 -0700
@@ -346,19 +346,13 @@
 class Controller : public Object
 {
 public:
-  static TypeId GetTypeId (void)
-  {
-    static TypeId tid = TypeId ("ns3::ofi::Controller")
-      .SetParent<Object> ()
-      .AddConstructor<Controller> ()
-    ;
-    return tid;
-  }
-
-  virtual ~Controller ()
-  {
-    m_switches.clear ();
-  }
+  /**
+   * Register this type.
+   * \return The TypeId.
+   */
+  static TypeId GetTypeId (void);
+  /** Destructor. */
+  virtual ~Controller ();
 
   /**
    * Adds a switch to the controller.
@@ -443,6 +437,12 @@
 class DropController : public Controller
 {
 public:
+  /**
+   * Register this type.
+   * \return The TypeId.
+   */
+  static TypeId GetTypeId (void);
+  
   void ReceiveFromSwitch (Ptr<OpenFlowSwitchNetDevice> swtch, ofpbuf* buffer);
 };
 
@@ -456,6 +456,10 @@
 class LearningController : public Controller
 {
 public:
+  /**
+   * Register this type.
+   * \return The TypeId.
+   */
   static TypeId GetTypeId (void);
 
   virtual ~LearningController ()
diff -Naur ns-3.23/src/openflow/model/openflow-switch-net-device.cc ns-3.24/src/openflow/model/openflow-switch-net-device.cc
--- ns-3.23/src/openflow/model/openflow-switch-net-device.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/openflow/model/openflow-switch-net-device.cc	2015-09-15 11:18:44.000000000 -0700
@@ -444,10 +444,11 @@
 }
 
 ofpbuf *
-OpenFlowSwitchNetDevice::BufferFromPacket (Ptr<Packet> packet, Address src, Address dst, int mtu, uint16_t protocol)
+OpenFlowSwitchNetDevice::BufferFromPacket (Ptr<const Packet> constPacket, Address src, Address dst, int mtu, uint16_t protocol)
 {
   NS_LOG_INFO ("Creating Openflow buffer from packet.");
 
+  Ptr<Packet> packet = constPacket->Copy ();
   /*
    * Allocate buffer with some headroom to add headers in forwarding
    * to the controller or adding a vlan tag, plus an extra 2 bytes to
@@ -460,19 +461,26 @@
 
   int l2_length = 0, l3_length = 0, l4_length = 0;
 
-  // Load headers
-  EthernetHeader eth_hd;
-  if (packet->PeekHeader (eth_hd))
-    {
-      buffer->l2 = new eth_header;
-      eth_header* eth_h = (eth_header*)buffer->l2;
-      dst.CopyTo (eth_h->eth_dst);              // Destination Mac Address
-      src.CopyTo (eth_h->eth_src);              // Source Mac Address
+  //Parse Ethernet header
+  buffer->l2 = new eth_header;
+  eth_header* eth_h = (eth_header*)buffer->l2;
+  dst.CopyTo (eth_h->eth_dst);              // Destination Mac Address
+  src.CopyTo (eth_h->eth_src);              // Source Mac Address
+  if (protocol == ArpL3Protocol::PROT_NUMBER)
+    {
+      eth_h->eth_type = htons (ETH_TYPE_ARP);    // Ether Type
+    }
+  else if (protocol == Ipv4L3Protocol::PROT_NUMBER)
+    {
       eth_h->eth_type = htons (ETH_TYPE_IP);    // Ether Type
-      NS_LOG_INFO ("Parsed EthernetHeader");
-
-      l2_length = ETH_HEADER_LEN;
     }
+  else
+    {
+      NS_LOG_WARN ("Protocol unsupported: " << protocol);
+    }
+  NS_LOG_INFO ("Parsed EthernetHeader");
+
+  l2_length = ETH_HEADER_LEN;
 
   // We have to wrap this because PeekHeader has an assert fail if we check for an Ipv4Header that isn't there.
   if (protocol == Ipv4L3Protocol::PROT_NUMBER)
@@ -493,6 +501,7 @@
           ip_h->ip_dst      = htonl (ip_hd.GetDestination ().Get ()); // Destination Address
           ip_h->ip_csum     = csum (&ip_h, sizeof ip_h);        // Header Checksum
           NS_LOG_INFO ("Parsed Ipv4Header");
+          packet->RemoveHeader (ip_hd);
 
           l3_length = IP_HEADER_LEN;
         }
@@ -515,6 +524,7 @@
           arp_h->ar_hln = sizeof arp_h->ar_tha;                         // Hardware address length.
           arp_h->ar_pln = sizeof arp_h->ar_tpa;                         // Protocol address length.
           NS_LOG_INFO ("Parsed ArpHeader");
+          packet->RemoveHeader (arp_hd);
 
           l3_length = ARP_ETH_HEADER_LEN;
         }
@@ -539,6 +549,7 @@
               tcp_h->tcp_urg = tcp_hd.GetUrgentPointer ();      // Urgent Pointer
               tcp_h->tcp_csum = csum (&tcp_h, sizeof tcp_h);    // Header Checksum
               NS_LOG_INFO ("Parsed TcpHeader");
+              packet->RemoveHeader (tcp_hd);
 
               l4_length = TCP_HEADER_LEN;
             }
@@ -562,13 +573,14 @@
               udp_csum = csum_continue (udp_csum, udp_h, sizeof udp_h);
               udp_h->udp_csum = csum_finish (csum_continue (udp_csum, buffer->data, buffer->size)); // Header Checksum
               NS_LOG_INFO ("Parsed UdpHeader");
+              packet->RemoveHeader (udp_hd);
 
               l4_length = UDP_HEADER_LEN;
             }
         }
     }
 
-  // Load Packet data into buffer data
+  // Load any remaining packet data into buffer data
   packet->CopyData ((uint8_t*)buffer->data, packet->GetSize ());
 
   if (buffer->l4)
@@ -1144,7 +1156,7 @@
     }
 
   sw_flow_key key;
-  flow_extract (buffer, opo->in_port, &key.flow); // ntohs(opo->in_port)
+  flow_extract (buffer, ntohs(opo->in_port), &key.flow); // ntohs(opo->in_port)
 
   uint16_t v_code = ofi::ValidateActions (&key, opo->actions, actions_len);
   if (v_code != ACT_VALIDATION_OK)
@@ -1287,7 +1299,7 @@
         {
           sw_flow_key key;
           flow_used (flow, buffer);
-          flow_extract (buffer, ofm->match.in_port, &key.flow); // ntohs(ofm->match.in_port);
+          flow_extract (buffer, ntohs(ofm->match.in_port), &key.flow); // ntohs(ofm->match.in_port);
           ofi::ExecuteActions (this, ofm->buffer_id, buffer, &key, ofm->actions, actions_len, false);
           ofpbuf_delete (buffer);
         }
@@ -1328,7 +1340,7 @@
       if (buffer)
         {
           sw_flow_key skb_key;
-          flow_extract (buffer, ofm->match.in_port, &skb_key.flow); // ntohs(ofm->match.in_port);
+          flow_extract (buffer, ntohs(ofm->match.in_port), &skb_key.flow); // ntohs(ofm->match.in_port);
           ofi::ExecuteActions (this, ofm->buffer_id, buffer, &skb_key, ofm->actions, actions_len, false);
           ofpbuf_delete (buffer);
         }
diff -Naur ns-3.23/src/openflow/model/openflow-switch-net-device.h ns-3.24/src/openflow/model/openflow-switch-net-device.h
--- ns-3.23/src/openflow/model/openflow-switch-net-device.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/openflow/model/openflow-switch-net-device.h	2015-09-15 11:18:44.000000000 -0700
@@ -86,6 +86,10 @@
 class OpenFlowSwitchNetDevice : public NetDevice
 {
 public:
+  /**
+   * Register this type.
+   * \return The TypeId.
+   */
   static TypeId GetTypeId (void);
 
   /**
@@ -268,7 +272,7 @@
    * \param protocol The protocol defining the packet.
    * \return The OpenFlow Buffer created from the packet.
    */
-  ofpbuf * BufferFromPacket (Ptr<Packet> packet, Address src, Address dst, int mtu, uint16_t protocol);
+  ofpbuf * BufferFromPacket (Ptr<const Packet> packet, Address src, Address dst, int mtu, uint16_t protocol);
 
 private:
   /**
diff -Naur ns-3.23/src/openflow/wscript ns-3.24/src/openflow/wscript
--- ns-3.23/src/openflow/wscript	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/openflow/wscript	2015-09-15 11:18:44.000000000 -0700
@@ -16,14 +16,13 @@
 
 def configure(conf):
     if not conf.env['LIB_BOOST']:
-	conf.report_optional_feature("openflow", "NS-3 OpenFlow Integration", False,
+        conf.report_optional_feature("openflow", "NS-3 OpenFlow Integration", False,
 				     "Required boost libraries not found")
 
         # Add this module to the list of modules that won't be built
         # if they are enabled.
         conf.env['MODULES_NOT_BUILT'].append('openflow')
-
-	return 
+        return 
 
     present_boost_libs = []
     for boost_lib_name in conf.env['LIB_BOOST']:
@@ -35,19 +34,18 @@
 
     missing_boost_libs = [lib for lib in REQUIRED_BOOST_LIBS if lib not in present_boost_libs]
     if missing_boost_libs != []:
-	conf.report_optional_feature("openflow", "NS-3 OpenFlow Integration", False,
+        conf.report_optional_feature("openflow", "NS-3 OpenFlow Integration", False,
 				     "Required boost libraries not found, missing: %s" % ', '.join(missing_boost_libs))
 
         # Add this module to the list of modules that won't be built
         # if they are enabled.
         conf.env['MODULES_NOT_BUILT'].append('openflow')
-
-	return 
+        return 
 
     if Options.options.with_openflow:
-	if os.path.isdir(Options.options.with_openflow):
-	    conf.msg("Checking for OpenFlow location", ("%s (given)" % Options.options.with_openflow))
-	    conf.env['WITH_OPENFLOW'] = os.path.abspath(Options.options.with_openflow)
+        if os.path.isdir(Options.options.with_openflow):
+            conf.msg("Checking for OpenFlow location", ("%s (given)" % Options.options.with_openflow))
+            conf.env['WITH_OPENFLOW'] = os.path.abspath(Options.options.with_openflow)
     else:
         # bake.py uses ../../build, while ns-3-dev uses ../openflow.
         lib_to_check = 'libopenflow.a'
@@ -59,19 +57,18 @@
             conf.env['WITH_OPENFLOW'] = os.path.abspath(openflow_bake_build_dir)
         elif os.path.isdir(openflow_dir):
             conf.msg("Checking for OpenFlow location", ("%s (guessed)" % openflow_dir))
-	    conf.env['WITH_OPENFLOW'] = os.path.abspath(openflow_dir)
+            conf.env['WITH_OPENFLOW'] = os.path.abspath(openflow_dir)
         del openflow_bake_build_dir
         del openflow_bake_lib_dir
-	del openflow_dir
+        del openflow_dir
     if not conf.env['WITH_OPENFLOW']:
-	conf.msg("Checking for OpenFlow location", False)
-	conf.report_optional_feature("openflow", "NS-3 OpenFlow Integration", False,
+        conf.msg("Checking for OpenFlow location", False)
+        conf.report_optional_feature("openflow", "NS-3 OpenFlow Integration", False,
 				     "OpenFlow not enabled (see option --with-openflow)")
         # Add this module to the list of modules that won't be built
         # if they are enabled.
         conf.env['MODULES_NOT_BUILT'].append('openflow')
-
-	return 
+        return 
 
     test_code = '''
 #include "openflow/openflow.h"
@@ -164,8 +161,8 @@
         ]
 
     if bld.env['OPENFLOW'] and bld.env['DL'] and bld.env['XML2']:
-	obj.use.extend('OPENFLOW DL XML2'.split())
-	obj_test.use.extend('OPENFLOW DL XML2'.split())
+        obj.use.extend('OPENFLOW DL XML2'.split())
+        obj_test.use.extend('OPENFLOW DL XML2'.split())
 
     headers = bld(features='ns3header')
     headers.module = 'openflow'
@@ -173,16 +170,15 @@
         ]
 
     if bld.env['ENABLE_OPENFLOW']:
-	obj.source.append('model/openflow-interface.cc')
+        obj.source.append('model/openflow-interface.cc')
         obj.source.append('model/openflow-switch-net-device.cc')
-	obj.source.append('helper/openflow-switch-helper.cc')
+        obj.source.append('helper/openflow-switch-helper.cc')
 
         obj.env.append_value('DEFINES', 'NS3_OPENFLOW')
-
-	obj_test.source.append('test/openflow-switch-test-suite.cc')
-	headers.source.append('model/openflow-interface.h')
+        obj_test.source.append('test/openflow-switch-test-suite.cc')
+        headers.source.append('model/openflow-interface.h')
         headers.source.append('model/openflow-switch-net-device.h')
-	headers.source.append('helper/openflow-switch-helper.h')
+        headers.source.append('helper/openflow-switch-helper.h')
 
     if bld.env['ENABLE_EXAMPLES'] and bld.env['ENABLE_OPENFLOW']:
         bld.recurse('examples')
diff -Naur ns-3.23/src/point-to-point/bindings/modulegen__gcc_ILP32.py ns-3.24/src/point-to-point/bindings/modulegen__gcc_ILP32.py
--- ns-3.23/src/point-to-point/bindings/modulegen__gcc_ILP32.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/point-to-point/bindings/modulegen__gcc_ILP32.py	2015-09-15 11:18:44.000000000 -0700
@@ -103,7 +103,7 @@
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
+    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SSL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
     ## point-to-point-helper.h (module 'point-to-point'): ns3::PointToPointHelper [class]
@@ -309,6 +309,12 @@
     nested_module = module.add_cpp_namespace('Hash')
     register_types_ns3_Hash(nested_module)
     
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -344,6 +350,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AsciiTraceHelper_methods(root_module, root_module['ns3::AsciiTraceHelper'])
@@ -713,17 +726,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -745,11 +758,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -759,16 +767,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -1006,14 +1004,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -1074,11 +1076,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3DataRate_methods(root_module, cls):
@@ -2095,7 +2092,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -2113,10 +2110,10 @@
     cls.add_method('Close', 
                    'void', 
                    [])
-    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
+    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t & packets, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
     cls.add_method('Diff', 
                    'bool', 
-                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
+                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t &', 'packets'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
                    is_static=True)
     ## pcap-file.h (module 'network'): bool ns3::PcapFile::Eof() const [member function]
     cls.add_method('Eof', 
@@ -2180,10 +2177,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header const & header, ns3::Ptr<const ns3::Packet> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file.h (module 'network'): ns3::PcapFile::SNAPLEN_DEFAULT [variable]
     cls.add_static_attribute('SNAPLEN_DEFAULT', 'uint32_t const', is_const=True)
     ## pcap-file.h (module 'network'): ns3::PcapFile::ZONE_DEFAULT [variable]
@@ -2379,10 +2376,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -2927,10 +2924,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header const & header, ns3::Ptr<const ns3::Packet> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('ns3::Time', 't'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('ns3::Time', 't'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, uint8_t const * buffer, uint32_t length) [member function]
     cls.add_method('Write', 
                    'void', 
@@ -3857,11 +3854,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -4038,10 +4045,10 @@
                    'double', 
                    [], 
                    is_virtual=True)
-    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
     cls.add_method('Interpolate', 
                    'double', 
-                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
                    visibility='private', is_virtual=True)
     ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
     cls.add_method('Validate', 
@@ -5708,6 +5715,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -5720,6 +5728,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.23/src/point-to-point/bindings/modulegen__gcc_LP64.py ns-3.24/src/point-to-point/bindings/modulegen__gcc_LP64.py
--- ns-3.23/src/point-to-point/bindings/modulegen__gcc_LP64.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/point-to-point/bindings/modulegen__gcc_LP64.py	2015-09-15 11:18:44.000000000 -0700
@@ -103,7 +103,7 @@
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
+    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SSL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
     ## point-to-point-helper.h (module 'point-to-point'): ns3::PointToPointHelper [class]
@@ -309,6 +309,12 @@
     nested_module = module.add_cpp_namespace('Hash')
     register_types_ns3_Hash(nested_module)
     
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -344,6 +350,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AsciiTraceHelper_methods(root_module, root_module['ns3::AsciiTraceHelper'])
@@ -713,17 +726,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -745,11 +758,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -759,16 +767,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -1006,14 +1004,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -1074,11 +1076,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3DataRate_methods(root_module, cls):
@@ -2095,7 +2092,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -2113,10 +2110,10 @@
     cls.add_method('Close', 
                    'void', 
                    [])
-    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
+    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t & packets, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
     cls.add_method('Diff', 
                    'bool', 
-                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
+                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t &', 'packets'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
                    is_static=True)
     ## pcap-file.h (module 'network'): bool ns3::PcapFile::Eof() const [member function]
     cls.add_method('Eof', 
@@ -2180,10 +2177,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header const & header, ns3::Ptr<const ns3::Packet> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file.h (module 'network'): ns3::PcapFile::SNAPLEN_DEFAULT [variable]
     cls.add_static_attribute('SNAPLEN_DEFAULT', 'uint32_t const', is_const=True)
     ## pcap-file.h (module 'network'): ns3::PcapFile::ZONE_DEFAULT [variable]
@@ -2379,10 +2376,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -2927,10 +2924,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header const & header, ns3::Ptr<const ns3::Packet> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('ns3::Time', 't'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('ns3::Time', 't'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, uint8_t const * buffer, uint32_t length) [member function]
     cls.add_method('Write', 
                    'void', 
@@ -3857,11 +3854,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -4038,10 +4045,10 @@
                    'double', 
                    [], 
                    is_virtual=True)
-    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
     cls.add_method('Interpolate', 
                    'double', 
-                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
                    visibility='private', is_virtual=True)
     ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
     cls.add_method('Validate', 
@@ -5708,6 +5715,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -5720,6 +5728,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.23/src/point-to-point/model/point-to-point-channel.h ns-3.24/src/point-to-point/model/point-to-point-channel.h
--- ns-3.23/src/point-to-point/model/point-to-point-channel.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/point-to-point/model/point-to-point-channel.h	2015-09-15 11:18:44.000000000 -0700
@@ -137,11 +137,13 @@
    * \param [in] rxDevice the Receiving NetDevice.
    * \param [in] duration The amount of time to transmit the packet.
    * \param [in] lastBitTime Last bit receive time (relative to now)
+   * \deprecated The non-const \c Ptr<NetDevice> argument is deprecated
+   * and will be changed to \c Ptr<const NetDevice> in a future release.
    */
   typedef void (* TxRxAnimationCallback)
-    (const Ptr<const Packet> packet,
-     const Ptr<const NetDevice> txDevice, const Ptr<const NetDevice> rxDevice,
-     const Time duration, const Time lastBitTime);
+    (Ptr<const Packet> packet,
+     Ptr<NetDevice> txDevice, Ptr<NetDevice> rxDevice,
+     Time duration, Time lastBitTime);
                     
 private:
   /** Each point to point link has exactly two net devices. */
@@ -158,12 +160,14 @@
    * packet receipt time.
    *
    * \see class CallBackTraceSource
+   * \deprecated The non-const \c Ptr<NetDevice> argument is deprecated
+   * and will be changed to \c Ptr<const NetDevice> in a future release.
    */
-  TracedCallback<Ptr<const Packet>, // Packet being transmitted
-                 Ptr<NetDevice>,    // Transmitting NetDevice
-                 Ptr<NetDevice>,    // Receiving NetDevice
-                 Time,              // Amount of time to transmit the pkt
-                 Time               // Last bit receive time (relative to now)
+  TracedCallback<Ptr<const Packet>,     // Packet being transmitted
+                 Ptr<NetDevice>,  // Transmitting NetDevice
+                 Ptr<NetDevice>,  // Receiving NetDevice
+                 Time,                  // Amount of time to transmit the pkt
+                 Time                   // Last bit receive time (relative to now)
                  > m_txrxPointToPoint;
 
   /** \brief Wire states
diff -Naur ns-3.23/src/point-to-point/model/point-to-point-net-device.h ns-3.24/src/point-to-point/model/point-to-point-net-device.h
--- ns-3.23/src/point-to-point/model/point-to-point-net-device.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/point-to-point/model/point-to-point-net-device.h	2015-09-15 11:18:44.000000000 -0700
@@ -164,11 +164,6 @@
 
   virtual bool IsLinkUp (void) const;
 
-  /**
-   * TracedCallback signature for link changed event.
-   */
-  typedef void (* LinkChangeTracedCallback) (void);
-  
   virtual void AddLinkChangeCallback (Callback<void> callback);
 
   virtual bool IsBroadcast (void) const;
diff -Naur ns-3.23/src/point-to-point/test/point-to-point-test.cc ns-3.24/src/point-to-point/test/point-to-point-test.cc
--- ns-3.23/src/point-to-point/test/point-to-point-test.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/point-to-point/test/point-to-point-test.cc	2015-09-15 11:18:44.000000000 -0700
@@ -1,3 +1,23 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2009 INRIA
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
+ */
+
 #include "ns3/test.h"
 #include "ns3/drop-tail-queue.h"
 #include "ns3/simulator.h"
diff -Naur ns-3.23/src/point-to-point-layout/bindings/modulegen__gcc_ILP32.py ns-3.24/src/point-to-point-layout/bindings/modulegen__gcc_ILP32.py
--- ns-3.23/src/point-to-point-layout/bindings/modulegen__gcc_ILP32.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/point-to-point-layout/bindings/modulegen__gcc_ILP32.py	2015-09-15 11:18:44.000000000 -0700
@@ -94,6 +94,10 @@
     module.add_class('Ipv6InterfaceContainer', import_from_module='ns.internet')
     ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix [class]
     module.add_class('Ipv6Prefix', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    module.add_class('Mac48Address', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    root_module['ns3::Mac48Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## net-device-container.h (module 'network'): ns3::NetDeviceContainer [class]
     module.add_class('NetDeviceContainer', import_from_module='ns.network')
     ## node-container.h (module 'network'): ns3::NodeContainer [class]
@@ -127,7 +131,7 @@
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
+    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SSL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
     ## internet-trace-helper.h (module 'internet'): ns3::PcapHelperForIpv4 [class]
@@ -292,6 +296,10 @@
     module.add_class('Ipv6PrefixChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue [class]
     module.add_class('Ipv6PrefixValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker [class]
+    module.add_class('Mac48AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue [class]
+    module.add_class('Mac48AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
     module.add_class('NetDevice', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice::PacketType [enumeration]
@@ -332,6 +340,12 @@
     nested_module = module.add_cpp_namespace('Hash')
     register_types_ns3_Hash(nested_module)
     
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -367,6 +381,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AsciiTraceHelper_methods(root_module, root_module['ns3::AsciiTraceHelper'])
@@ -397,6 +418,7 @@
     register_Ns3Ipv6InterfaceAddress_methods(root_module, root_module['ns3::Ipv6InterfaceAddress'])
     register_Ns3Ipv6InterfaceContainer_methods(root_module, root_module['ns3::Ipv6InterfaceContainer'])
     register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
+    register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
     register_Ns3NetDeviceContainer_methods(root_module, root_module['ns3::NetDeviceContainer'])
     register_Ns3NodeContainer_methods(root_module, root_module['ns3::NodeContainer'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
@@ -482,6 +504,8 @@
     register_Ns3Ipv6PmtuCache_methods(root_module, root_module['ns3::Ipv6PmtuCache'])
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
+    register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
+    register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
@@ -858,17 +882,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -890,11 +914,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -904,16 +923,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -1151,14 +1160,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -1219,11 +1232,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3EventId_methods(root_module, cls):
@@ -2121,6 +2129,78 @@
                    is_const=True)
     return
 
+def register_Ns3Mac48Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(ns3::Mac48Address const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetBroadcast() [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv4Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv4Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv6Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast6Prefix() [member function]
+    cls.add_method('GetMulticast6Prefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticastPrefix() [member function]
+    cls.add_method('GetMulticastPrefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsBroadcast() const [member function]
+    cls.add_method('IsBroadcast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsGroup() const [member function]
+    cls.add_method('IsGroup', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static bool ns3::Mac48Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
 def register_Ns3NetDeviceContainer_methods(root_module, cls):
     ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer(ns3::NetDeviceContainer const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDeviceContainer const &', 'arg0')])
@@ -2523,7 +2603,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -2541,10 +2621,10 @@
     cls.add_method('Close', 
                    'void', 
                    [])
-    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
+    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t & packets, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
     cls.add_method('Diff', 
                    'bool', 
-                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
+                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t &', 'packets'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
                    is_static=True)
     ## pcap-file.h (module 'network'): bool ns3::PcapFile::Eof() const [member function]
     cls.add_method('Eof', 
@@ -2608,10 +2688,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header const & header, ns3::Ptr<const ns3::Packet> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file.h (module 'network'): ns3::PcapFile::SNAPLEN_DEFAULT [variable]
     cls.add_static_attribute('SNAPLEN_DEFAULT', 'uint32_t const', is_const=True)
     ## pcap-file.h (module 'network'): ns3::PcapFile::ZONE_DEFAULT [variable]
@@ -3045,10 +3125,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -3952,10 +4032,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header const & header, ns3::Ptr<const ns3::Packet> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('ns3::Time', 't'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('ns3::Time', 't'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, uint8_t const * buffer, uint32_t length) [member function]
     cls.add_method('Write', 
                    'void', 
@@ -5106,11 +5186,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -6321,6 +6411,46 @@
                    [param('ns3::Ipv6Prefix const &', 'value')])
     return
 
+def register_Ns3Mac48AddressChecker_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker(ns3::Mac48AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac48AddressValue_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressValue const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'value')])
+    ## mac48-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac48AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## mac48-address.h (module 'network'): ns3::Mac48Address ns3::Mac48AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): std::string ns3::Mac48AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48AddressValue::Set(ns3::Mac48Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac48Address const &', 'value')])
+    return
+
 def register_Ns3NetDevice_methods(root_module, cls):
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
     cls.add_constructor([])
@@ -7040,6 +7170,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -7052,6 +7183,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.23/src/point-to-point-layout/bindings/modulegen__gcc_LP64.py ns-3.24/src/point-to-point-layout/bindings/modulegen__gcc_LP64.py
--- ns-3.23/src/point-to-point-layout/bindings/modulegen__gcc_LP64.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/point-to-point-layout/bindings/modulegen__gcc_LP64.py	2015-09-15 11:18:44.000000000 -0700
@@ -94,6 +94,10 @@
     module.add_class('Ipv6InterfaceContainer', import_from_module='ns.internet')
     ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix [class]
     module.add_class('Ipv6Prefix', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    module.add_class('Mac48Address', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    root_module['ns3::Mac48Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## net-device-container.h (module 'network'): ns3::NetDeviceContainer [class]
     module.add_class('NetDeviceContainer', import_from_module='ns.network')
     ## node-container.h (module 'network'): ns3::NodeContainer [class]
@@ -127,7 +131,7 @@
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
+    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SSL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
     ## internet-trace-helper.h (module 'internet'): ns3::PcapHelperForIpv4 [class]
@@ -292,6 +296,10 @@
     module.add_class('Ipv6PrefixChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue [class]
     module.add_class('Ipv6PrefixValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker [class]
+    module.add_class('Mac48AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue [class]
+    module.add_class('Mac48AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
     module.add_class('NetDevice', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice::PacketType [enumeration]
@@ -332,6 +340,12 @@
     nested_module = module.add_cpp_namespace('Hash')
     register_types_ns3_Hash(nested_module)
     
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -367,6 +381,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AsciiTraceHelper_methods(root_module, root_module['ns3::AsciiTraceHelper'])
@@ -397,6 +418,7 @@
     register_Ns3Ipv6InterfaceAddress_methods(root_module, root_module['ns3::Ipv6InterfaceAddress'])
     register_Ns3Ipv6InterfaceContainer_methods(root_module, root_module['ns3::Ipv6InterfaceContainer'])
     register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
+    register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
     register_Ns3NetDeviceContainer_methods(root_module, root_module['ns3::NetDeviceContainer'])
     register_Ns3NodeContainer_methods(root_module, root_module['ns3::NodeContainer'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
@@ -482,6 +504,8 @@
     register_Ns3Ipv6PmtuCache_methods(root_module, root_module['ns3::Ipv6PmtuCache'])
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
+    register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
+    register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
@@ -858,17 +882,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -890,11 +914,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -904,16 +923,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -1151,14 +1160,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -1219,11 +1232,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3EventId_methods(root_module, cls):
@@ -2121,6 +2129,78 @@
                    is_const=True)
     return
 
+def register_Ns3Mac48Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(ns3::Mac48Address const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetBroadcast() [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv4Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv4Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv6Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast6Prefix() [member function]
+    cls.add_method('GetMulticast6Prefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticastPrefix() [member function]
+    cls.add_method('GetMulticastPrefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsBroadcast() const [member function]
+    cls.add_method('IsBroadcast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsGroup() const [member function]
+    cls.add_method('IsGroup', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static bool ns3::Mac48Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
 def register_Ns3NetDeviceContainer_methods(root_module, cls):
     ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer(ns3::NetDeviceContainer const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDeviceContainer const &', 'arg0')])
@@ -2523,7 +2603,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -2541,10 +2621,10 @@
     cls.add_method('Close', 
                    'void', 
                    [])
-    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
+    ## pcap-file.h (module 'network'): static bool ns3::PcapFile::Diff(std::string const & f1, std::string const & f2, uint32_t & sec, uint32_t & usec, uint32_t & packets, uint32_t snapLen=ns3::PcapFile::SNAPLEN_DEFAULT) [member function]
     cls.add_method('Diff', 
                    'bool', 
-                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
+                   [param('std::string const &', 'f1'), param('std::string const &', 'f2'), param('uint32_t &', 'sec'), param('uint32_t &', 'usec'), param('uint32_t &', 'packets'), param('uint32_t', 'snapLen', default_value='ns3::PcapFile::SNAPLEN_DEFAULT')], 
                    is_static=True)
     ## pcap-file.h (module 'network'): bool ns3::PcapFile::Eof() const [member function]
     cls.add_method('Eof', 
@@ -2608,10 +2688,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file.h (module 'network'): void ns3::PcapFile::Write(uint32_t tsSec, uint32_t tsUsec, ns3::Header const & header, ns3::Ptr<const ns3::Packet> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('uint32_t', 'tsSec'), param('uint32_t', 'tsUsec'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file.h (module 'network'): ns3::PcapFile::SNAPLEN_DEFAULT [variable]
     cls.add_static_attribute('SNAPLEN_DEFAULT', 'uint32_t const', is_const=True)
     ## pcap-file.h (module 'network'): ns3::PcapFile::ZONE_DEFAULT [variable]
@@ -3045,10 +3125,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -3952,10 +4032,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header & header, ns3::Ptr<const ns3::Packet> p) [member function]
+    ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, ns3::Header const & header, ns3::Ptr<const ns3::Packet> p) [member function]
     cls.add_method('Write', 
                    'void', 
-                   [param('ns3::Time', 't'), param('ns3::Header &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
+                   [param('ns3::Time', 't'), param('ns3::Header const &', 'header'), param('ns3::Ptr< ns3::Packet const >', 'p')])
     ## pcap-file-wrapper.h (module 'network'): void ns3::PcapFileWrapper::Write(ns3::Time t, uint8_t const * buffer, uint32_t length) [member function]
     cls.add_method('Write', 
                    'void', 
@@ -5106,11 +5186,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -6321,6 +6411,46 @@
                    [param('ns3::Ipv6Prefix const &', 'value')])
     return
 
+def register_Ns3Mac48AddressChecker_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker(ns3::Mac48AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac48AddressValue_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressValue const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'value')])
+    ## mac48-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac48AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## mac48-address.h (module 'network'): ns3::Mac48Address ns3::Mac48AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): std::string ns3::Mac48AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48AddressValue::Set(ns3::Mac48Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac48Address const &', 'value')])
+    return
+
 def register_Ns3NetDevice_methods(root_module, cls):
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
     cls.add_constructor([])
@@ -7040,6 +7170,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -7052,6 +7183,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.23/src/point-to-point-layout/model/point-to-point-dumbbell.h ns-3.24/src/point-to-point-layout/model/point-to-point-dumbbell.h
--- ns-3.23/src/point-to-point-layout/model/point-to-point-dumbbell.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/point-to-point-layout/model/point-to-point-dumbbell.h	2015-09-15 11:18:44.000000000 -0700
@@ -78,6 +78,7 @@
 
   /**
    * \returns pointer to the i'th left side leaf node
+   * \param i node number
    */
   Ptr<Node> GetLeft (uint32_t i) const;
 
@@ -89,26 +90,31 @@
 
   /**
    * \returns pointer to the i'th left side leaf node
+   * \param i node number
    */
   Ptr<Node> GetRight (uint32_t i) const;
 
   /**
    * \returns an Ipv4Address of the i'th left leaf
+   * \param i node number
    */
   Ipv4Address GetLeftIpv4Address (uint32_t i ) const; // Get left leaf address
 
   /**
    * \returns an Ipv4Address of the i'th right leaf
+   * \param i node number
    */
-  Ipv4Address GetRightIpv4Address (uint32_t i) const; // Get right leaf address
+  Ipv4Address GetRightIpv4Address (uint32_t i) const;
 
   /**
    * \returns an Ipv6Address of the i'th left leaf
+   * \param i node number
    */
   Ipv6Address GetLeftIpv6Address (uint32_t i ) const; // Get left leaf address
 
   /**
    * \returns an Ipv6Address of the i'th right leaf
+   * \param i node number
    */
   Ipv6Address GetRightIpv6Address (uint32_t i) const; // Get right leaf address
 
@@ -161,24 +167,24 @@
   void      BoundingBox (double ulx, double uly, double lrx, double lry);
 
 private:
-  NodeContainer          m_leftLeaf;
-  NetDeviceContainer     m_leftLeafDevices;
-  NodeContainer          m_rightLeaf;
-  NetDeviceContainer     m_rightLeafDevices;
-  NodeContainer          m_routers;
-  NetDeviceContainer     m_routerDevices; // just two connecting the routers
-  NetDeviceContainer     m_leftRouterDevices;
-  NetDeviceContainer     m_rightRouterDevices;
-  Ipv4InterfaceContainer m_leftLeafInterfaces;
-  Ipv4InterfaceContainer m_leftRouterInterfaces;
-  Ipv4InterfaceContainer m_rightLeafInterfaces;
-  Ipv4InterfaceContainer m_rightRouterInterfaces;
-  Ipv4InterfaceContainer m_routerInterfaces;
-  Ipv6InterfaceContainer m_leftLeafInterfaces6;
-  Ipv6InterfaceContainer m_leftRouterInterfaces6;
-  Ipv6InterfaceContainer m_rightLeafInterfaces6;
-  Ipv6InterfaceContainer m_rightRouterInterfaces6;
-  Ipv6InterfaceContainer m_routerInterfaces6;
+  NodeContainer          m_leftLeaf;            //!< Left Leaf nodes
+  NetDeviceContainer     m_leftLeafDevices;     //!< Left Leaf NetDevices
+  NodeContainer          m_rightLeaf;           //!< Right Leaf nodes
+  NetDeviceContainer     m_rightLeafDevices;    //!< Right Leaf NetDevices
+  NodeContainer          m_routers;             //!< Routers
+  NetDeviceContainer     m_routerDevices;       //!< Routers NetDevices
+  NetDeviceContainer     m_leftRouterDevices;     //!< Left router NetDevices
+  NetDeviceContainer     m_rightRouterDevices;    //!< Right router NetDevices
+  Ipv4InterfaceContainer m_leftLeafInterfaces;    //!< Left Leaf interfaces (IPv4)
+  Ipv4InterfaceContainer m_leftRouterInterfaces;  //!< Left router interfaces (IPv4)
+  Ipv4InterfaceContainer m_rightLeafInterfaces;   //!< Right Leaf interfaces (IPv4)
+  Ipv4InterfaceContainer m_rightRouterInterfaces; //!< Right router interfaces (IPv4)
+  Ipv4InterfaceContainer m_routerInterfaces;      //!< Router interfaces (IPv4)
+  Ipv6InterfaceContainer m_leftLeafInterfaces6;   //!< Left Leaf interfaces (IPv6)
+  Ipv6InterfaceContainer m_leftRouterInterfaces6; //!< Left router interfaces (IPv6)
+  Ipv6InterfaceContainer m_rightLeafInterfaces6;  //!< Right Leaf interfaces (IPv6)
+  Ipv6InterfaceContainer m_rightRouterInterfaces6;  //!< Right router interfaces (IPv6)
+  Ipv6InterfaceContainer m_routerInterfaces6;     //!< Router interfaces (IPv6)
 };
 
 } // namespace ns3
diff -Naur ns-3.23/src/point-to-point-layout/model/point-to-point-grid.h ns-3.24/src/point-to-point-layout/model/point-to-point-grid.h
--- ns-3.23/src/point-to-point-layout/model/point-to-point-grid.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/point-to-point-layout/model/point-to-point-grid.h	2015-09-15 11:18:44.000000000 -0700
@@ -142,15 +142,15 @@
   void BoundingBox (double ulx, double uly, double lrx, double lry);
 
 private:
-  uint32_t m_xSize;
-  uint32_t m_ySize;
-  std::vector<NetDeviceContainer> m_rowDevices;
-  std::vector<NetDeviceContainer> m_colDevices;
-  std::vector<Ipv4InterfaceContainer> m_rowInterfaces;
-  std::vector<Ipv4InterfaceContainer> m_colInterfaces;
-  std::vector<Ipv6InterfaceContainer> m_rowInterfaces6;
-  std::vector<Ipv6InterfaceContainer> m_colInterfaces6;
-  std::vector<NodeContainer> m_nodes;
+  uint32_t m_xSize;   //!< X size of the grid (number of columns)
+  uint32_t m_ySize;   //!< Y size of the grid (number of rows)
+  std::vector<NetDeviceContainer> m_rowDevices;         //!< NetDevices in a row
+  std::vector<NetDeviceContainer> m_colDevices;         //!< NetDevices in a column
+  std::vector<Ipv4InterfaceContainer> m_rowInterfaces;  //!< IPv4 interfaces in a row
+  std::vector<Ipv4InterfaceContainer> m_colInterfaces;  //!< IPv4 interfaces in a column
+  std::vector<Ipv6InterfaceContainer> m_rowInterfaces6; //!< IPv6 interfaces in a row
+  std::vector<Ipv6InterfaceContainer> m_colInterfaces6; //!< IPv6 interfaces in a column
+  std::vector<NodeContainer> m_nodes; //!< all the nodes in the grid
 };
 
 } // namespace ns3
diff -Naur ns-3.23/src/point-to-point-layout/model/point-to-point-star.h ns-3.24/src/point-to-point-layout/model/point-to-point-star.h
--- ns-3.23/src/point-to-point-layout/model/point-to-point-star.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/point-to-point-layout/model/point-to-point-star.h	2015-09-15 11:18:44.000000000 -0700
@@ -139,14 +139,14 @@
   void BoundingBox (double ulx, double uly, double lrx, double lry);
 
 private:
-  NodeContainer m_hub;
-  NetDeviceContainer m_hubDevices;
-  NodeContainer m_spokes;
-  NetDeviceContainer m_spokeDevices;
-  Ipv4InterfaceContainer m_hubInterfaces;
-  Ipv4InterfaceContainer m_spokeInterfaces;
-  Ipv6InterfaceContainer m_hubInterfaces6;
-  Ipv6InterfaceContainer m_spokeInterfaces6;
+  NodeContainer m_hub;              //!< Hub node
+  NetDeviceContainer m_hubDevices;  //!< Hub node NetDevices
+  NodeContainer m_spokes;                     //!< Spoke nodes
+  NetDeviceContainer m_spokeDevices;          //!< Spoke nodes NetDevices
+  Ipv4InterfaceContainer m_hubInterfaces;     //!< IPv4 hub interfaces
+  Ipv4InterfaceContainer m_spokeInterfaces;   //!< IPv4 spoke nodes interfaces
+  Ipv6InterfaceContainer m_hubInterfaces6;    //!< IPv6 hub interfaces
+  Ipv6InterfaceContainer m_spokeInterfaces6;  //!< IPv6 spoke nodes interfaces
 };
 
 } // namespace ns3
diff -Naur ns-3.23/src/propagation/bindings/modulegen__gcc_ILP32.py ns-3.24/src/propagation/bindings/modulegen__gcc_ILP32.py
--- ns-3.23/src/propagation/bindings/modulegen__gcc_ILP32.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/propagation/bindings/modulegen__gcc_ILP32.py	2015-09-15 11:18:44.000000000 -0700
@@ -210,6 +210,12 @@
     nested_module = module.add_cpp_namespace('Hash')
     register_types_ns3_Hash(nested_module)
     
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -245,6 +251,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_methods(root_module):
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
     register_Ns3AttributeConstructionListItem_methods(root_module, root_module['ns3::AttributeConstructionList::Item'])
@@ -382,11 +395,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3Hasher_methods(root_module, cls):
@@ -1775,11 +1783,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -1993,10 +2011,10 @@
                    'double', 
                    [], 
                    is_virtual=True)
-    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
     cls.add_method('Interpolate', 
                    'double', 
-                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
                    visibility='private', is_virtual=True)
     ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
     cls.add_method('Validate', 
@@ -2905,6 +2923,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -2917,6 +2936,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.23/src/propagation/bindings/modulegen__gcc_LP64.py ns-3.24/src/propagation/bindings/modulegen__gcc_LP64.py
--- ns-3.23/src/propagation/bindings/modulegen__gcc_LP64.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/propagation/bindings/modulegen__gcc_LP64.py	2015-09-15 11:18:44.000000000 -0700
@@ -210,6 +210,12 @@
     nested_module = module.add_cpp_namespace('Hash')
     register_types_ns3_Hash(nested_module)
     
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -245,6 +251,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_methods(root_module):
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
     register_Ns3AttributeConstructionListItem_methods(root_module, root_module['ns3::AttributeConstructionList::Item'])
@@ -382,11 +395,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3Hasher_methods(root_module, cls):
@@ -1775,11 +1783,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -1993,10 +2011,10 @@
                    'double', 
                    [], 
                    is_virtual=True)
-    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
     cls.add_method('Interpolate', 
                    'double', 
-                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
                    visibility='private', is_virtual=True)
     ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
     cls.add_method('Validate', 
@@ -2905,6 +2923,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -2917,6 +2936,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.23/src/propagation/doc/propagation.rst ns-3.24/src/propagation/doc/propagation.rst
--- ns-3.23/src/propagation/doc/propagation.rst	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/propagation/doc/propagation.rst	2015-09-15 11:18:44.000000000 -0700
@@ -1,6 +1,8 @@
 .. include:: replace.txt
 .. highlight:: cpp
 
+.. _Propagation:
+
 Propagation
 -----------
 
diff -Naur ns-3.23/src/sixlowpan/bindings/modulegen__gcc_ILP32.py ns-3.24/src/sixlowpan/bindings/modulegen__gcc_ILP32.py
--- ns-3.23/src/sixlowpan/bindings/modulegen__gcc_ILP32.py	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/sixlowpan/bindings/modulegen__gcc_ILP32.py	2015-09-15 11:18:44.000000000 -0700
@@ -60,6 +60,10 @@
     root_module['ns3::Ipv6Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix [class]
     module.add_class('Ipv6Prefix', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    module.add_class('Mac48Address', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    root_module['ns3::Mac48Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## net-device-container.h (module 'network'): ns3::NetDeviceContainer [class]
     module.add_class('NetDeviceContainer', import_from_module='ns.network')
     ## object-base.h (module 'core'): ns3::ObjectBase [class]
@@ -244,6 +248,10 @@
     module.add_class('Ipv6PrefixValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## random-variable-stream.h (module 'core'): ns3::LogNormalRandomVariable [class]
     module.add_class('LogNormalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker [class]
+    module.add_class('Mac48AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue [class]
+    module.add_class('Mac48AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
     module.add_class('NetDevice', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice::PacketType [enumeration]
@@ -286,6 +294,12 @@
     nested_module = module.add_cpp_namespace('Hash')
     register_types_ns3_Hash(nested_module)
     
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -321,6 +335,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -339,6 +360,7 @@
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
     register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
+    register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
     register_Ns3NetDeviceContainer_methods(root_module, root_module['ns3::NetDeviceContainer'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
     register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
@@ -415,6 +437,8 @@
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
     register_Ns3LogNormalRandomVariable_methods(root_module, root_module['ns3::LogNormalRandomVariable'])
+    register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
+    register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3NormalRandomVariable_methods(root_module, root_module['ns3::NormalRandomVariable'])
@@ -553,17 +577,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -585,11 +609,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -599,16 +618,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -846,14 +855,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -914,11 +927,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3EventId_methods(root_module, cls):
@@ -1423,6 +1431,78 @@
                    is_const=True)
     return
 
+def register_Ns3Mac48Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(ns3::Mac48Address const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetBroadcast() [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv4Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv4Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv6Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast6Prefix() [member function]
+    cls.add_method('GetMulticast6Prefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticastPrefix() [member function]
+    cls.add_method('GetMulticastPrefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsBroadcast() const [member function]
+    cls.add_method('IsBroadcast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsGroup() const [member function]
+    cls.add_method('IsGroup', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static bool ns3::Mac48Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
 def register_Ns3NetDeviceContainer_methods(root_module, cls):
     ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer(ns3::NetDeviceContainer const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDeviceContainer const &', 'arg0')])
@@ -1761,7 +1841,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -3840,11 +3920,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -3954,10 +4044,10 @@
                    'double', 
                    [], 
                    is_virtual=True)
-    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
     cls.add_method('Interpolate', 
                    'double', 
-                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
                    visibility='private', is_virtual=True)
     ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
     cls.add_method('Validate', 
@@ -4324,6 +4414,46 @@
                    is_virtual=True)
     return
 
+def register_Ns3Mac48AddressChecker_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker(ns3::Mac48AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac48AddressValue_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressValue const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'value')])
+    ## mac48-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac48AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## mac48-address.h (module 'network'): ns3::Mac48Address ns3::Mac48AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): std::string ns3::Mac48AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48AddressValue::Set(ns3::Mac48Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac48Address const &', 'value')])
+    return
+
 def register_Ns3NetDevice_methods(root_module, cls):
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
     cls.add_constructor([])
@@ -5183,6 +5313,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -5195,6 +5326,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.23/src/sixlowpan/bindings/modulegen__gcc_LP64.py ns-3.24/src/sixlowpan/bindings/modulegen__gcc_LP64.py
--- ns-3.23/src/sixlowpan/bindings/modulegen__gcc_LP64.py	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/sixlowpan/bindings/modulegen__gcc_LP64.py	2015-09-15 11:18:44.000000000 -0700
@@ -60,6 +60,10 @@
     root_module['ns3::Ipv6Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix [class]
     module.add_class('Ipv6Prefix', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    module.add_class('Mac48Address', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    root_module['ns3::Mac48Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## net-device-container.h (module 'network'): ns3::NetDeviceContainer [class]
     module.add_class('NetDeviceContainer', import_from_module='ns.network')
     ## object-base.h (module 'core'): ns3::ObjectBase [class]
@@ -244,6 +248,10 @@
     module.add_class('Ipv6PrefixValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## random-variable-stream.h (module 'core'): ns3::LogNormalRandomVariable [class]
     module.add_class('LogNormalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker [class]
+    module.add_class('Mac48AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue [class]
+    module.add_class('Mac48AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
     module.add_class('NetDevice', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice::PacketType [enumeration]
@@ -286,6 +294,12 @@
     nested_module = module.add_cpp_namespace('Hash')
     register_types_ns3_Hash(nested_module)
     
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -321,6 +335,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -339,6 +360,7 @@
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
     register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
+    register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
     register_Ns3NetDeviceContainer_methods(root_module, root_module['ns3::NetDeviceContainer'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
     register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
@@ -415,6 +437,8 @@
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
     register_Ns3LogNormalRandomVariable_methods(root_module, root_module['ns3::LogNormalRandomVariable'])
+    register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
+    register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3NormalRandomVariable_methods(root_module, root_module['ns3::NormalRandomVariable'])
@@ -553,17 +577,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -585,11 +609,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -599,16 +618,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -846,14 +855,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -914,11 +927,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3EventId_methods(root_module, cls):
@@ -1423,6 +1431,78 @@
                    is_const=True)
     return
 
+def register_Ns3Mac48Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(ns3::Mac48Address const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetBroadcast() [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv4Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv4Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv6Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast6Prefix() [member function]
+    cls.add_method('GetMulticast6Prefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticastPrefix() [member function]
+    cls.add_method('GetMulticastPrefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsBroadcast() const [member function]
+    cls.add_method('IsBroadcast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsGroup() const [member function]
+    cls.add_method('IsGroup', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static bool ns3::Mac48Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
 def register_Ns3NetDeviceContainer_methods(root_module, cls):
     ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer(ns3::NetDeviceContainer const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDeviceContainer const &', 'arg0')])
@@ -1761,7 +1841,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -3840,11 +3920,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -3954,10 +4044,10 @@
                    'double', 
                    [], 
                    is_virtual=True)
-    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
     cls.add_method('Interpolate', 
                    'double', 
-                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
                    visibility='private', is_virtual=True)
     ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
     cls.add_method('Validate', 
@@ -4324,6 +4414,46 @@
                    is_virtual=True)
     return
 
+def register_Ns3Mac48AddressChecker_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker(ns3::Mac48AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac48AddressValue_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressValue const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'value')])
+    ## mac48-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac48AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## mac48-address.h (module 'network'): ns3::Mac48Address ns3::Mac48AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): std::string ns3::Mac48AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48AddressValue::Set(ns3::Mac48Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac48Address const &', 'value')])
+    return
+
 def register_Ns3NetDevice_methods(root_module, cls):
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
     cls.add_constructor([])
@@ -5183,6 +5313,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -5195,6 +5326,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.23/src/sixlowpan/examples/example-ping-lr-wpan.cc ns-3.24/src/sixlowpan/examples/example-ping-lr-wpan.cc
--- ns-3.23/src/sixlowpan/examples/example-ping-lr-wpan.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/sixlowpan/examples/example-ping-lr-wpan.cc	2015-09-15 11:18:44.000000000 -0700
@@ -49,13 +49,6 @@
   NodeContainer nodes;
   nodes.Create(2);
 
-  LrWpanHelper lrWpanHelper;
-  // Add and install the LrWpanNetDevice for each node
-  NetDeviceContainer lrwpanDevices = lrWpanHelper.Install(nodes);
-
-  // Fake PAN association and short address assignment.
-  lrWpanHelper.AssociateToPan (lrwpanDevices, 0);
-
   MobilityHelper mobility;
   mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
   mobility.SetPositionAllocator ("ns3::GridPositionAllocator",
@@ -68,6 +61,12 @@
   mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
   mobility.Install (nodes);
   
+  LrWpanHelper lrWpanHelper;
+  // Add and install the LrWpanNetDevice for each node
+  NetDeviceContainer lrwpanDevices = lrWpanHelper.Install(nodes);
+
+  // Fake PAN association and short address assignment.
+  lrWpanHelper.AssociateToPan (lrwpanDevices, 0);
 
   InternetStackHelper internetv6;
   internetv6.Install (nodes);
diff -Naur ns-3.23/src/sixlowpan/helper/sixlowpan-helper.h ns-3.24/src/sixlowpan/helper/sixlowpan-helper.h
--- ns-3.23/src/sixlowpan/helper/sixlowpan-helper.h	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/sixlowpan/helper/sixlowpan-helper.h	2015-09-15 11:18:44.000000000 -0700
@@ -46,8 +46,8 @@
    * Set an attribute on each ns3::SixlowpanNetDevice created by
    * SixlowpanHelper::Install.
    *
-   * \param n1 the name of the attribute to set
-   * \param v1 the value of the attribute to set
+   * \param n1 [in] The name of the attribute to set.
+   * \param v1 [in] The value of the attribute to set.
    */
   void SetDeviceAttribute (std::string n1,
                            const AttributeValue &v1);
@@ -74,8 +74,8 @@
    * examples directory.
    *
    *
-   * \param c the NetDevice container
-   * \return a container with the newly created SixLowPanNetDevices
+   * \param [in] c The NetDevice container.
+   * \return A container with the newly created SixLowPanNetDevices.
    */
   NetDeviceContainer Install (NetDeviceContainer c);
 
@@ -85,15 +85,15 @@
   * have been assigned. The Install() method should have previously been
   * called by the user.
   *
-  * \param c NetDeviceContainer of the set of net devices for which the
-  *          SixLowPanNetDevice should be modified to use a fixed stream
-  * \param stream first stream index to use
-  * \return the number of stream indices assigned by this helper
+  * \param [in] c NetDeviceContainer of the set of net devices for which the
+  *          SixLowPanNetDevice should be modified to use a fixed stream.
+  * \param [in] stream First stream index to use.
+  * \return The number of stream indices assigned by this helper.
   */
   int64_t AssignStreams (NetDeviceContainer c, int64_t stream);
 
 private:
-  ObjectFactory m_deviceFactory; //!< Object factory
+  ObjectFactory m_deviceFactory; //!< Object factory.
 };
 
 } // namespace ns3
diff -Naur ns-3.23/src/sixlowpan/model/sixlowpan-header.h ns-3.24/src/sixlowpan/model/sixlowpan-header.h
--- ns-3.23/src/sixlowpan/model/sixlowpan-header.h	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/sixlowpan/model/sixlowpan-header.h	2015-09-15 11:18:44.000000000 -0700
@@ -48,7 +48,7 @@
 {
 public:
   /**
-   *  \brief Dispatch values, as defined in RFC4944 and RFC6282
+   *  \brief Dispatch values, as defined in \RFC{4944} and \RFC{6282}
   \verbatim
      Pattern    Header Type
    +------------+------------------------------------------------+
@@ -112,15 +112,15 @@
 
   /**
    * \brief Get the Dispatch type.
-   * \param dispatch the dispatch value
-   * \return the Dispatch type
+   * \param [in] dispatch The dispatch value.
+   * \return The Dispatch type.
    */
   static Dispatch_e GetDispatchType (uint8_t dispatch);
 
   /**
    * \brief Get the NhcDispatch type.
-   * \param dispatch the dispatch value
-   * \return the NhcDispatch type
+   * \param [in] dispatch The dispatch value.
+   * \return The NhcDispatch type.
    */
   static NhcDispatch_e GetNhcDispatchType (uint8_t dispatch);
 
@@ -128,7 +128,7 @@
 
 /**
  * \ingroup sixlowpan
- * \brief 6LoWPAN HC1 header - see RFC 4944
+ * \brief 6LoWPAN HC1 header - see \RFC{4944}.
  */
 class SixLowPanHc1 : public Header
 {
@@ -138,7 +138,7 @@
    *
    * The address compression is handled in 4 bits and might mean:
    * PI: Prefix inline, PC: Prefix Compressed,
-   * II: Interface Identifier, Inline, IC: Interface Identifier Compressed
+   * II: Interface Identifier, Inline, IC: Interface Identifier Compressed.
    */
   enum LowPanHc1Addr_e
   {
@@ -166,13 +166,13 @@
 
   /**
    * \brief Get the type ID.
-   * \return the object TypeId
+   * \return The object TypeId.
    */
   static TypeId GetTypeId (void);
 
   /**
    * \brief Return the instance type identifier.
-   * \return instance type ID
+   * \return Instance type ID.
    */
 
   virtual TypeId GetInstanceTypeId (void) const;
@@ -181,195 +181,195 @@
 
   /**
    * \brief Get the serialized size of the packet.
-   * \return size
+   * \return Size.
    */
   virtual uint32_t GetSerializedSize (void) const;
 
   /**
    * \brief Serialize the packet.
-   * \param start Buffer iterator
+   * \param [in] start Buffer iterator.
    */
   virtual void Serialize (Buffer::Iterator start) const;
 
   /**
    * \brief Deserialize the packet.
-   * \param start Buffer iterator
-   * \return size of the packet
+   * \param [in] start Buffer iterator.
+   * \return Size of the packet.
    */
   virtual uint32_t Deserialize (Buffer::Iterator start);
 
   /**
    * \brief Set the "Hop limit" field (TTL).
-   * \param limit the hop limit value
+   * \param [in] Limit The hop limit value.
    */
   void SetHopLimit (uint8_t limit);
 
   /**
    * \brief Get the "Hop limit" field (TTL).
-   * \return the hop limit value
+   * \return The hop limit value.
    */
   uint8_t GetHopLimit (void) const;
 
   /**
-   * \brief Get Destination Compression type
-   * \returns the kind of address compression
+   * \brief Get Destination Compression type.
+   * \returns The kind of address compression.
    */
   LowPanHc1Addr_e GetDstCompression () const;
 
   /**
-   * \brief Get the destination interface
-   * \returns the destination interface
+   * \brief Get the destination interface.
+   * \returns The destination interface.
    */
   const uint8_t* GetDstInterface () const;
 
   /**
-   * \brief Get the destination prefix
-   * \returns the destination prefix
+   * \brief Get the destination prefix.
+   * \returns The destination prefix.
    */
   const uint8_t* GetDstPrefix () const;
 
   /**
-   * \brief Get the Flow Label value
-   * \returns the Flow Label
+   * \brief Get the Flow Label value.
+   * \returns The Flow Label.
    */
   uint32_t GetFlowLabel () const;
 
   /**
-   * \brief Get the Next Header value
-   * \returns the Next Header value
+   * \brief Get the Next Header value.
+   * \returns The Next Header value.
    */
   uint8_t GetNextHeader () const;
 
   /**
-   * \brief Get Source Compression type
-   * \returns the kind of address compression
+   * \brief Get Source Compression type.
+   * \returns The kind of address compression.
    */
   LowPanHc1Addr_e GetSrcCompression () const;
 
   /**
-   * \brief Get the source interface
-   * \returns the source interface
+   * \brief Get the source interface.
+   * \returns The source interface.
    */
   const uint8_t* GetSrcInterface () const;
 
   /**
-   * \brief Get the source prefix
-   * \returns the source prefix
+   * \brief Get the source prefix.
+   * \returns The source prefix.
    */
   const uint8_t* GetSrcPrefix () const;
 
   /**
-   * \brief Get the Traffic Class value
-   * \returns the Traffic Class value
+   * \brief Get the Traffic Class value.
+   * \returns The Traffic Class value.
    */
   uint8_t GetTrafficClass () const;
 
   /**
-   * \brief Check if the Traffic Class and Flow Labels are compressed
-   * \returns true if TC and FL are compressed
+   * \brief Check if the Traffic Class and Flow Labels are compressed.
+   * \returns True if TC and FL are compressed.
    */
   bool IsTcflCompression () const;
 
   /**
-   * \brief Check if there is a HC2 compressed header
-   * \returns true if next header is HC2 copressed
+   * \brief Check if there is a HC2 compressed header.
+   * \returns True if next header is HC2 compressed.
    */
   bool IsHc2HeaderPresent () const;
 
   /**
-   * \brief Set Destination Compression type
-   * \param dstCompression the kind of address compression
+   * \brief Set Destination Compression type.
+   * \param [in] dstCompression The kind of address compression.
    */
   void SetDstCompression (LowPanHc1Addr_e dstCompression);
 
   /**
-   * \brief Set the destination interface
-   * \param dstInterface the destination interface
+   * \brief Set the destination interface.
+   * \param [in] dstInterface The destination interface.
    */
   void SetDstInterface (const uint8_t* dstInterface);
 
   /**
-   * \brief Set the destination prefix
-   * \param dstPrefix the destination prefix
+   * \brief Set the destination prefix.
+   * \param [in] dstPrefix The destination prefix.
    */
   void SetDstPrefix (const uint8_t* dstPrefix);
 
   /**
-   * \brief Set the Flow Label value
-   * \param flowLabel the Flow Label
+   * \brief Set the Flow Label value.
+   * \param [in] flowLabel The Flow Label.
    */
   void SetFlowLabel (uint32_t flowLabel);
 
   /**
-   * \brief Set the Next Header value
-   * \param nextHeader the Next Header value
+   * \brief Set the Next Header value.
+   * \param [in] nextHeader The Next Header value.
    */
   void SetNextHeader (uint8_t nextHeader);
 
   /**
-   * \brief Set Source Compression type
-   * \param srcCompression the kind of address compression
+   * \brief Set Source Compression type.
+   * \param [in] srcCompression The kind of address compression.
    */
   void SetSrcCompression (LowPanHc1Addr_e srcCompression);
 
   /**
-   * \brief Set the source interface
-   * \param srcInterface the source interface
+   * \brief Set the source interface.
+   * \param [in] srcInterface The source interface.
    */
   void SetSrcInterface (const uint8_t* srcInterface);
 
   /**
-   * \brief Set the source prefix
-   * \param srcPrefix the source prefix
+   * \brief Set the source prefix.
+   * \param [in] srcPrefix The source prefix.
    */
   void SetSrcPrefix (const uint8_t* srcPrefix);
 
   /**
-   * \brief Set the Traffic Class and Flow Labels as compressed
-   * \param tcflCompression true if TC and FL are compressed
+   * \brief Set the Traffic Class and Flow Labels as compressed.
+   * \param [in] tcflCompression True if TC and FL are compressed.
    */
   void SetTcflCompression (bool tcflCompression);
 
   /**
-   * \brief Set the next header a HC2 compressed header
-   * \param hc2HeaderPresent true if next header is HC2 compressed
+   * \brief Set the next header a HC2 compressed header.
+   * \param [in] hc2HeaderPresent True if next header is HC2 compressed.
    */
   void SetHc2HeaderPresent (bool hc2HeaderPresent);
 
   /**
-   * \brief Set the Traffic Class value
-   * \param trafficClass the Traffic Class value
+   * \brief Set the Traffic Class value.
+   * \param [in] trafficClass The Traffic Class value.
    */
   void SetTrafficClass (uint8_t trafficClass);
 
 private:
-  uint8_t m_hopLimit;           //!< Hop Limit
-  uint8_t m_srcPrefix[8];       //!< Source prefix
-  uint8_t m_srcInterface[8];    //!< Source interface
-  uint8_t m_dstPrefix[8];       //!< Destination prefix
-  uint8_t m_dstInterface[8];    //!< Destination interface
-  uint8_t m_trafficClass;       //!< Traffic Class
-  uint32_t m_flowLabel;         //!< Flow Label
-  uint8_t m_nextHeader;         //!< Next header
-  LowPanHc1Addr_e m_srcCompression; //!< Source compression type
-  LowPanHc1Addr_e m_dstCompression; //!< Destination compression type
-  bool m_tcflCompression;       //!< is TC and FL compressed
-  LowPanHc1NextHeader_e m_nextHeaderCompression; //!< next header compression
-  bool m_hc2HeaderPresent;      //!< is next header HC2 compressed
+  uint8_t m_hopLimit;           //!< Hop Limit.
+  uint8_t m_srcPrefix[8];       //!< Source prefix.
+  uint8_t m_srcInterface[8];    //!< Source interface.
+  uint8_t m_dstPrefix[8];       //!< Destination prefix.
+  uint8_t m_dstInterface[8];    //!< Destination interface.
+  uint8_t m_trafficClass;       //!< Traffic Class.
+  uint32_t m_flowLabel;         //!< Flow Label.
+  uint8_t m_nextHeader;         //!< Next header.
+  LowPanHc1Addr_e m_srcCompression; //!< Source compression type.
+  LowPanHc1Addr_e m_dstCompression; //!< Destination compression type.
+  bool m_tcflCompression;       //!< Is TC and FL compressed.
+  LowPanHc1NextHeader_e m_nextHeaderCompression; //!< Next header compression.
+  bool m_hc2HeaderPresent;      //!< Is next header HC2 compressed.
 };
 
 /**
  * \brief Stream insertion operator.
  *
- * \param os the reference to the output stream
- * \param header the HC1 Header
- * \returns the reference to the output stream
+ * \param [in] os The reference to the output stream.
+ * \param [in] header The HC1 Header.
+ * \returns The reference to the output stream.
  */
 std::ostream & operator<< (std::ostream & os, SixLowPanHc1 const &header);
 
 /**
  * \ingroup sixlowpan
- * \brief 6LoWPAN FRAG1 header - see RFC 4944
+ * \brief 6LoWPAN FRAG1 header - see \RFC{4944}.
  */
 class SixLowPanFrag1 : public Header
 {
@@ -378,13 +378,13 @@
 
   /**
    * \brief Get the type ID.
-   * \return the object TypeId
+   * \return The object TypeId.
    */
   static TypeId GetTypeId (void);
 
   /**
    * \brief Return the instance type identifier.
-   * \return instance type ID
+   * \return Instance type ID.
    */
   virtual TypeId GetInstanceTypeId (void) const;
 
@@ -392,65 +392,65 @@
 
   /**
    * \brief Get the serialized size of the packet.
-   * \return size
+   * \return Size.
    */
   virtual uint32_t GetSerializedSize (void) const;
 
   /**
    * \brief Serialize the packet.
-   * \param start Buffer iterator
+   * \param [in] start Buffer iterator.
    */
   virtual void Serialize (Buffer::Iterator start) const;
 
   /**
    * \brief Deserialize the packet.
-   * \param start Buffer iterator
-   * \return size of the packet
+   * \param [in] start Buffer iterator.
+   * \return Size of the packet.
    */
   virtual uint32_t Deserialize (Buffer::Iterator start);
 
   /**
-   * \brief Set the datagram size
-   * \param datagramSize the datagram size
+   * \brief Set the datagram size.
+   * \param [in] datagramSize The datagram size.
    */
   void SetDatagramSize (uint16_t datagramSize);
 
   /**
-   * \brief Get the datagram size
-   * \returns the datagram size
+   * \brief Get the datagram size.
+   * \returns The datagram size.
    */
   uint16_t GetDatagramSize (void) const;
 
   /**
-   * \brief Set the datagram tag
-   * \param datagramTag the datagram tag
+   * \brief Set the datagram tag.
+   * \param [in] datagramTag The datagram tag.
    */
   void SetDatagramTag (uint16_t datagramTag);
 
   /**
-   * \brief Get the datagram tag
-   * \returns the datagram tag
+   * \brief Get the datagram tag.
+   * \returns The datagram tag.
    */
   uint16_t GetDatagramTag (void) const;
 
 private:
-  uint16_t m_datagramSize; //!< datagram size
-  uint16_t m_datagramTag;  //!< datagram tag
+  uint16_t m_datagramSize; //!< Datagram size.
+  uint16_t m_datagramTag;  //!< Datagram tag.
 
 };
 
 /**
  * \brief Stream insertion operator.
  *
- * \param os the reference to the output stream
- * \param header the Frag1 Header
- * \returns the reference to the output stream
+ * \param [in] os The reference to the output stream.
+ * \param [in] header The Frag1 Header.
+ * \returns The reference to the output stream.
  */
 std::ostream & operator<< (std::ostream & os, SixLowPanFrag1 const & header);
 
 /**
  * \ingroup sixlowpan
- * \brief 6LoWPAN FRAGN header - see RFC 4944
+ * \brief 6LoWPAN FRAGN header - see \RFC{4944}.
  */
 class SixLowPanFragN : public Header
 {
@@ -459,13 +459,13 @@
 
   /**
    * \brief Get the type ID.
-   * \return the object TypeId
+   * \return The object TypeId.
    */
   static TypeId GetTypeId (void);
 
   /**
    * \brief Return the instance type identifier.
-   * \return instance type ID
+   * \return Instance type ID.
    */
   virtual TypeId GetInstanceTypeId (void) const;
 
@@ -473,78 +473,78 @@
 
   /**
    * \brief Get the serialized size of the packet.
-   * \return size
+   * \return Size.
    */
   virtual uint32_t GetSerializedSize (void) const;
 
   /**
    * \brief Serialize the packet.
-   * \param start Buffer iterator
+   * \param [in] start Buffer iterator.
    */
   virtual void Serialize (Buffer::Iterator start) const;
 
   /**
    * \brief Deserialize the packet.
-   * \param start Buffer iterator
-   * \return size of the packet
+   * \param [in] start Buffer iterator.
+   * \return Size of the packet.
    */
   virtual uint32_t Deserialize (Buffer::Iterator start);
 
   /**
-   * \brief Set the datagram size
-   * \param datagramSize the datagram size
+   * \brief Set the datagram size.
+   * \param [in] datagramSize The datagram size.
    */
   void SetDatagramSize (uint16_t datagramSize);
 
   /**
-   * \brief Get the datagram size
-   * \returns the datagram size
+   * \brief Get the datagram size.
+   * \returns The datagram size.
    */
   uint16_t GetDatagramSize (void) const;
 
   /**
-   * \brief Set the datagram tag
-   * \param datagramTag the datagram tag
+   * \brief Set the datagram tag.
+   * \param [in] datagramTag The datagram tag.
    */
   void SetDatagramTag (uint16_t datagramTag);
 
   /**
-   * \brief Get the datagram tag
-   * \returns the datagram tag
+   * \brief Get the datagram tag.
+   * \returns The datagram tag.
    */
   uint16_t GetDatagramTag (void) const;
 
   /**
-   * \brief Set the datagram offset
-   * \param datagramOffset the datagram offset
+   * \brief Set the datagram offset.
+   * \param [in] datagramOffset The datagram offset.
    */
   void SetDatagramOffset (uint8_t datagramOffset);
 
   /**
-   * \brief Get the datagram offset
-   * \returns the datagram offset
+   * \brief Get the datagram offset.
+   * \returns The datagram offset.
    */
   uint8_t GetDatagramOffset (void) const;
 
 private:
-  uint16_t m_datagramSize;  //!< datagram size
-  uint16_t m_datagramTag;   //!< datagram tag
-  uint8_t m_datagramOffset; //!< datagram offset
+  uint16_t m_datagramSize;  //!< Datagram size.
+  uint16_t m_datagramTag;   //!< Datagram tag.
+  uint8_t m_datagramOffset; //!< Datagram offset.
 
 };
 
 /**
  * \brief Stream insertion operator.
  *
- * \param os the reference to the output stream
- * \param header the FragN Header
- * \returns the reference to the output stream
+ * \param [in] os The reference to the output stream.
+ * \param [in] header The FragN Header.
+ * \returns The reference to the output stream.
  */
 std::ostream & operator<< (std::ostream & os, SixLowPanFragN const &header);
 
 /**
  * \ingroup sixlowpan
- * \brief 6LoWPAN IPv6 uncompressed header - see RFC 4944
+ * \brief 6LoWPAN IPv6 uncompressed header - see \RFC{4944}.
  */
 class SixLowPanIpv6 : public Header
 {
@@ -553,13 +553,13 @@
 
   /**
    * \brief Get the type ID.
-   * \return the object TypeId
+   * \return The object TypeId.
    */
   static TypeId GetTypeId (void);
 
   /**
    * \brief Return the instance type identifier.
-   * \return instance type ID
+   * \return Instance type ID.
    */
   virtual TypeId GetInstanceTypeId (void) const;
 
@@ -567,20 +567,20 @@
 
   /**
    * \brief Get the serialized size of the packet.
-   * \return size
+   * \return Size.
    */
   virtual uint32_t GetSerializedSize (void) const;
 
   /**
    * \brief Serialize the packet.
-   * \param start Buffer iterator
+   * \param [in] start Buffer iterator.
    */
   virtual void Serialize (Buffer::Iterator start) const;
 
   /**
    * \brief Deserialize the packet.
-   * \param start Buffer iterator
-   * \return size of the packet
+   * \param [in] start Buffer iterator.
+   * \return Size of the packet.
    */
   virtual uint32_t Deserialize (Buffer::Iterator start);
 
@@ -589,15 +589,15 @@
 /**
  * \brief Stream insertion operator.
  *
- * \param os the reference to the output stream
- * \param header the Frag1 Header
- * \returns the reference to the output stream
+ * \param [in] os The reference to the output stream.
+ * \param [in] header The Frag1 Header.
+ * \returns The reference to the output stream.
  */
 std::ostream & operator<< (std::ostream & os, SixLowPanIpv6 const & header);
 
 /**
 * \ingroup sixlowpan
-* \brief   LOWPAN_IPHC base Encoding - see RFC 6282
+* \brief   LOWPAN_IPHC base Encoding - see \RFC{6282}.
   \verbatim
        0                                       1
        0   1   2   3   4   5   6   7   8   9   0   1   2   3   4   5
@@ -610,7 +610,7 @@
 {
 public:
   /**
-   *  \brief TF: Traffic Class, Flow Label
+   *  \brief TF: Traffic Class, Flow Label.
    *
    *  00:  ECN + DSCP + 4-bit Pad + Flow Label (4 bytes)
    *  01:  ECN + 2-bit Pad + Flow Label (3 bytes), DSCP is elided.
@@ -627,7 +627,7 @@
   };
 
   /**
-   *  \brief HLIM: Hop Limit
+   *  \brief HLIM: Hop Limit.
    *
    *  00:  The Hop Limit field is carried in-line.
    *  01:  The Hop Limit field is compressed and the hop limit is 1.
@@ -643,7 +643,7 @@
   };
 
   /**
-   *  \brief Source or Destination Address Mode
+   *  \brief Source or Destination Address Mode.
    *
    *  00:  128 bits.
    *  01:  64 bits (or 48 bits if multicast).
@@ -660,20 +660,20 @@
 
   SixLowPanIphc (void);
   /**
-   * \brief Constructor
-   * \param dispatch dispatch value
+   * \brief Constructor.
+   * \param [in] dispatch Dispatch value.
    */
   SixLowPanIphc (uint8_t dispatch);
 
   /**
    * \brief Get the type ID.
-   * \return the object TypeId
+   * \return The object TypeId.
    */
   static TypeId GetTypeId (void);
 
   /**
    * \brief Return the instance type identifier.
-   * \return instance type ID
+   * \return Instance type ID.
    */
   virtual TypeId GetInstanceTypeId (void) const;
 
@@ -681,258 +681,258 @@
 
   /**
    * \brief Get the serialized size of the packet.
-   * \return size
+   * \return Size.
    */
   virtual uint32_t GetSerializedSize (void) const;
 
   /**
    * \brief Serialize the packet.
-   * \param start Buffer iterator
+   * \param [in] start Buffer iterator.
    */
   virtual void Serialize (Buffer::Iterator start) const;
 
   /**
    * \brief Deserialize the packet.
-   * \param start Buffer iterator
-   * \return size of the packet
+   * \param [in] start Buffer iterator.
+   * \return Size of the packet.
    */
   virtual uint32_t Deserialize (Buffer::Iterator start);
 
   /**
    * \brief Set the TF (Traffic Class, Flow Label) compression.
-   * \param tfField ECN, DSCP, Flow Label compression type
+   * \param [in] tfField ECN, DSCP, Flow Label compression type.
    */
   void SetTf (TrafficClassFlowLabel_e tfField);
 
   /**
    * \brief Get the TF (Traffic Class, Flow Label) compression.
-   * \return the ECN, DSCP, Flow Label compression type
+   * \return The ECN, DSCP, Flow Label compression type.
    */
   TrafficClassFlowLabel_e GetTf (void) const;
 
   /**
    * \brief Set the NH (Next Header) compression.
-   * \param nhField false (Next Header carried in-line), true (compressed NH)
+   * \param [in] nhField False (Next Header carried in-line), true (compressed NH).
    */
   void SetNh (bool nhField);
 
   /**
    * \brief Get the NH (Next Header) compression.
-   * \return false (Next Header carried in-line), true (compressed NH)
+   * \return False (Next Header carried in-line), true (compressed NH).
    */
   bool GetNh (void) const;
 
   /**
    * \brief Set the HLIM (Hop Limit) compression.
-   * \param hlimField Hop Limit compression type
+   * \param [in] hlimField Hop Limit compression type
    */
   void SetHlim (Hlim_e hlimField);
 
   /**
    * \brief Get the HLIM (Hop Limit) compression.
-   * \return Hop Limit compression type
+   * \return Hop Limit compression type.
    */
   Hlim_e GetHlim (void) const;
 
   /**
    * \brief Set the CID (Context Identifier Extension) compression.
-   * \param cidField false (no CID present), true (CID follows)
+   * \param [in] cidField False (no CID present), true (CID follows).
    */
   void SetCid (bool cidField);
 
   /**
    * \brief Get the CID (Context Identifier Extension) compression.
-   * \return false (no CID present), true (CID follows)
+   * \return False (no CID present), true (CID follows).
    */
   bool GetCid (void) const;
 
   /**
    * \brief Set the SAC (Source Address Compression) compression.
-   * \param sacField false (stateless), true (stateful)
+   * \param [in] sacField False (stateless), true (stateful).
    */
   void SetSac (bool sacField);
 
   /**
    * \brief Get the SAC (Source Address Compression) compression.
-   * \return false (stateless), true (stateful)
+   * \return False (stateless), true (stateful).
    */
   bool GetSac (void) const;
 
   /**
    * \brief Set the SAM (Source Address Mode) compression.
-   * \param samField - depends on the SAC
+   * \param [in] samField Depends on the SAC.
    */
   void SetSam (HeaderCompression_e samField);
 
   /**
    * \brief Get the SAM (Source Address Mode) compression.
-   * \return depends on the SAC field
+   * \return Depends on the SAC field.
    */
   HeaderCompression_e GetSam (void) const;
 
   /**
    * \brief Set the M (Multicast) compression.
-   * \param mField true if destination is multicast
+   * \param [in] mField True if destination is multicast.
    */
   void SetM (bool mField);
 
   /**
    * \brief Get the M (Multicast) compression.
-   * \return true if destination is multicast
+   * \return True if destination is multicast.
    */
   bool GetM (void) const;
 
   /**
    * \brief Set the DAC (Destination Address Compression) compression.
-   * \param dacField false (stateless), true (stateful)
+   * \param [in] dacField False (stateless), true (stateful).
    */
   void SetDac (bool dacField);
 
   /**
    * \brief Get the DAC (Destination Address Compression) compression.
-   * \return false (stateless), true (stateful)
+   * \return False (stateless), true (stateful).
    */
   bool GetDac (void) const;
 
   /**
    * \brief Set the DAM (Destination Address Mode) compression.
-   * \param damField - depends on the DAC and M fields
+   * \param [in] damField Depends on the DAC and M fields.
    */
   void SetDam (HeaderCompression_e damField);
 
   /**
    * \brief Get the DAM (Destination Address Mode) compression.
-   * \return depends on the DAC and M fields
+   * \return Depends on the DAC and M fields.
    */
   HeaderCompression_e GetDam (void) const;
 
   /**
    * \brief Set the SrcContextId.
-   * \param srcContextId - valid values are [0:15]
+   * \param [in] srcContextId Valid values are [0:15].
    */
   void SetSrcContextId (uint8_t srcContextId);
 
   /**
    * \brief Get the SrcContextId.
-   * \return the SrcContextId
+   * \return The SrcContextId.
    */
   uint8_t GetSrcContextId (void) const;
 
   /**
    * \brief Set the DstContextId.
-   * \param dstContextId - valid values are [0:15]
+   * \param [in] dstContextId Valid values are [0:15].
    */
   void SetDstContextId (uint8_t dstContextId);
 
   /**
    * \brief Get the DstContextId.
-   * \return the DstContextId
+   * \return The DstContextId.
    */
   uint8_t GetDstContextId (void) const;
 
   /**
    * \brief Set the ECN (2bits).
-   * \param ecn - valid values are [0:3]
+   * \param [in] ecn Valid values are [0:3].
    */
   void SetEcn (uint8_t ecn);
 
   /**
    * \brief Get the ECN.
-   * \return the ECN
+   * \return The ECN.
    */
   uint8_t GetEcn (void) const;
 
   /**
    * \brief Set the DSCP (6bits).
-   * \param dscp - valid values are [0:63]
+   * \param [in] dscp Valid values are [0:63].
    */
   void SetDscp (uint8_t dscp);
 
   /**
    * \brief Get the DSCP.
-   * \return the DSCP
+   * \return The DSCP.
    */
   uint8_t GetDscp (void) const;
 
   /**
    * \brief Set the Flow Label (20bits).
-   * \param flowLabel - valid values are 20 bits long.
+   * \param [in] flowLabel Valid values are 20 bits long.
    */
   void SetFlowLabel (uint32_t flowLabel);
 
   /**
    * \brief Get the Flow Label.
-   * \return the Flow Label
+   * \return The Flow Label.
    */
   uint32_t GetFlowLabel (void) const;
 
   /**
    * \brief Set the Next Header field.
-   * \param nextHeader Next Header field.
+   * \param [in] nextHeader Next Header field.
    */
   void SetNextHeader (uint8_t nextHeader);
 
   /**
    * \brief Get the Next Header field.
-   * \return the Next Header field.
+   * \return The Next Header field.
    */
   uint8_t GetNextHeader (void) const;
 
   /**
    * \brief Set the Hop Limit field.
-   * \param hopLimit Hop Limit field.
+   * \param [in] hopLimit Hop Limit field.
    */
   void SetHopLimit (uint8_t hopLimit);
 
   /**
    * \brief Get the Hop Limit field.
-   * \return the Hop Limit field.
+   * \return The Hop Limit field.
    */
   uint8_t GetHopLimit (void) const;
 
   /**
    * \brief Set the Source Address.
-   * \param srcAddress the Source Address.
+   * \param [in] srcAddress The Source Address.
    */
   void SetSrcAddress (Ipv6Address srcAddress);
 
   /**
    * \brief Get the Source Address.
-   * \return the Source Address.
+   * \return The Source Address.
    */
   Ipv6Address GetSrcAddress () const;
 
   /**
    * \brief Set the Destination Address.
-   * \param dstAddress the Destination Address.
+   * \param [in] dstAddress The Destination Address.
    */
   void SetDstAddress (Ipv6Address dstAddress);
 
   /**
    * \brief Get the Destination Address.
-   * \return the Destination Address.
+   * \return The Destination Address.
    */
   Ipv6Address GetDstAddress () const;
 
 private:
-  uint16_t m_baseFormat;      //!< Dispatch + encoding fields
-  uint8_t m_srcdstContextId;  //!< Src and Dst Context ID
-  uint8_t m_ecn : 2;          //!< ECN bits
-  uint8_t m_dscp : 6;         //!< DSCP bits
-  uint32_t m_flowLabel : 20;  //!< Flow Label bits
-  uint8_t m_nextHeader;       //!< Next header
-  uint8_t m_hopLimit;         //!< Hop Limit
-  Ipv6Address m_srcAddress;   //!< Src address
-  Ipv6Address m_dstAddress;   //!< Dst address
+  uint16_t m_baseFormat;      //!< Dispatch + encoding fields.
+  uint8_t m_srcdstContextId;  //!< Src and Dst Context ID.
+  uint8_t m_ecn : 2;          //!< ECN bits.
+  uint8_t m_dscp : 6;         //!< DSCP bits.
+  uint32_t m_flowLabel : 20;  //!< Flow Label bits.
+  uint8_t m_nextHeader;       //!< Next header.
+  uint8_t m_hopLimit;         //!< Hop Limit.
+  Ipv6Address m_srcAddress;   //!< Src address.
+  Ipv6Address m_dstAddress;   //!< Dst address.
 
   /**
    * \brief Post-process the Source address stateful compression
-   * \note currently unsupported
+   * \note Currently unsupported.
    */
   void PostProcessSac ();
   /**
-   * \brief Post-process the Destination address stateful compression
-   * \note currently unsupported
+   * \brief Post-process the Destination address stateful compression.
+   * \note Currently unsupported.
    */
   void PostProcessDac ();
 
@@ -941,15 +941,15 @@
 /**
  * \brief Stream insertion operator.
  *
- * \param os the reference to the output stream
- * \param header the IPHC Header
- * \returns the reference to the output stream
+ * \param [in] os The reference to the output stream.
+ * \param [in] header The IPHC Header.
+ * \returns The reference to the output stream.
  */
 std::ostream & operator<< (std::ostream & os, SixLowPanIphc const &header);
 
 /**
 * \ingroup sixlowpan
-* \brief   LOWPAN_NHC Extension Header Encoding - see RFC 6282
+* \brief   LOWPAN_NHC Extension Header Encoding - see \RFC{6282}.
   \verbatim
      0   1   2   3   4   5   6   7
    +---+---+---+---+---+---+---+---+
@@ -961,14 +961,14 @@
 {
 public:
   /**
-   *  \brief EID: IPv6 Extension Header ID
+   *  \brief EID: IPv6 Extension Header ID.
    *
    *   EID: IPv6 Extension Header ID:
-   *      0: IPv6 Hop-by-Hop Options Header [RFC2460]
-   *      1: IPv6 Routing Header [RFC2460]
-   *      2: IPv6 Fragment Header [RFC2460]
-   *      3: IPv6 Destination Options Header [RFC2460]
-   *      4: IPv6 Mobility Header [RFC6275]
+   *      0: IPv6 Hop-by-Hop Options Header [\RFC{2460}]
+   *      1: IPv6 Routing Header [\RFC{2460}]
+   *      2: IPv6 Fragment Header [\RFC{2460}]
+   *      3: IPv6 Destination Options Header [\RFC{2460}]
+   *      4: IPv6 Mobility Header [\RFC{6275}]
    *      5: Reserved
    *      6: Reserved
    *      7: IPv6 Header
@@ -987,13 +987,13 @@
 
   /**
    * \brief Get the type ID.
-   * \return the object TypeId
+   * \return The object TypeId.
    */
   static TypeId GetTypeId (void);
 
   /**
    * \brief Return the instance type identifier.
-   * \return instance type ID
+   * \return Instance type ID.
    */
   virtual TypeId GetInstanceTypeId (void) const;
 
@@ -1001,100 +1001,100 @@
 
   /**
    * \brief Get the serialized size of the packet.
-   * \return size
+   * \return Size.
    */
   virtual uint32_t GetSerializedSize (void) const;
 
   /**
    * \brief Serialize the packet.
-   * \param start Buffer iterator
+   * \param [in] start Buffer iterator.
    */
   virtual void Serialize (Buffer::Iterator start) const;
 
   /**
    * \brief Deserialize the packet.
-   * \param start Buffer iterator
-   * \return size of the packet
+   * \param [in] start Buffer iterator.
+   * \return Size of the packet.
    */
   virtual uint32_t Deserialize (Buffer::Iterator start);
 
   /**
    * \brief Get the NhcDispatch type.
-   * \return the NhcDispatch type
+   * \return The NhcDispatch type.
    */
   virtual SixLowPanDispatch::NhcDispatch_e GetNhcDispatchType (void) const;
 
   /**
    * \brief Set the Extension Header Type.
-   * \param extensionHeaderType the Extension Header Type
+   * \param [in] extensionHeaderType The Extension Header Type.
    */
   void SetEid (Eid_e extensionHeaderType);
 
   /**
    * \brief Get the Extension Header Type.
-   * \return the Extension Header Type
+   * \return The Extension Header Type.
    */
   Eid_e GetEid (void) const;
 
   /**
    * \brief Set the Next Header field values.
-   * \param nextHeader the Next Header field value
+   * \param [in] nextHeader The Next Header field value.
    */
   void SetNextHeader (uint8_t nextHeader);
 
   /**
    * \brief Get the Next Header field value.
-   * \return the Next Header field value
+   * \return The Next Header field value.
    */
   uint8_t GetNextHeader (void) const;
 
   /**
    * \brief Set the NH field values.
-   * \param nhField the NH field value
+   * \param [in] nhField The NH field value.
    */
   void SetNh (bool nhField);
 
   /**
    * \brief Get the Next Header field value.
-   * \return the NH field value
+   * \return The NH field value.
    */
   bool GetNh (void) const;
 
   /**
    * \brief Set the option header data blob.
-   * \param blob a buffer holding the blob data
-   * \param size the data blob size
+   * \param [in] blob A buffer holding the blob data.
+   * \param [in] size The data blob size.
    */
   void SetBlob (const uint8_t* blob, uint32_t size);
 
   /**
    * \brief Get the option header data blob.
-   * \param blob a buffer to copy the blob data into
-   * \param size the size of the buffer
-   * \return the length of the copied data
+   * \param [in] blob A buffer to copy the blob data into.
+   * \param [in] size The size of the buffer.
+   * \return The length of the copied data.
    */
   uint32_t CopyBlob (uint8_t* blob, uint32_t size) const;
 
 private:
-  uint8_t m_nhcExtensionHeader; //!< NHC extension header type
-  uint8_t m_nhcNextHeader;      //!< Next header
-  uint8_t m_nhcBlobLength;      //!< Length of the NHC compressed header
-  uint8_t m_nhcBlob[256];       //!< NHC compressed header
+  uint8_t m_nhcExtensionHeader; //!< NHC extension header type.
+  uint8_t m_nhcNextHeader;      //!< Next header.
+  uint8_t m_nhcBlobLength;      //!< Length of the NHC compressed header.
+  uint8_t m_nhcBlob[256];       //!< NHC compressed header.
 };
 
 /**
  * \brief Stream insertion operator.
  *
- * \param os the reference to the output stream
- * \param header the NHC Extension Header
- * \returns the reference to the output stream
+ * \param [in] os The reference to the output stream.
+ * \param [in] header The NHC Extension Header.
+ * \returns The reference to the output stream.
  */
 std::ostream & operator<< (std::ostream & os, SixLowPanNhcExtension const &header);
 
 
 /**
 * \ingroup sixlowpan
-* \brief   UDP LOWPAN_NHC Extension Header Encoding - see RFC 6282
+* \brief   UDP LOWPAN_NHC Extension Header Encoding - see \RFC{6282}.
   \verbatim
      0   1   2   3   4   5   6   7
    +---+---+---+---+---+---+---+---+
@@ -1124,14 +1124,14 @@
   SixLowPanUdpNhcExtension (void);
 
   /**
-   * \brief Return the instance type identifier.
-   * \return instance type ID
+   * \brief Get the type ID.
+   * \return The object TypeId.
    */
   static TypeId GetTypeId (void);
 
   /**
    * \brief Return the instance type identifier.
-   * \return instance type ID
+   * \return Instance type ID.
    */
   virtual TypeId GetInstanceTypeId (void) const;
 
@@ -1139,102 +1139,102 @@
 
   /**
    * \brief Get the serialized size of the packet.
-   * \return size
+   * \return Size.
    */
   virtual uint32_t GetSerializedSize (void) const;
 
   /**
    * \brief Serialize the packet.
-   * \param start Buffer iterator
+   * \param [in] start Buffer iterator.
    */
   virtual void Serialize (Buffer::Iterator start) const;
 
   /**
    * \brief Deserialize the packet.
-   * \param start Buffer iterator
-   * \return size of the packet
+   * \param [in] start Buffer iterator.
+   * \return Size of the packet.
    */
   virtual uint32_t Deserialize (Buffer::Iterator start);
 
   /**
    * \brief Get the NhcDispatch type.
-   * \return the NhcDispatch type
+   * \return The NhcDispatch type.
    */
   virtual SixLowPanDispatch::NhcDispatch_e GetNhcDispatchType (void) const;
 
   /**
    * \brief Set the compressed Src and Dst Ports.
-   * \param port Src and Dst the Ports
+   * \param [in] port Src and Dst Ports.
    */
   void SetPorts (Ports_e port);
 
   /**
    * \brief Get the compressed Src and Dst Ports.
-   * \return the Src and Dst Ports
+   * \return The Src and Dst Ports.
    */
   Ports_e GetPorts (void) const;
 
   /**
-   * \brief Set the Destination Port.
-   * \param port the Destination Port.
+   * \brief Set the Source Port.
+   * \param [in] port The Source Port.
    */
   void SetSrcPort (uint16_t port);
 
   /**
-   * \brief Get the Destination Port.
-   * \return the Destination Port.
+   * \brief Get the Source Port.
+   * \return The Source Port.
    */
   uint16_t GetSrcPort () const;
 
   /**
    * \brief Set the Destination Port.
-   * \param port the Destination Port.
+   * \param [in] port The Destination Port.
    */
   void SetDstPort (uint16_t port);
 
   /**
    * \brief Get the Destination Port.
-   * \return the Destination Port.
+   * \return The Destination Port.
    */
   uint16_t GetDstPort () const;
 
   /**
    * \brief Set the C (Checksum).
-   * \param cField false (All checksum carried in-line), true (Checksum elided)
+   * \param [in] cField False (All checksum carried in-line), true (Checksum elided).
    */
   void SetC (bool cField);
 
   /**
    * \brief Get the C (Checksum).
-   * \return false (All checksum carried in-line), true (Checksum elided)
+   * \return False (All checksum carried in-line), true (Checksum elided).
    */
   bool GetC (void) const;
 
   /**
    * \brief Set the Checksum field values.
-   * \param checksum the Checksum field value
+   * \param [in] checksum The Checksum field value.
    */
   void SetChecksum (uint16_t checksum);
 
   /**
    * \brief Get the Checksum field value.
-   * \return the Checksum field value
+   * \return The Checksum field value.
    */
   uint16_t GetChecksum (void) const;
 
 private:
-  uint8_t m_baseFormat; //!< Dispatch + encoding fields
-  uint16_t m_checksum;  //!< Checksum
-  uint16_t m_srcPort;   //!< Source port
-  uint16_t m_dstPort;   //!< Destination port
+  uint8_t m_baseFormat; //!< Dispatch + encoding fields.
+  uint16_t m_checksum;  //!< Checksum.
+  uint16_t m_srcPort;   //!< Source port.
+  uint16_t m_dstPort;   //!< Destination port.
 };
 
 /**
  * \brief Stream insertion operator.
  *
- * \param os the reference to the output stream
- * \param header the UDP NHC Extension Header
- * \returns the reference to the output stream
+ * \param [in] os The reference to the output stream.
+ * \param [in] header The UDP NHC Extension Header.
+ * \returns The reference to the output stream.
  */
 std::ostream & operator<< (std::ostream & os, SixLowPanUdpNhcExtension const &header);
 
diff -Naur ns-3.23/src/sixlowpan/model/sixlowpan-net-device.h ns-3.24/src/sixlowpan/model/sixlowpan-net-device.h
--- ns-3.23/src/sixlowpan/model/sixlowpan-net-device.h	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/sixlowpan/model/sixlowpan-net-device.h	2015-09-15 11:18:44.000000000 -0700
@@ -39,11 +39,11 @@
 
 /**
  * \defgroup sixlowpan 6LoWPAN
- * \brief Performs 6LoWPAN compression of IPv6 packets as specified by RFC 4944 and RFC 6282
+ * \brief Performs 6LoWPAN compression of IPv6 packets as specified by \RFC{4944} and \RFC{6282}
  *
  * This module acts as a shim between IPv6 and a generic NetDevice.
  *
- * The module implements RFCs 4944 and 6282, with the following exceptions:
+ * The module implements \RFC{4944} and \RFC{6282}, with the following exceptions:
  * <ul>
  * <li> MESH and LOWPAN_BC0 dispatch types are not supported </li>
  * <li> HC2 encoding is not supported </li>
@@ -76,7 +76,7 @@
 
   /**
    * \brief Get the type ID.
-   * \return the object TypeId
+   * \return The object TypeId.
    */
   static TypeId GetTypeId (void);
 
@@ -95,10 +95,10 @@
 
   /**
    * \brief Returns the link-layer MTU for this interface.
-   * If the link-layer MTU is smaller than IPv6's minimum MTU (RFC 4944),
+   * If the link-layer MTU is smaller than IPv6's minimum MTU (\RFC{4944}),
    * 1280 will be returned.
    *
-   * \return the link-level MTU in bytes for this interface.
+   * \return The link-level MTU in bytes for this interface.
    */
   virtual uint16_t GetMtu (void) const;
   virtual bool IsLinkUp (void) const;
@@ -122,7 +122,7 @@
   /**
    * \brief Returns a smart pointer to the underlying NetDevice.
    *
-   * \return a smart pointer to the underlying NetDevice.
+   * \return A smart pointer to the underlying NetDevice.
    */
   Ptr<NetDevice> GetNetDevice () const;
 
@@ -131,7 +131,7 @@
    * All the packets incoming and outgoing from the NetDevice will be
    * processed by SixLowPanNetDevice.
    *
-   * \param device a smart pointer to the NetDevice to be proxied.
+   * \param [in] device A smart pointer to the NetDevice to be proxied.
    */
   void SetNetDevice (Ptr<NetDevice> device);
 
@@ -140,8 +140,8 @@
    * used by this model.  Return the number of streams (possibly zero) that
    * have been assigned.
    *
-   * \param stream first stream index to use
-   * \return the number of stream indices assigned by this model
+   * \param [in] stream First stream index to use.
+   * \return the number of stream indices assigned by this model.
    */
   int64_t AssignStreams (int64_t stream);
 
@@ -149,26 +149,31 @@
    * TracedCallback signature for packet send/receive events.
    *
    * \param [in] packet The packet.
-   * \param [in] sixNetDevice The SixLowPanNetDevice
+   * \param [in] sixNetDevice The SixLowPanNetDevice.
    * \param [in] ifindex The ifindex of the device.
+   * \deprecated The non-const \c Ptr<SixLowPanNetDevice> argument
+   * is deprecated and will be changed to \c Ptr<const SixLowPanNetDevice>
+   * in a future release.
    */
   typedef void (* RxTxTracedCallback)
-    (const Ptr<const Packet> packet,
-     const Ptr<const SixLowPanNetDevice> sixNetDevice,
-     const uint32_t ifindex);
+    (Ptr<const Packet> packet, Ptr<SixLowPanNetDevice> sixNetDevice,
+     uint32_t ifindex);
 
   /**
    * TracedCallback signature for
    *
    * \param [in] reason The reason for the drop.
    * \param [in] packet The packet.
-   * \param [in] sixNetDevice The SixLowPanNetDevice
+   * \param [in] sixNetDevice The SixLowPanNetDevice.
    * \param [in] ifindex The ifindex of the device.
+   * \deprecated The non-const \c Ptr<SixLowPanNetDevice> argument
+   * is deprecated and will be changed to \c Ptr<const SixLowPanNetDevice>
+   * in a future release.
    */
   typedef void (* DropTracedCallback)
-    (const DropReason reason, const Ptr<const Packet> packet,
-     const Ptr<const SixLowPanNetDevice> sixNetDevice,
-     const uint32_t ifindex);
+    (DropReason reason, Ptr<const Packet> packet,
+     Ptr<SixLowPanNetDevice> sixNetDevice,
+     uint32_t ifindex);
    
 protected:
   virtual void DoDispose (void);
@@ -177,43 +182,43 @@
   /**
    * \brief Copy constructor
    *
-   * Defined and unimplemented to avoid misuse
+   * Defined and unimplemented to avoid misuse.
    */
   SixLowPanNetDevice (SixLowPanNetDevice const &);
   /**
    * \brief Copy constructor
    *
-   * Defined and unimplemented to avoid misuse
+   * Defined and unimplemented to avoid misuse.
    * \returns
    */
   SixLowPanNetDevice& operator= (SixLowPanNetDevice const &);
   /**
-   * \brief receives all the packets from a NetDevice for further processing.
-   * \param device the NetDevice the packet ws received from
-   * \param packet the received packet
-   * \param protocol the protocol (if known)
-   * \param source the source address
-   * \param destination the destination address
-   * \param packetType the packet kind (e.g., HOST, BROADCAST, etc.)
-   * \return the IPv6 link-local address
+   * \brief Receives all the packets from a NetDevice for further processing.
+   * \param [in] device The NetDevice the packet ws received from.
+   * \param [in] packet The received packet.
+   * \param [in] protocol The protocol (if known).
+   * \param [in] source The source address.
+   * \param [in] destination The destination address.
+   * \param [in] packetType The packet kind (e.g., HOST, BROADCAST, etc.).
+   * \return The IPv6 link-local address.
    */
   void ReceiveFromDevice (Ptr<NetDevice> device, Ptr<const Packet> packet, uint16_t protocol,
                           Address const &source, Address const &destination, PacketType packetType);
 
 
   /**
-   * \param packet packet sent from above down to Network Device
-   * \param source source mac address (so called "MAC spoofing")
-   * \param dest mac address of the destination (already resolved)
-   * \param protocolNumber identifies the type of payload contained in
+   * \param [in] packet Packet sent from above down to Network Device.
+   * \param [in] source Source mac address (only used if doSendFrom is true, i.e., "MAC spoofing").
+   * \param [in] dest Mac address of the destination (already resolved).
+   * \param [in] protocolNumber Identifies the type of payload contained in
    *        this packet. Used to call the right L3Protocol when the packet
    *        is received.
-   * \param doSendFrom perform a SendFrom instead of a Send
+   * \param [in] doSendFrom Perform a SendFrom instead of a Send.
    *
    *  Called from higher layer to send packet into Network Device
    *  with the specified source and destination Addresses.
    *
-   * \return whether the Send operation succeeded
+   * \return Whether the Send operation succeeded.
    */
   bool DoSend (Ptr<Packet> packet, const Address& source, const Address& dest, uint16_t protocolNumber, bool doSendFrom);
 
@@ -234,6 +239,9 @@
    * \li Packet received (including 6LoWPAN header)
    * \li Ptr to SixLowPanNetDevice
    * \li interface index
+   * \deprecated The non-const \c Ptr<SixLowPanNetDevice> argument
+   * is deprecated and will be changed to \c Ptr<const SixLowPanNetDevice>
+   * in a future release.
    */
   TracedCallback<Ptr<const Packet>, Ptr<SixLowPanNetDevice>, uint32_t> m_txTrace;
 
@@ -244,6 +252,9 @@
    * \li Packet received (including 6LoWPAN header)
    * \li Ptr to SixLowPanNetDevice
    * \li interface index
+   * \deprecated The non-const \c Ptr<SixLowPanNetDevice> argument
+   * is deprecated and will be changed to \c Ptr<const SixLowPanNetDevice>
+   * in a future release.
    */
   TracedCallback<Ptr<const Packet>, Ptr<SixLowPanNetDevice>, uint32_t> m_rxTrace;
 
@@ -255,110 +266,113 @@
    * \li Packet dropped (including 6LoWPAN header)
    * \li Ptr to SixLowPanNetDevice
    * \li interface index
+   * \deprecated The non-const \c Ptr<SixLowPanNetDevice> argument
+   * is deprecated and will be changed to \c Ptr<const SixLowPanNetDevice>
+   * in a future release.
    */
   TracedCallback<DropReason, Ptr<const Packet>, Ptr<SixLowPanNetDevice>, uint32_t> m_dropTrace;
 
   /**
-   * \brief make a link-local address from a MAC address.
-   * \param addr the MAC address
-   * \return the IPv6 link-local address
+   * \brief Make a link-local address from a MAC address.
+   * \param [in] addr The MAC address.
+   * \return The IPv6 link-local address.
    */
   Ipv6Address MakeLinkLocalAddressFromMac (Address const &addr);
 
   /**
-   * \brief make a global address from a MAC address.
-   * \param addr the MAC address
-   * \param prefix the address prefix
-   * \return the IPv6 address
+   * \brief Make a global address from a MAC address.
+   * \param [in] addr the MAC address.
+   * \param [in] prefix The address prefix.
+   * \return The IPv6 address.
    */
   Ipv6Address MakeGlobalAddressFromMac (Address const &addr, Ipv6Address prefix);
 
   /**
    * \brief Compress the headers according to HC1 compression.
-   * \param packet the packet to be compressed
-   * \param src the MAC source address
-   * \param dst the MAC destination address
-   * \return the size of the removed headers
+   * \param [in] packet The packet to be compressed.
+   * \param [in] src The MAC source address.
+   * \param [in] dst The MAC destination address.
+   * \return The size of the removed headers.
    */
   uint32_t CompressLowPanHc1 (Ptr<Packet> packet, Address const &src, Address const &dst);
 
   /**
    * \brief Decompress the headers according to HC1 compression.
-   * \param packet the packet to be compressed
-   * \param src the MAC source address
-   * \param dst the MAC destination address
+   * \param [in] packet the packet to be compressed.
+   * \param [in] src the MAC source address.
+   * \param [in] dst the MAC destination address.
    */
   void DecompressLowPanHc1 (Ptr<Packet> packet, Address const &src, Address const &dst);
 
   /**
    * \brief Compress the headers according to IPHC compression.
-   * \param packet the packet to be compressed
-   * \param src the MAC source address
-   * \param dst the MAC destination address
-   * \return the size of the removed headers
+   * \param [in] packet The packet to be compressed.
+   * \param [in] src The MAC source address.
+   * \param [in] dst The MAC destination address.
+   * \return The size of the removed headers.
    */
   uint32_t CompressLowPanIphc (Ptr<Packet> packet, Address const &src, Address const &dst);
 
   /**
    * \brief Checks if the next header can be compressed using NHC.
-   * \param headerType the header kind to be compressed
-   * \return true if the header can be compressed
+   * \param [in] headerType The header kind to be compressed.
+   * \return True if the header can be compressed.
    */
   bool CanCompressLowPanNhc (uint8_t headerType);
 
   /**
    * \brief Decompress the headers according to IPHC compression.
-   * \param packet the packet to be compressed
-   * \param src the MAC source address
-   * \param dst the MAC destination address
+   * \param [in] packet The packet to be compressed.
+   * \param [in] src The MAC source address.
+   * \param [in] dst The MAC destination address.
    */
   void DecompressLowPanIphc (Ptr<Packet> packet, Address const &src, Address const &dst);
 
   /**
    * \brief Compress the headers according to NHC compression.
-   * \param packet the packet to be compressed
-   * \param headerType the header type
-   * \param src the MAC source address
-   * \param dst the MAC destination address
-   * \return the size of the removed headers
+   * \param [in] packet The packet to be compressed.
+   * \param [in] headerType The header type.
+   * \param [in] src The MAC source address.
+   * \param [in] dst The MAC destination address.
+   * \return The size of the removed headers.
    */
   uint32_t CompressLowPanNhc (Ptr<Packet> packet, uint8_t headerType, Address const &src, Address const &dst);
 
   /**
    * \brief Decompress the headers according to NHC compression.
-   * \param packet the packet to be compressed
-   * \param src the MAC source address
-   * \param dst the MAC destination address
-   * \param srcAddress the IPv6 source address
-   * \param dstAddress the IPv6 destination address
-   * \return the decompressed header type
+   * \param [in] packet The packet to be compressed.
+   * \param [in] src The MAC source address.
+   * \param [in] dst The MAC destination address.
+   * \param [in] srcAddress The IPv6 source address.
+   * \param [in] dstAddress The IPv6 destination address.
+   * \return The decompressed header type.
    */
   uint8_t DecompressLowPanNhc (Ptr<Packet> packet, Address const &src, Address const &dst, Ipv6Address srcAddress, Ipv6Address dstAddress);
 
   /**
    * \brief Compress the headers according to NHC compression.
-   * \param packet the packet to be compressed
-   * \param omitChecksum omit UDP checksum (if true)
-   * \return the size of the removed headers
+   * \param [in] packet The packet to be compressed.
+   * \param [in] omitChecksum Omit UDP checksum (if true).
+   * \return The size of the removed headers.
    */
   uint32_t CompressLowPanUdpNhc (Ptr<Packet> packet, bool omitChecksum);
 
   /**
    * \brief Decompress the headers according to NHC compression.
-   * \param packet the packet to be compressed
-   * \param saddr the IPv6 source address
-   * \param daddr the IPv6 destination address
+   * \param [in] packet The packet to be compressed.
+   * \param [in] saddr The IPv6 source address.
+   * \param [in] daddr The IPv6 destination address.
    */
   void DecompressLowPanUdpNhc (Ptr<Packet> packet, Ipv6Address saddr, Ipv6Address daddr);
 
   /**
-   * Fragment identifier type: src/dst address src/dst port
+   * Fragment identifier type: src/dst address src/dst port.
    */
   typedef std::pair< std::pair<Address, Address>, std::pair<uint16_t, uint16_t> > FragmentKey;
 
   /**
    * \class Fragments
-   * \brief A Set of Fragment
+   * \brief A Set of Fragment.
    */
   class Fragments : public SimpleRefCount<Fragments>
   {
@@ -375,33 +389,33 @@
 
     /**
      * \brief Add a fragment to the pool.
-     * \param fragment the fragment
-     * \param fragmentOffset the offset of the fragment
+     * \param [in] fragment the fragment.
+     * \param [in] fragmentOffset the offset of the fragment.
      */
     void AddFragment (Ptr<Packet> fragment, uint16_t fragmentOffset);
 
     /**
      * \brief Add the first packet fragment. The first fragment is needed to
      * allow the post-defragmentation decompression.
-     * \param fragment the fragment
+     * \param [in] fragment The fragment.
      */
     void AddFirstFragment (Ptr<Packet> fragment);
 
     /**
      * \brief If all fragments have been added.
-     * \returns true if the packet is entire
+     * \returns True if the packet is entire.
      */
     bool IsEntire () const;
 
     /**
      * \brief Get the entire packet.
-     * \return the entire packet
+     * \return The entire packet.
      */
     Ptr<Packet> GetPacket () const;
 
     /**
      * \brief Set the packet-to-be-defragmented size.
-     * \param packetSize the packet size (bytes)
+     * \param [in] packetSize The packet size (bytes).
      */
     void SetPacketSize (uint32_t packetSize);
 
@@ -422,64 +436,64 @@
     std::list<std::pair<Ptr<Packet>, uint16_t> > m_fragments;
 
     /**
-     * \brief The very first fragment
+     * \brief The very first fragment.
      */
     Ptr<Packet> m_firstFragment;
 
   };
 
   /**
-   * \brief Return the instance type identifier.
-   * \param packet the packet to be fragmented (with headers already compressed with 6LoWPAN)
-   * \param origPacketSize the size of the IP packet before the 6LoWPAN header compression, including the IP/L4 headers
-   * \param origHdrSize the size of the IP header before the 6LoWPAN header compression
-   * \param listFragments a reference to the list of the resulting packets, all with the proper headers in place
+   * \brief Performs a packet fragmentation.
+   * \param [in] packet the packet to be fragmented (with headers already compressed with 6LoWPAN).
+   * \param [in] origPacketSize the size of the IP packet before the 6LoWPAN header compression, including the IP/L4 headers.
+   * \param [in] origHdrSize the size of the IP header before the 6LoWPAN header compression.
+   * \param [out] listFragments A reference to the list of the resulting packets, all with the proper headers in place.
    */
   void DoFragmentation (Ptr<Packet> packet, uint32_t origPacketSize, uint32_t origHdrSize,
                         std::list<Ptr<Packet> >& listFragments);
 
   /**
-   * \brief Process a packet fragment
-   * \param packet the packet
-   * \param src the source MAC address
-   * \param dst the destination MAC address
-   * \param isFirst true if it is the first fragment, false otherwise
-   * \return true is the fragment completed the packet
+   * \brief Process a packet fragment.
+   * \param [in] packet The packet.
+   * \param [in] src The source MAC address.
+   * \param [in] dst The destination MAC address.
+   * \param [in] isFirst True if it is the first fragment, false otherwise.
+   * \return True is the fragment completed the packet.
    */
   bool ProcessFragment (Ptr<Packet>& packet, Address const &src, Address const &dst, bool isFirst);
 
   /**
-   * \brief Process the timeout for packet fragments
-   * \param key representing the packet fragments
-   * \param iif Input Interface
+   * \brief Process the timeout for packet fragments.
+   * \param [in] key A key representing the packet fragments.
+   * \param [in] iif Input Interface.
    */
   void HandleFragmentsTimeout ( FragmentKey key, uint32_t iif);
 
   /**
-   * \brief Drops the oldest fragment set
+   * \brief Drops the oldest fragment set.
    */
   void DropOldestFragmentSet ();
 
   /**
-   * Container for fragment key -> fragments
+   * Container for fragment key -> fragments.
    */
   typedef std::map< FragmentKey, Ptr<Fragments> > MapFragments_t;
   /**
-   * Container Iterator for fragment key -> fragments
+   * Container Iterator for fragment key -> fragments.
    */
   typedef std::map< FragmentKey, Ptr<Fragments> >::iterator MapFragmentsI_t;
   /**
-   * Container for fragment key -> exiration event
+   * Container for fragment key -> expiration event.
    */
   typedef std::map< FragmentKey, EventId > MapFragmentsTimers_t;
   /**
-   * Container Iterator for fragment key -> exiration event
+   * Container Iterator for fragment key -> expiration event.
    */
   typedef std::map< FragmentKey, EventId >::iterator MapFragmentsTimersI_t;
 
-  MapFragments_t       m_fragments; /**< Fragments hold to be rebuilt */
-  MapFragmentsTimers_t m_fragmentsTimers; /**< Timers related to fragment rebuilding */
-  Time                 m_fragmentExpirationTimeout; /**< Time limit for fragment rebuilding */
+  MapFragments_t       m_fragments; //!< Fragments hold to be rebuilt.
+  MapFragmentsTimers_t m_fragmentsTimers; //!< Timers related to fragment rebuilding.
+  Time                 m_fragmentExpirationTimeout; //!< Time limit for fragment rebuilding.
 
   /**
    * \brief How many packets can be rebuilt at the same time.
@@ -487,22 +501,22 @@
    */
   uint16_t             m_fragmentReassemblyListSize;
 
-  bool m_useIphc; /**< Use IPHC or HC1 */
+  bool m_useIphc; //!< Use IPHC or HC1.
 
-  Ptr<Node> m_node; /**< Smart pointer to the Node */
-  Ptr<NetDevice> m_netDevice; /**< Smart pointer to the underlying NetDevice */
-  uint32_t m_ifIndex; /**< Interface index */
+  Ptr<Node> m_node; //!< Smart pointer to the Node.
+  Ptr<NetDevice> m_netDevice; //!< Smart pointer to the underlying NetDevice.
+  uint32_t m_ifIndex; //!< Interface index.
 
   /**
    * \brief Force the EtherType number.
-   * Also implying that the underlying NetDevice is using 48-bit Addresses, e.g., Ethernet, WiFi, etc.
+   * Also implying that the underlying NetDevice is using 48-bit Addresses, e.g., Ethernet, Wi-Fi, etc.
    */
   bool m_forceEtherType;
 
-  uint16_t m_etherType; /**< EtherType number (used only if m_forceEtherType is true) */
-  bool m_omitUdpChecksum; /**< Omit UDP checksum in NC1 encoding */
+  uint16_t m_etherType; //!< EtherType number (used only if m_forceEtherType is true).
+  bool m_omitUdpChecksum; //!< Omit UDP checksum in NC1 encoding.
 
-  uint32_t m_compressionThreshold; /**< Minimum L2 payload size */
+  uint32_t m_compressionThreshold; //!< Minimum L2 payload size.
 
   Ptr<UniformRandomVariable> m_rng; //!< Rng for the fragments tag.
 };
diff -Naur ns-3.23/src/sixlowpan/test/error-channel-sixlow.cc ns-3.24/src/sixlowpan/test/error-channel-sixlow.cc
--- ns-3.23/src/sixlowpan/test/error-channel-sixlow.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/sixlowpan/test/error-channel-sixlow.cc	2015-09-15 11:18:44.000000000 -0700
@@ -34,7 +34,8 @@
 ErrorChannelSixlow::GetTypeId (void)
 {
   static TypeId tid = TypeId ("ns3::ErrorChannelSixlow")
-    .SetParent<Channel> ()
+    .SetParent<SimpleChannel> ()
+    .SetGroupName ("SixLowPan")
     .AddConstructor<ErrorChannelSixlow> ()
   ;
   return tid;
@@ -150,6 +151,7 @@
 {
   static TypeId tid = TypeId ("ns3::BinaryErrorSixlowModel")
     .SetParent<ErrorModel> ()
+    .SetGroupName ("SixLowPan")
     .AddConstructor<BinaryErrorSixlowModel> ()
   ;
   return tid;
diff -Naur ns-3.23/src/spectrum/bindings/modulegen__gcc_ILP32.py ns-3.24/src/spectrum/bindings/modulegen__gcc_ILP32.py
--- ns-3.23/src/spectrum/bindings/modulegen__gcc_ILP32.py	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/spectrum/bindings/modulegen__gcc_ILP32.py	2015-09-15 11:18:44.000000000 -0700
@@ -86,6 +86,8 @@
     module.add_class('NetDeviceContainer', import_from_module='ns.network')
     ## node-container.h (module 'network'): ns3::NodeContainer [class]
     module.add_class('NodeContainer', import_from_module='ns.network')
+    ## non-copyable.h (module 'core'): ns3::NonCopyable [class]
+    module.add_class('NonCopyable', destructor_visibility='protected', import_from_module='ns.core')
     ## object-base.h (module 'core'): ns3::ObjectBase [class]
     module.add_class('ObjectBase', allow_subclassing=True, import_from_module='ns.core')
     ## object.h (module 'core'): ns3::ObjectDeleter [struct]
@@ -465,6 +467,12 @@
     register_types_ns3_Hash(nested_module)
     
     
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
+    
     ## Register a nested module for the namespace addressUtils
     
     nested_module = module.add_cpp_namespace('addressUtils')
@@ -505,6 +513,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_types_ns3_addressUtils(module):
     root_module = module.get_root()
     
@@ -537,6 +552,7 @@
     register_Ns3MicrowaveOvenSpectrumValueHelper_methods(root_module, root_module['ns3::MicrowaveOvenSpectrumValueHelper'])
     register_Ns3NetDeviceContainer_methods(root_module, root_module['ns3::NetDeviceContainer'])
     register_Ns3NodeContainer_methods(root_module, root_module['ns3::NodeContainer'])
+    register_Ns3NonCopyable_methods(root_module, root_module['ns3::NonCopyable'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
     register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
     register_Ns3ObjectFactory_methods(root_module, root_module['ns3::ObjectFactory'])
@@ -888,17 +904,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -920,11 +936,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -934,16 +945,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -1181,14 +1182,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -1249,11 +1254,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3DataRate_methods(root_module, cls):
@@ -2068,6 +2068,12 @@
                    is_const=True)
     return
 
+def register_Ns3NonCopyable_methods(root_module, cls):
+    ## non-copyable.h (module 'core'): ns3::NonCopyable::NonCopyable() [constructor]
+    cls.add_constructor([], 
+                        visibility='protected')
+    return
+
 def register_Ns3ObjectBase_methods(root_module, cls):
     ## object-base.h (module 'core'): ns3::ObjectBase::ObjectBase() [constructor]
     cls.add_constructor([])
@@ -2361,7 +2367,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -3723,6 +3729,11 @@
     cls.add_method('EndRx', 
                    'bool', 
                    [])
+    ## spectrum-interference.h (module 'spectrum'): static ns3::TypeId ns3::SpectrumInterference::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## spectrum-interference.h (module 'spectrum'): void ns3::SpectrumInterference::SetErrorModel(ns3::Ptr<ns3::SpectrumErrorModel> e) [member function]
     cls.add_method('SetErrorModel', 
                    'void', 
@@ -3785,11 +3796,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'd')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## spectrum-phy.h (module 'spectrum'): ns3::Ptr<ns3::NetDevice> ns3::SpectrumPhy::GetDevice() [member function]
+    ## spectrum-phy.h (module 'spectrum'): ns3::Ptr<ns3::NetDevice> ns3::SpectrumPhy::GetDevice() const [member function]
     cls.add_method('GetDevice', 
                    'ns3::Ptr< ns3::NetDevice >', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## spectrum-phy.h (module 'spectrum'): void ns3::SpectrumPhy::SetMobility(ns3::Ptr<ns3::MobilityModel> m) [member function]
     cls.add_method('SetMobility', 
                    'void', 
@@ -4292,11 +4303,11 @@
                    'ns3::Ptr< ns3::MobilityModel >', 
                    [], 
                    is_virtual=True)
-    ## tv-spectrum-transmitter.h (module 'spectrum'): ns3::Ptr<ns3::NetDevice> ns3::TvSpectrumTransmitter::GetDevice() [member function]
+    ## tv-spectrum-transmitter.h (module 'spectrum'): ns3::Ptr<ns3::NetDevice> ns3::TvSpectrumTransmitter::GetDevice() const [member function]
     cls.add_method('GetDevice', 
                    'ns3::Ptr< ns3::NetDevice >', 
                    [], 
-                   is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## tv-spectrum-transmitter.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumModel const> ns3::TvSpectrumTransmitter::GetRxSpectrumModel() const [member function]
     cls.add_method('GetRxSpectrumModel', 
                    'ns3::Ptr< ns3::SpectrumModel const >', 
@@ -4461,11 +4472,11 @@
                    'ns3::Ptr< ns3::MobilityModel >', 
                    [], 
                    is_virtual=True)
-    ## waveform-generator.h (module 'spectrum'): ns3::Ptr<ns3::NetDevice> ns3::WaveformGenerator::GetDevice() [member function]
+    ## waveform-generator.h (module 'spectrum'): ns3::Ptr<ns3::NetDevice> ns3::WaveformGenerator::GetDevice() const [member function]
     cls.add_method('GetDevice', 
                    'ns3::Ptr< ns3::NetDevice >', 
                    [], 
-                   is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## waveform-generator.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumModel const> ns3::WaveformGenerator::GetRxSpectrumModel() const [member function]
     cls.add_method('GetRxSpectrumModel', 
                    'ns3::Ptr< ns3::SpectrumModel const >', 
@@ -4818,11 +4829,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -5056,10 +5077,10 @@
                    'double', 
                    [], 
                    is_virtual=True)
-    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
     cls.add_method('Interpolate', 
                    'double', 
-                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
                    visibility='private', is_virtual=True)
     ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
     cls.add_method('Validate', 
@@ -5349,11 +5370,11 @@
                    'ns3::Ptr< ns3::MobilityModel >', 
                    [], 
                    is_virtual=True)
-    ## half-duplex-ideal-phy.h (module 'spectrum'): ns3::Ptr<ns3::NetDevice> ns3::HalfDuplexIdealPhy::GetDevice() [member function]
+    ## half-duplex-ideal-phy.h (module 'spectrum'): ns3::Ptr<ns3::NetDevice> ns3::HalfDuplexIdealPhy::GetDevice() const [member function]
     cls.add_method('GetDevice', 
                    'ns3::Ptr< ns3::NetDevice >', 
                    [], 
-                   is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## half-duplex-ideal-phy.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumModel const> ns3::HalfDuplexIdealPhy::GetRxSpectrumModel() const [member function]
     cls.add_method('GetRxSpectrumModel', 
                    'ns3::Ptr< ns3::SpectrumModel const >', 
@@ -6627,6 +6648,11 @@
                    'void', 
                    [param('ns3::SpectrumValue const &', 'sinr'), param('ns3::Time', 'duration')], 
                    is_virtual=True)
+    ## spectrum-error-model.h (module 'spectrum'): static ns3::TypeId ns3::ShannonSpectrumErrorModel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## spectrum-error-model.h (module 'spectrum'): bool ns3::ShannonSpectrumErrorModel::IsRxCorrect() [member function]
     cls.add_method('IsRxCorrect', 
                    'bool', 
@@ -6672,11 +6698,11 @@
                    'ns3::Ptr< ns3::MobilityModel >', 
                    [], 
                    is_virtual=True)
-    ## spectrum-analyzer.h (module 'spectrum'): ns3::Ptr<ns3::NetDevice> ns3::SpectrumAnalyzer::GetDevice() [member function]
+    ## spectrum-analyzer.h (module 'spectrum'): ns3::Ptr<ns3::NetDevice> ns3::SpectrumAnalyzer::GetDevice() const [member function]
     cls.add_method('GetDevice', 
                    'ns3::Ptr< ns3::NetDevice >', 
                    [], 
-                   is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## spectrum-analyzer.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumModel const> ns3::SpectrumAnalyzer::GetRxSpectrumModel() const [member function]
     cls.add_method('GetRxSpectrumModel', 
                    'ns3::Ptr< ns3::SpectrumModel const >', 
@@ -7391,6 +7417,7 @@
                         [param('ns3::SpectrumValue const &', 'x')])
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     register_functions_ns3_addressUtils(module.get_submodule('addressUtils'), root_module)
     return
 
@@ -7404,6 +7431,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def register_functions_ns3_addressUtils(module, root_module):
     return
 
diff -Naur ns-3.23/src/spectrum/bindings/modulegen__gcc_LP64.py ns-3.24/src/spectrum/bindings/modulegen__gcc_LP64.py
--- ns-3.23/src/spectrum/bindings/modulegen__gcc_LP64.py	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/spectrum/bindings/modulegen__gcc_LP64.py	2015-09-15 11:18:44.000000000 -0700
@@ -86,6 +86,8 @@
     module.add_class('NetDeviceContainer', import_from_module='ns.network')
     ## node-container.h (module 'network'): ns3::NodeContainer [class]
     module.add_class('NodeContainer', import_from_module='ns.network')
+    ## non-copyable.h (module 'core'): ns3::NonCopyable [class]
+    module.add_class('NonCopyable', destructor_visibility='protected', import_from_module='ns.core')
     ## object-base.h (module 'core'): ns3::ObjectBase [class]
     module.add_class('ObjectBase', allow_subclassing=True, import_from_module='ns.core')
     ## object.h (module 'core'): ns3::ObjectDeleter [struct]
@@ -465,6 +467,12 @@
     register_types_ns3_Hash(nested_module)
     
     
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
+    
     ## Register a nested module for the namespace addressUtils
     
     nested_module = module.add_cpp_namespace('addressUtils')
@@ -505,6 +513,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_types_ns3_addressUtils(module):
     root_module = module.get_root()
     
@@ -537,6 +552,7 @@
     register_Ns3MicrowaveOvenSpectrumValueHelper_methods(root_module, root_module['ns3::MicrowaveOvenSpectrumValueHelper'])
     register_Ns3NetDeviceContainer_methods(root_module, root_module['ns3::NetDeviceContainer'])
     register_Ns3NodeContainer_methods(root_module, root_module['ns3::NodeContainer'])
+    register_Ns3NonCopyable_methods(root_module, root_module['ns3::NonCopyable'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
     register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
     register_Ns3ObjectFactory_methods(root_module, root_module['ns3::ObjectFactory'])
@@ -888,17 +904,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -920,11 +936,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -934,16 +945,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -1181,14 +1182,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -1249,11 +1254,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3DataRate_methods(root_module, cls):
@@ -2068,6 +2068,12 @@
                    is_const=True)
     return
 
+def register_Ns3NonCopyable_methods(root_module, cls):
+    ## non-copyable.h (module 'core'): ns3::NonCopyable::NonCopyable() [constructor]
+    cls.add_constructor([], 
+                        visibility='protected')
+    return
+
 def register_Ns3ObjectBase_methods(root_module, cls):
     ## object-base.h (module 'core'): ns3::ObjectBase::ObjectBase() [constructor]
     cls.add_constructor([])
@@ -2361,7 +2367,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -3723,6 +3729,11 @@
     cls.add_method('EndRx', 
                    'bool', 
                    [])
+    ## spectrum-interference.h (module 'spectrum'): static ns3::TypeId ns3::SpectrumInterference::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## spectrum-interference.h (module 'spectrum'): void ns3::SpectrumInterference::SetErrorModel(ns3::Ptr<ns3::SpectrumErrorModel> e) [member function]
     cls.add_method('SetErrorModel', 
                    'void', 
@@ -3785,11 +3796,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'd')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## spectrum-phy.h (module 'spectrum'): ns3::Ptr<ns3::NetDevice> ns3::SpectrumPhy::GetDevice() [member function]
+    ## spectrum-phy.h (module 'spectrum'): ns3::Ptr<ns3::NetDevice> ns3::SpectrumPhy::GetDevice() const [member function]
     cls.add_method('GetDevice', 
                    'ns3::Ptr< ns3::NetDevice >', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## spectrum-phy.h (module 'spectrum'): void ns3::SpectrumPhy::SetMobility(ns3::Ptr<ns3::MobilityModel> m) [member function]
     cls.add_method('SetMobility', 
                    'void', 
@@ -4292,11 +4303,11 @@
                    'ns3::Ptr< ns3::MobilityModel >', 
                    [], 
                    is_virtual=True)
-    ## tv-spectrum-transmitter.h (module 'spectrum'): ns3::Ptr<ns3::NetDevice> ns3::TvSpectrumTransmitter::GetDevice() [member function]
+    ## tv-spectrum-transmitter.h (module 'spectrum'): ns3::Ptr<ns3::NetDevice> ns3::TvSpectrumTransmitter::GetDevice() const [member function]
     cls.add_method('GetDevice', 
                    'ns3::Ptr< ns3::NetDevice >', 
                    [], 
-                   is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## tv-spectrum-transmitter.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumModel const> ns3::TvSpectrumTransmitter::GetRxSpectrumModel() const [member function]
     cls.add_method('GetRxSpectrumModel', 
                    'ns3::Ptr< ns3::SpectrumModel const >', 
@@ -4461,11 +4472,11 @@
                    'ns3::Ptr< ns3::MobilityModel >', 
                    [], 
                    is_virtual=True)
-    ## waveform-generator.h (module 'spectrum'): ns3::Ptr<ns3::NetDevice> ns3::WaveformGenerator::GetDevice() [member function]
+    ## waveform-generator.h (module 'spectrum'): ns3::Ptr<ns3::NetDevice> ns3::WaveformGenerator::GetDevice() const [member function]
     cls.add_method('GetDevice', 
                    'ns3::Ptr< ns3::NetDevice >', 
                    [], 
-                   is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## waveform-generator.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumModel const> ns3::WaveformGenerator::GetRxSpectrumModel() const [member function]
     cls.add_method('GetRxSpectrumModel', 
                    'ns3::Ptr< ns3::SpectrumModel const >', 
@@ -4818,11 +4829,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -5056,10 +5077,10 @@
                    'double', 
                    [], 
                    is_virtual=True)
-    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
     cls.add_method('Interpolate', 
                    'double', 
-                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
                    visibility='private', is_virtual=True)
     ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
     cls.add_method('Validate', 
@@ -5349,11 +5370,11 @@
                    'ns3::Ptr< ns3::MobilityModel >', 
                    [], 
                    is_virtual=True)
-    ## half-duplex-ideal-phy.h (module 'spectrum'): ns3::Ptr<ns3::NetDevice> ns3::HalfDuplexIdealPhy::GetDevice() [member function]
+    ## half-duplex-ideal-phy.h (module 'spectrum'): ns3::Ptr<ns3::NetDevice> ns3::HalfDuplexIdealPhy::GetDevice() const [member function]
     cls.add_method('GetDevice', 
                    'ns3::Ptr< ns3::NetDevice >', 
                    [], 
-                   is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## half-duplex-ideal-phy.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumModel const> ns3::HalfDuplexIdealPhy::GetRxSpectrumModel() const [member function]
     cls.add_method('GetRxSpectrumModel', 
                    'ns3::Ptr< ns3::SpectrumModel const >', 
@@ -6627,6 +6648,11 @@
                    'void', 
                    [param('ns3::SpectrumValue const &', 'sinr'), param('ns3::Time', 'duration')], 
                    is_virtual=True)
+    ## spectrum-error-model.h (module 'spectrum'): static ns3::TypeId ns3::ShannonSpectrumErrorModel::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## spectrum-error-model.h (module 'spectrum'): bool ns3::ShannonSpectrumErrorModel::IsRxCorrect() [member function]
     cls.add_method('IsRxCorrect', 
                    'bool', 
@@ -6672,11 +6698,11 @@
                    'ns3::Ptr< ns3::MobilityModel >', 
                    [], 
                    is_virtual=True)
-    ## spectrum-analyzer.h (module 'spectrum'): ns3::Ptr<ns3::NetDevice> ns3::SpectrumAnalyzer::GetDevice() [member function]
+    ## spectrum-analyzer.h (module 'spectrum'): ns3::Ptr<ns3::NetDevice> ns3::SpectrumAnalyzer::GetDevice() const [member function]
     cls.add_method('GetDevice', 
                    'ns3::Ptr< ns3::NetDevice >', 
                    [], 
-                   is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## spectrum-analyzer.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumModel const> ns3::SpectrumAnalyzer::GetRxSpectrumModel() const [member function]
     cls.add_method('GetRxSpectrumModel', 
                    'ns3::Ptr< ns3::SpectrumModel const >', 
@@ -7391,6 +7417,7 @@
                         [param('ns3::SpectrumValue const &', 'x')])
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     register_functions_ns3_addressUtils(module.get_submodule('addressUtils'), root_module)
     return
 
@@ -7404,6 +7431,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def register_functions_ns3_addressUtils(module, root_module):
     return
 
diff -Naur ns-3.23/src/spectrum/model/half-duplex-ideal-phy.cc ns-3.24/src/spectrum/model/half-duplex-ideal-phy.cc
--- ns-3.23/src/spectrum/model/half-duplex-ideal-phy.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/spectrum/model/half-duplex-ideal-phy.cc	2015-09-15 11:18:44.000000000 -0700
@@ -135,7 +135,7 @@
 
 
 Ptr<NetDevice>
-HalfDuplexIdealPhy::GetDevice ()
+HalfDuplexIdealPhy::GetDevice () const
 {
   NS_LOG_FUNCTION (this);
   return m_netDevice;
diff -Naur ns-3.23/src/spectrum/model/half-duplex-ideal-phy.h ns-3.24/src/spectrum/model/half-duplex-ideal-phy.h
--- ns-3.23/src/spectrum/model/half-duplex-ideal-phy.h	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/spectrum/model/half-duplex-ideal-phy.h	2015-09-15 11:18:44.000000000 -0700
@@ -98,7 +98,7 @@
   void SetMobility (Ptr<MobilityModel> m);
   void SetDevice (Ptr<NetDevice> d);
   Ptr<MobilityModel> GetMobility ();
-  Ptr<NetDevice> GetDevice ();
+  Ptr<NetDevice> GetDevice () const;
   Ptr<const SpectrumModel> GetRxSpectrumModel () const;
   Ptr<AntennaModel> GetRxAntenna ();
   void StartRx (Ptr<SpectrumSignalParameters> params);
diff -Naur ns-3.23/src/spectrum/model/multi-model-spectrum-channel.h ns-3.24/src/spectrum/model/multi-model-spectrum-channel.h
--- ns-3.23/src/spectrum/model/multi-model-spectrum-channel.h	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/spectrum/model/multi-model-spectrum-channel.h	2015-09-15 11:18:44.000000000 -0700
@@ -173,6 +173,11 @@
 
   double m_maxLossDb;
 
+  /**
+   * \deprecated The non-const \c Ptr<SpectrumPhy> argument
+   * is deprecated and will be changed to \c Ptr<const SpectrumPhy>
+   * in a future release.
+   */
   TracedCallback<Ptr<SpectrumPhy>, Ptr<SpectrumPhy>, double > m_pathLossTrace;
 };
 
diff -Naur ns-3.23/src/spectrum/model/single-model-spectrum-channel.h ns-3.24/src/spectrum/model/single-model-spectrum-channel.h
--- ns-3.23/src/spectrum/model/single-model-spectrum-channel.h	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/spectrum/model/single-model-spectrum-channel.h	2015-09-15 11:18:44.000000000 -0700
@@ -109,6 +109,11 @@
 
   double m_maxLossDb;
 
+  /**
+   * \deprecated The non-const \c Ptr<SpectrumPhy> argument
+   * is deprecated and will be changed to \c Ptr<const SpectrumPhy>
+   * in a future release.
+   */
   TracedCallback<Ptr<SpectrumPhy>, Ptr<SpectrumPhy>, double > m_pathLossTrace;
 };
 
diff -Naur ns-3.23/src/spectrum/model/spectrum-analyzer.cc ns-3.24/src/spectrum/model/spectrum-analyzer.cc
--- ns-3.23/src/spectrum/model/spectrum-analyzer.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/spectrum/model/spectrum-analyzer.cc	2015-09-15 11:18:44.000000000 -0700
@@ -99,7 +99,7 @@
 
 
 Ptr<NetDevice>
-SpectrumAnalyzer::GetDevice ()
+SpectrumAnalyzer::GetDevice () const
 {
   return m_netDevice;
 }
diff -Naur ns-3.23/src/spectrum/model/spectrum-analyzer.h ns-3.24/src/spectrum/model/spectrum-analyzer.h
--- ns-3.23/src/spectrum/model/spectrum-analyzer.h	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/spectrum/model/spectrum-analyzer.h	2015-09-15 11:18:44.000000000 -0700
@@ -59,7 +59,7 @@
   void SetMobility (Ptr<MobilityModel> m);
   void SetDevice (Ptr<NetDevice> d);
   Ptr<MobilityModel> GetMobility ();
-  Ptr<NetDevice> GetDevice ();
+  Ptr<NetDevice> GetDevice () const;
   Ptr<const SpectrumModel> GetRxSpectrumModel () const;
   Ptr<AntennaModel> GetRxAntenna ();
   void StartRx (Ptr<SpectrumSignalParameters> params);
diff -Naur ns-3.23/src/spectrum/model/spectrum-channel.h ns-3.24/src/spectrum/model/spectrum-channel.h
--- ns-3.23/src/spectrum/model/spectrum-channel.h	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/spectrum/model/spectrum-channel.h	2015-09-15 11:18:44.000000000 -0700
@@ -101,10 +101,13 @@
    * \param [in] txPhy The TX SpectrumPhy instance.
    * \param [in] rxPhy The RX SpectrumPhy instance.
    * \param [in] lossDb The loss value, in dB.
+   * \deprecated The non-const `Ptr<SpectrumValue>` is
+   * deprecated and will be changed to Ptr<const SpectrumValue>`
+   * in a future release.
    */
   typedef void (* LossTracedCallback)
-    (const Ptr<const SpectrumPhy> txPhy, const Ptr<const SpectrumPhy> rxPhy,
-     const double lossDb);
+    (Ptr<SpectrumPhy> txPhy, Ptr<SpectrumPhy> rxPhy,
+     double lossDb);
   
 };
 
diff -Naur ns-3.23/src/spectrum/model/spectrum-error-model.cc ns-3.24/src/spectrum/model/spectrum-error-model.cc
--- ns-3.23/src/spectrum/model/spectrum-error-model.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/spectrum/model/spectrum-error-model.cc	2015-09-15 11:18:44.000000000 -0700
@@ -35,6 +35,7 @@
   static TypeId tid = TypeId ("ns3::SpectrumErrorModel")
     .SetParent<Object> ()
     .SetGroupName ("Spectrum")
+    // No AddConstructor because this is an abstract class.
     ;
   return tid;
 }
@@ -43,6 +44,17 @@
 {
 }
 
+/* static */
+TypeId
+ShannonSpectrumErrorModel::GetTypeId ()
+{
+  static TypeId tid = TypeId ("ns3::ShannonSpectrumErrorModel")
+    .SetParent<SpectrumErrorModel> ()
+    .SetGroupName ("Spectrum")
+    .AddConstructor<ShannonSpectrumErrorModel> ()
+    ;
+  return tid;
+}
 void
 ShannonSpectrumErrorModel::DoDispose ()
 {
diff -Naur ns-3.23/src/spectrum/model/spectrum-error-model.h ns-3.24/src/spectrum/model/spectrum-error-model.h
--- ns-3.23/src/spectrum/model/spectrum-error-model.h	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/spectrum/model/spectrum-error-model.h	2015-09-15 11:18:44.000000000 -0700
@@ -40,6 +40,10 @@
 {
 public:
 
+  /**
+   * Register this type.
+   * \return The TypeId.
+   */
   static TypeId GetTypeId ();
   virtual ~SpectrumErrorModel ();
   virtual void StartRx (Ptr<const Packet> p) = 0;
@@ -62,6 +66,11 @@
   virtual void DoDispose ();
 
 public:
+  /**
+   * Register this type.
+   * \return The TypeId.
+   */
+  static TypeId GetTypeId (void);
   // inherited from SpectrumErrorModel
   void StartRx (Ptr<const Packet> p);
   void EvaluateChunk (const SpectrumValue& sinr, Time duration);
diff -Naur ns-3.23/src/spectrum/model/spectrum-interference.cc ns-3.24/src/spectrum/model/spectrum-interference.cc
--- ns-3.23/src/spectrum/model/spectrum-interference.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/spectrum/model/spectrum-interference.cc	2015-09-15 11:18:44.000000000 -0700
@@ -45,6 +45,17 @@
   NS_LOG_FUNCTION (this);
 }
 
+TypeId
+SpectrumInterference::GetTypeId ()
+{
+  static TypeId tid = TypeId ("ns3::SpectrumInterference")
+    .SetParent<Object> ()
+    .SetGroupName ("Spectrum")
+    .AddConstructor<SpectrumInterference> ()
+    ;
+  return tid;
+}
+
 void
 SpectrumInterference::DoDispose ()
 {
diff -Naur ns-3.23/src/spectrum/model/spectrum-interference.h ns-3.24/src/spectrum/model/spectrum-interference.h
--- ns-3.23/src/spectrum/model/spectrum-interference.h	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/spectrum/model/spectrum-interference.h	2015-09-15 11:18:44.000000000 -0700
@@ -50,6 +50,12 @@
   virtual ~SpectrumInterference ();
 
   /**
+   * Register this type.
+   * \return The TypeId.
+   */
+  static TypeId GetTypeId (void);
+  
+  /**
    * set the SpectrumErrorModel to be used.
    *
    * @param e
diff -Naur ns-3.23/src/spectrum/model/spectrum-phy.h ns-3.24/src/spectrum/model/spectrum-phy.h
--- ns-3.23/src/spectrum/model/spectrum-phy.h	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/spectrum/model/spectrum-phy.h	2015-09-15 11:18:44.000000000 -0700
@@ -63,7 +63,7 @@
    *
    * @return a Ptr to the associated NetDevice instance
    */
-  virtual Ptr<NetDevice> GetDevice () = 0;
+  virtual Ptr<NetDevice> GetDevice () const = 0;
 
   /**
    * Set the mobility model associated with this device.
diff -Naur ns-3.23/src/spectrum/model/spectrum-value.cc ns-3.24/src/spectrum/model/spectrum-value.cc
--- ns-3.23/src/spectrum/model/spectrum-value.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/spectrum/model/spectrum-value.cc	2015-09-15 11:18:44.000000000 -0700
@@ -39,13 +39,13 @@
 }
 
 double&
-SpectrumValue:: operator[] (size_t index)
+SpectrumValue::operator[] (size_t index)
 {
   return m_values.at (index);
 }
 
 const double&
-SpectrumValue:: operator[] (size_t index) const
+SpectrumValue::operator[] (size_t index) const
 {
   return m_values.at (index);
 }
@@ -598,28 +598,28 @@
 }
 
 SpectrumValue&
-SpectrumValue:: operator+= (const SpectrumValue& rhs)
+SpectrumValue::operator+= (const SpectrumValue& rhs)
 {
   Add (rhs);
   return *this;
 }
 
 SpectrumValue&
-SpectrumValue:: operator-= (const SpectrumValue& rhs)
+SpectrumValue::operator-= (const SpectrumValue& rhs)
 {
   Subtract (rhs);
   return *this;
 }
 
 SpectrumValue&
-SpectrumValue:: operator*= (const SpectrumValue& rhs)
+SpectrumValue::operator*= (const SpectrumValue& rhs)
 {
   Multiply (rhs);
   return *this;
 }
 
 SpectrumValue&
-SpectrumValue:: operator/= (const SpectrumValue& rhs)
+SpectrumValue::operator/= (const SpectrumValue& rhs)
 {
   Divide (rhs);
   return *this;
@@ -627,28 +627,28 @@
 
 
 SpectrumValue&
-SpectrumValue:: operator+= (double rhs)
+SpectrumValue::operator+= (double rhs)
 {
   Add (rhs);
   return *this;
 }
 
 SpectrumValue&
-SpectrumValue:: operator-= (double rhs)
+SpectrumValue::operator-= (double rhs)
 {
   Subtract (rhs);
   return *this;
 }
 
 SpectrumValue&
-SpectrumValue:: operator*= (double rhs)
+SpectrumValue::operator*= (double rhs)
 {
   Multiply (rhs);
   return *this;
 }
 
 SpectrumValue&
-SpectrumValue:: operator/= (double rhs)
+SpectrumValue::operator/= (double rhs)
 {
   Divide (rhs);
   return *this;
@@ -656,7 +656,7 @@
 
 
 SpectrumValue&
-SpectrumValue:: operator= (double rhs)
+SpectrumValue::operator= (double rhs)
 {
   Values::iterator it1 = m_values.begin ();
 
@@ -671,7 +671,7 @@
 
 
 SpectrumValue
-SpectrumValue:: operator<< (int n) const
+SpectrumValue::operator<< (int n) const
 {
   SpectrumValue res = *this;
   res.ShiftLeft (n);
@@ -679,7 +679,7 @@
 }
 
 SpectrumValue
-SpectrumValue:: operator>> (int n) const
+SpectrumValue::operator>> (int n) const
 {
   SpectrumValue res = *this;
   res.ShiftRight (n);
diff -Naur ns-3.23/src/spectrum/model/spectrum-value.h ns-3.24/src/spectrum/model/spectrum-value.h
--- ns-3.23/src/spectrum/model/spectrum-value.h	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/spectrum/model/spectrum-value.h	2015-09-15 11:18:44.000000000 -0700
@@ -507,8 +507,11 @@
    *  TracedCallback signature for SpectrumValue.
    *
    * \param [in] value Value of the traced variable.
+   * \deprecated The non-const \c Ptr<SpectrumPhy> argument
+   * is deprecated and will be changed to \c Ptr<const SpectrumPhy>
+   * in a future release.
    */
-  typedef void (* TracedCallback)(const Ptr<const SpectrumValue> value);
+  typedef void (* TracedCallback)(Ptr<SpectrumValue> value);
 
 
 private:
diff -Naur ns-3.23/src/spectrum/model/tv-spectrum-transmitter.cc ns-3.24/src/spectrum/model/tv-spectrum-transmitter.cc
--- ns-3.23/src/spectrum/model/tv-spectrum-transmitter.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/spectrum/model/tv-spectrum-transmitter.cc	2015-09-15 11:18:44.000000000 -0700
@@ -151,7 +151,7 @@
 }
 
 Ptr<NetDevice>
-TvSpectrumTransmitter::GetDevice ()
+TvSpectrumTransmitter::GetDevice () const
 {
   NS_LOG_FUNCTION (this);
   return m_netDevice;
diff -Naur ns-3.23/src/spectrum/model/tv-spectrum-transmitter.h ns-3.24/src/spectrum/model/tv-spectrum-transmitter.h
--- ns-3.23/src/spectrum/model/tv-spectrum-transmitter.h	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/spectrum/model/tv-spectrum-transmitter.h	2015-09-15 11:18:44.000000000 -0700
@@ -71,7 +71,7 @@
   void SetMobility (Ptr<MobilityModel> m);
   void SetDevice (Ptr<NetDevice> d);
   Ptr<MobilityModel> GetMobility ();
-  Ptr<NetDevice> GetDevice ();
+  Ptr<NetDevice> GetDevice () const;
   // device does not use Rx but these pure virtual methods must be implemented
   Ptr<const SpectrumModel> GetRxSpectrumModel () const;
   Ptr<AntennaModel> GetRxAntenna ();
diff -Naur ns-3.23/src/spectrum/model/waveform-generator.cc ns-3.24/src/spectrum/model/waveform-generator.cc
--- ns-3.23/src/spectrum/model/waveform-generator.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/spectrum/model/waveform-generator.cc	2015-09-15 11:18:44.000000000 -0700
@@ -98,7 +98,7 @@
 
 
 Ptr<NetDevice>
-WaveformGenerator::GetDevice ()
+WaveformGenerator::GetDevice () const
 {
   return m_netDevice;
 }
diff -Naur ns-3.23/src/spectrum/model/waveform-generator.h ns-3.24/src/spectrum/model/waveform-generator.h
--- ns-3.23/src/spectrum/model/waveform-generator.h	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/spectrum/model/waveform-generator.h	2015-09-15 11:18:44.000000000 -0700
@@ -64,7 +64,7 @@
   void SetMobility (Ptr<MobilityModel> m);
   void SetDevice (Ptr<NetDevice> d);
   Ptr<MobilityModel> GetMobility ();
-  Ptr<NetDevice> GetDevice ();
+  Ptr<NetDevice> GetDevice () const;
   Ptr<const SpectrumModel> GetRxSpectrumModel () const;
   Ptr<AntennaModel> GetRxAntenna ();
   void StartRx (Ptr<SpectrumSignalParameters> params);
diff -Naur ns-3.23/src/stats/bindings/modulegen__gcc_ILP32.py ns-3.24/src/stats/bindings/modulegen__gcc_ILP32.py
--- ns-3.23/src/stats/bindings/modulegen__gcc_ILP32.py	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/stats/bindings/modulegen__gcc_ILP32.py	2015-09-15 11:18:44.000000000 -0700
@@ -217,6 +217,12 @@
     register_types_ns3_Hash(nested_module)
     
     
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
+    
     ## Register a nested module for the namespace internal
     
     nested_module = module.add_cpp_namespace('internal')
@@ -257,6 +263,37 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *', u'ns3::TracedValueCallback::Int8')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) **', u'ns3::TracedValueCallback::Int8*')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *&', u'ns3::TracedValueCallback::Int8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *', u'ns3::TracedValueCallback::Uint8')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) **', u'ns3::TracedValueCallback::Uint8*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *&', u'ns3::TracedValueCallback::Uint8&')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *', u'ns3::TracedValueCallback::Double')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) **', u'ns3::TracedValueCallback::Double*')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *&', u'ns3::TracedValueCallback::Double&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *', u'ns3::TracedValueCallback::Uint32')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) **', u'ns3::TracedValueCallback::Uint32*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *&', u'ns3::TracedValueCallback::Uint32&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *', u'ns3::TracedValueCallback::Bool')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) **', u'ns3::TracedValueCallback::Bool*')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *&', u'ns3::TracedValueCallback::Bool&')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *', u'ns3::TracedValueCallback::Int16')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) **', u'ns3::TracedValueCallback::Int16*')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *&', u'ns3::TracedValueCallback::Int16&')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *', u'ns3::TracedValueCallback::Int32')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) **', u'ns3::TracedValueCallback::Int32*')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *&', u'ns3::TracedValueCallback::Int32&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *', u'ns3::TracedValueCallback::Uint16')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) **', u'ns3::TracedValueCallback::Uint16*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *&', u'ns3::TracedValueCallback::Uint16&')
+
 def register_types_ns3_internal(module):
     root_module = module.get_root()
     
@@ -402,11 +439,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3DataOutputCallback_methods(root_module, cls):
@@ -926,10 +958,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -1317,6 +1349,11 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetParent() [member function]
+    cls.add_method('SetParent', 
+                   'ns3::TypeId', 
+                   [], 
+                   template_parameters=['ns3::Object'])
     ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
     cls.add_method('SetSize', 
                    'ns3::TypeId', 
@@ -2043,11 +2080,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -2106,6 +2153,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## data-calculator.h (module 'stats'): static ns3::TypeId ns3::DataCalculator::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Output(ns3::DataOutputCallback & callback) const [member function]
     cls.add_method('Output', 
                    'void', 
@@ -2228,6 +2280,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## data-collector.h (module 'stats'): static ns3::TypeId ns3::DataCollector::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## data-collector.h (module 'stats'): std::_List_iterator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > ns3::DataCollector::MetadataBegin() [member function]
     cls.add_method('MetadataBegin', 
                    'std::_List_iterator< std::pair< std::basic_string< char, std::char_traits< char >, std::allocator< char > >, std::basic_string< char, std::char_traits< char >, std::allocator< char > > > >', 
@@ -2253,6 +2310,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## data-output-interface.h (module 'stats'): static ns3::TypeId ns3::DataOutputInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## data-output-interface.h (module 'stats'): void ns3::DataOutputInterface::Output(ns3::DataCollector & dc) [member function]
     cls.add_method('Output', 
                    'void', 
@@ -2649,6 +2711,11 @@
     cls.add_constructor([param('ns3::MinMaxAvgTotalCalculator< double > const &', 'arg0')])
     ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<double>::MinMaxAvgTotalCalculator() [constructor]
     cls.add_constructor([])
+    ## basic-data-calculators.h (module 'stats'): static ns3::TypeId ns3::MinMaxAvgTotalCalculator<double>::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<double>::Output(ns3::DataOutputCallback & callback) const [member function]
     cls.add_method('Output', 
                    'void', 
@@ -2754,6 +2821,11 @@
     cls.add_constructor([param('ns3::OmnetDataOutput const &', 'arg0')])
     ## omnet-data-output.h (module 'stats'): ns3::OmnetDataOutput::OmnetDataOutput() [constructor]
     cls.add_constructor([])
+    ## omnet-data-output.h (module 'stats'): static ns3::TypeId ns3::OmnetDataOutput::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## omnet-data-output.h (module 'stats'): void ns3::OmnetDataOutput::Output(ns3::DataCollector & dc) [member function]
     cls.add_method('Output', 
                    'void', 
@@ -2798,6 +2870,11 @@
     cls.add_constructor([param('ns3::SqliteDataOutput const &', 'arg0')])
     ## sqlite-data-output.h (module 'stats'): ns3::SqliteDataOutput::SqliteDataOutput() [constructor]
     cls.add_constructor([])
+    ## sqlite-data-output.h (module 'stats'): static ns3::TypeId ns3::SqliteDataOutput::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## sqlite-data-output.h (module 'stats'): void ns3::SqliteDataOutput::Output(ns3::DataCollector & dc) [member function]
     cls.add_method('Output', 
                    'void', 
@@ -2815,6 +2892,11 @@
     cls.add_constructor([param('ns3::TimeMinMaxAvgTotalCalculator const &', 'arg0')])
     ## time-data-calculators.h (module 'stats'): ns3::TimeMinMaxAvgTotalCalculator::TimeMinMaxAvgTotalCalculator() [constructor]
     cls.add_constructor([])
+    ## time-data-calculators.h (module 'stats'): static ns3::TypeId ns3::TimeMinMaxAvgTotalCalculator::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## time-data-calculators.h (module 'stats'): void ns3::TimeMinMaxAvgTotalCalculator::Output(ns3::DataOutputCallback & callback) const [member function]
     cls.add_method('Output', 
                    'void', 
@@ -3302,6 +3384,7 @@
                         [param('double', 'x')])
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
@@ -3315,6 +3398,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def register_functions_ns3_internal(module, root_module):
     return
 
diff -Naur ns-3.23/src/stats/bindings/modulegen__gcc_LP64.py ns-3.24/src/stats/bindings/modulegen__gcc_LP64.py
--- ns-3.23/src/stats/bindings/modulegen__gcc_LP64.py	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/stats/bindings/modulegen__gcc_LP64.py	2015-09-15 11:18:44.000000000 -0700
@@ -217,6 +217,12 @@
     register_types_ns3_Hash(nested_module)
     
     
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
+    
     ## Register a nested module for the namespace internal
     
     nested_module = module.add_cpp_namespace('internal')
@@ -257,6 +263,37 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *', u'ns3::TracedValueCallback::Int8')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) **', u'ns3::TracedValueCallback::Int8*')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *&', u'ns3::TracedValueCallback::Int8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *', u'ns3::TracedValueCallback::Uint8')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) **', u'ns3::TracedValueCallback::Uint8*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *&', u'ns3::TracedValueCallback::Uint8&')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *', u'ns3::TracedValueCallback::Double')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) **', u'ns3::TracedValueCallback::Double*')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *&', u'ns3::TracedValueCallback::Double&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *', u'ns3::TracedValueCallback::Uint32')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) **', u'ns3::TracedValueCallback::Uint32*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *&', u'ns3::TracedValueCallback::Uint32&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *', u'ns3::TracedValueCallback::Bool')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) **', u'ns3::TracedValueCallback::Bool*')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *&', u'ns3::TracedValueCallback::Bool&')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *', u'ns3::TracedValueCallback::Int16')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) **', u'ns3::TracedValueCallback::Int16*')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *&', u'ns3::TracedValueCallback::Int16&')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *', u'ns3::TracedValueCallback::Int32')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) **', u'ns3::TracedValueCallback::Int32*')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *&', u'ns3::TracedValueCallback::Int32&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *', u'ns3::TracedValueCallback::Uint16')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) **', u'ns3::TracedValueCallback::Uint16*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *&', u'ns3::TracedValueCallback::Uint16&')
+
 def register_types_ns3_internal(module):
     root_module = module.get_root()
     
@@ -402,11 +439,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3DataOutputCallback_methods(root_module, cls):
@@ -926,10 +958,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -1317,6 +1349,11 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetParent() [member function]
+    cls.add_method('SetParent', 
+                   'ns3::TypeId', 
+                   [], 
+                   template_parameters=['ns3::Object'])
     ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
     cls.add_method('SetSize', 
                    'ns3::TypeId', 
@@ -2043,11 +2080,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -2106,6 +2153,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## data-calculator.h (module 'stats'): static ns3::TypeId ns3::DataCalculator::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Output(ns3::DataOutputCallback & callback) const [member function]
     cls.add_method('Output', 
                    'void', 
@@ -2228,6 +2280,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## data-collector.h (module 'stats'): static ns3::TypeId ns3::DataCollector::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## data-collector.h (module 'stats'): std::_List_iterator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > ns3::DataCollector::MetadataBegin() [member function]
     cls.add_method('MetadataBegin', 
                    'std::_List_iterator< std::pair< std::basic_string< char, std::char_traits< char >, std::allocator< char > >, std::basic_string< char, std::char_traits< char >, std::allocator< char > > > >', 
@@ -2253,6 +2310,11 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## data-output-interface.h (module 'stats'): static ns3::TypeId ns3::DataOutputInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## data-output-interface.h (module 'stats'): void ns3::DataOutputInterface::Output(ns3::DataCollector & dc) [member function]
     cls.add_method('Output', 
                    'void', 
@@ -2649,6 +2711,11 @@
     cls.add_constructor([param('ns3::MinMaxAvgTotalCalculator< double > const &', 'arg0')])
     ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<double>::MinMaxAvgTotalCalculator() [constructor]
     cls.add_constructor([])
+    ## basic-data-calculators.h (module 'stats'): static ns3::TypeId ns3::MinMaxAvgTotalCalculator<double>::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<double>::Output(ns3::DataOutputCallback & callback) const [member function]
     cls.add_method('Output', 
                    'void', 
@@ -2754,6 +2821,11 @@
     cls.add_constructor([param('ns3::OmnetDataOutput const &', 'arg0')])
     ## omnet-data-output.h (module 'stats'): ns3::OmnetDataOutput::OmnetDataOutput() [constructor]
     cls.add_constructor([])
+    ## omnet-data-output.h (module 'stats'): static ns3::TypeId ns3::OmnetDataOutput::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## omnet-data-output.h (module 'stats'): void ns3::OmnetDataOutput::Output(ns3::DataCollector & dc) [member function]
     cls.add_method('Output', 
                    'void', 
@@ -2798,6 +2870,11 @@
     cls.add_constructor([param('ns3::SqliteDataOutput const &', 'arg0')])
     ## sqlite-data-output.h (module 'stats'): ns3::SqliteDataOutput::SqliteDataOutput() [constructor]
     cls.add_constructor([])
+    ## sqlite-data-output.h (module 'stats'): static ns3::TypeId ns3::SqliteDataOutput::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## sqlite-data-output.h (module 'stats'): void ns3::SqliteDataOutput::Output(ns3::DataCollector & dc) [member function]
     cls.add_method('Output', 
                    'void', 
@@ -2815,6 +2892,11 @@
     cls.add_constructor([param('ns3::TimeMinMaxAvgTotalCalculator const &', 'arg0')])
     ## time-data-calculators.h (module 'stats'): ns3::TimeMinMaxAvgTotalCalculator::TimeMinMaxAvgTotalCalculator() [constructor]
     cls.add_constructor([])
+    ## time-data-calculators.h (module 'stats'): static ns3::TypeId ns3::TimeMinMaxAvgTotalCalculator::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
     ## time-data-calculators.h (module 'stats'): void ns3::TimeMinMaxAvgTotalCalculator::Output(ns3::DataOutputCallback & callback) const [member function]
     cls.add_method('Output', 
                    'void', 
@@ -3302,6 +3384,7 @@
                         [param('double', 'x')])
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
@@ -3315,6 +3398,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def register_functions_ns3_internal(module, root_module):
     return
 
diff -Naur ns-3.23/src/stats/examples/double-probe-example.cc ns-3.24/src/stats/examples/double-probe-example.cc
--- ns-3.23/src/stats/examples/double-probe-example.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/stats/examples/double-probe-example.cc	2015-09-15 11:18:44.000000000 -0700
@@ -38,6 +38,10 @@
 class Emitter : public Object
 {
 public:
+  /**
+   * Register this type.
+   * \return The TypeId.
+   */
   static TypeId GetTypeId (void);
   Emitter ();
 private:
@@ -56,12 +60,13 @@
 Emitter::GetTypeId (void)
 {
   static TypeId tid = TypeId ("ns3::Emitter")
-    .AddConstructor<Emitter> ()
     .SetParent<Object> ()
+    .SetGroupName ("Stats")
+    .AddConstructor<Emitter> ()
     .AddTraceSource ("Counter",
                      "sample counter",
                      MakeTraceSourceAccessor (&Emitter::m_counter),
-                     "ns3::TracedValue::DoubleCallback")
+                     "ns3::TracedValueCallback::Double")
   ;
   return tid;
 }
diff -Naur ns-3.23/src/stats/examples/file-helper-example.cc ns-3.24/src/stats/examples/file-helper-example.cc
--- ns-3.23/src/stats/examples/file-helper-example.cc	2015-05-13 11:05:26.000000000 -0700
+++ ns-3.24/src/stats/examples/file-helper-example.cc	2015-09-15 11:18:44.000000000 -0700
@@ -42,6 +42,10 @@
 class Emitter : public Object
 {
 public:
+  /**
+   * Register this type.
+   * \return The TypeId.
+   */
   static TypeId GetTypeId (void);
   Emitter ();
 private:
@@ -59,12 +63,13 @@
 Emitter::GetTypeId (void)
 {
   static TypeId tid = TypeId ("ns3::Emitter")
-    .AddConstructor<Emitter> ()
     .SetParent<Object> ()
+    .SetGroupName ("Stats")
+    .AddConstructor<Emitter> ()
     .AddTraceSource ("Counter",
                      "sample counter",
                      MakeTraceSourceAccessor (&Emitter::m_counter),
-                     "ns3::TracedValue::DoubleCallback")
+                     "ns3::TracedValueCallback::Double")
   ;
   return tid;
 }
diff -Naur ns-3.23/src/stats/examples/gnuplot-helper-example.cc ns-3.24/src/stats/examples/gnuplot-helper-example.cc
--- ns-3.23/src/stats/examples/gnuplot-helper-example.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/stats/examples/gnuplot-helper-example.cc	2015-09-15 11:18:44.000000000 -0700
@@ -42,6 +42,10 @@
 class Emitter : public Object
 {
 public:
+  /**
+   * Register this type.
+   * \return The TypeId.
+   */
   static TypeId GetTypeId (void);
   Emitter ();
 private:
@@ -58,12 +62,13 @@
 Emitter::GetTypeId (void)
 {
   static TypeId tid = TypeId ("ns3::Emitter")
-    .AddConstructor<Emitter> ()
     .SetParent<Object> ()
+    .SetGroupName ("Stats")
+    .AddConstructor<Emitter> ()
     .AddTraceSource ("Counter",
                      "sample counter",
                      MakeTraceSourceAccessor (&Emitter::m_counter),
-                     "ns3::TracedValue::DoubleCallback")
+                     "ns3::TracedValueCallback::Double")
   ;
   return tid;
 }
diff -Naur ns-3.23/src/stats/examples/time-probe-example.cc ns-3.24/src/stats/examples/time-probe-example.cc
--- ns-3.23/src/stats/examples/time-probe-example.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/stats/examples/time-probe-example.cc	2015-09-15 11:18:44.000000000 -0700
@@ -53,6 +53,10 @@
 class Emitter : public Object
 {
 public:
+  /**
+   * Register this type.
+   * \return The TypeId.
+   */
   static TypeId GetTypeId (void);
   Emitter ();
 private:
@@ -71,8 +75,9 @@
 Emitter::GetTypeId (void)
 {
   static TypeId tid = TypeId ("ns3::Emitter")
-    .AddConstructor<Emitter> ()
     .SetParent<Object> ()
+    .SetGroupName ("Stats")
+    .AddConstructor<Emitter> ()
     .AddTraceSource ("Interval",
                      "Trace source",
                      MakeTraceSourceAccessor (&Emitter::m_interval),
diff -Naur ns-3.23/src/stats/model/average.h ns-3.24/src/stats/model/average.h
--- ns-3.23/src/stats/model/average.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/stats/model/average.h	2015-09-15 11:18:44.000000000 -0700
@@ -93,6 +93,8 @@
    *   - uncorrelated measurements, 
    *   - normal distribution and
    *   - large enough sample size.
+   *
+   * \returns Margin of error of the mean for 90% confidence level
    */
   double   Error90 () const { return 1.645 * std::sqrt (Var () / Count ()); }
   /**
@@ -102,6 +104,8 @@
    *   - uncorrelated measurements, 
    *   - normal distribution and
    *   - large enough sample size.
+   *
+   * \returns Margin of error of the mean for 95% confidence level
    */
   double   Error95 () const { return 1.960 * std::sqrt (Var () / Count ()); }
   /**
@@ -111,6 +115,9 @@
    *   - uncorrelated measurements, 
    *   - normal distribution and
    *   - large enough sample size.
+   *
+   * \returns Margin of error of the mean for 99% confidence level
+   *
    */
   double   Error99 () const { return 2.576 * std::sqrt (Var () / Count ()); }
   /**@}*/
diff -Naur ns-3.23/src/stats/model/basic-data-calculators.h ns-3.24/src/stats/model/basic-data-calculators.h
--- ns-3.23/src/stats/model/basic-data-calculators.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/stats/model/basic-data-calculators.h	2015-09-15 11:18:44.000000000 -0700
@@ -23,6 +23,7 @@
 
 #include "data-calculator.h"
 #include "data-output-interface.h"
+#include "ns3/type-name.h"
 
 namespace ns3 {
 
@@ -42,6 +43,12 @@
   virtual ~MinMaxAvgTotalCalculator();
 
   /**
+   * Register this type.
+   * \return The TypeId.
+   */
+  static TypeId GetTypeId (void);
+  
+  /**
    * Updates all variables of MinMaxAvgTotalCalculator
    * \param i value of type T to use for updating the calculator
    */
@@ -139,6 +146,7 @@
 MinMaxAvgTotalCalculator<T>::~MinMaxAvgTotalCalculator()
 {
 }
+  
 template <typename T>
 void
 MinMaxAvgTotalCalculator<T>::DoDispose (void)
@@ -147,6 +155,21 @@
   // MinMaxAvgTotalCalculator::DoDispose
 }
 
+/* static */
+template <typename T>
+TypeId
+MinMaxAvgTotalCalculator<T>::GetTypeId (void)
+{
+  static TypeId tid = TypeId ( ("ns3::MinMaxAvgTotalCalculator<"
+                                + TypeNameGet<T> ()
+                                + ">").c_str () )
+    .SetParent<Object> ()
+    .SetGroupName ("Stats")
+    .AddConstructor<MinMaxAvgTotalCalculator<T> > ()
+    ;
+  return tid;
+}
+  
 template <typename T>
 void
 MinMaxAvgTotalCalculator<T>::Update (const T i)
@@ -254,6 +277,12 @@
   virtual ~CounterCalculator();
 
   /**
+   * Register this type.
+   * \return The TypeId.
+   */
+  static TypeId GetTypeId (void);
+  
+  /**
    * Increments count by 1
    */
   void Update ();
@@ -295,6 +324,21 @@
 CounterCalculator<T>::~CounterCalculator()
 {
 }
+/* static */
+template <typename T>
+TypeId
+CounterCalculator<T>::GetTypeId (void)
+{
+  static TypeId tid = TypeId ( ("ns3::CounterCalculator<"
+                                + TypeNameGet<T> ()
+                                + ">").c_str () )
+    .SetParent<Object> ()
+    .SetGroupName ("Stats")
+    .AddConstructor<CounterCalculator<T> > ()
+    ;
+  return tid;
+}
+
 template <typename T>
 void
 CounterCalculator<T>::DoDispose (void)
diff -Naur ns-3.23/src/stats/model/boolean-probe.cc ns-3.24/src/stats/model/boolean-probe.cc
--- ns-3.23/src/stats/model/boolean-probe.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/stats/model/boolean-probe.cc	2015-09-15 11:18:44.000000000 -0700
@@ -44,7 +44,7 @@
     .AddTraceSource ( "Output",
                       "The bool that serves as output for this probe",
                       MakeTraceSourceAccessor (&BooleanProbe::m_output),
-                      "ns3::TracedValue::BoolCallback")
+                      "ns3::TracedValueCallback::Bool")
   ;
   return tid;
 }
diff -Naur ns-3.23/src/stats/model/data-calculator.cc ns-3.24/src/stats/model/data-calculator.cc
--- ns-3.23/src/stats/model/data-calculator.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/stats/model/data-calculator.cc	2015-09-15 11:18:44.000000000 -0700
@@ -43,6 +43,18 @@
   NS_LOG_FUNCTION (this);
 }
 
+/* static */
+TypeId
+DataCalculator::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::DataCalculator")
+    .SetParent<Object> ()
+    .SetGroupName ("Stats")
+    // No AddConstructor because this is an abstract class.
+    ;
+  return tid;
+}
+  
 void
 DataCalculator::DoDispose (void)
 {
diff -Naur ns-3.23/src/stats/model/data-calculator.h ns-3.24/src/stats/model/data-calculator.h
--- ns-3.23/src/stats/model/data-calculator.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/stats/model/data-calculator.h	2015-09-15 11:18:44.000000000 -0700
@@ -114,6 +114,12 @@
   virtual ~DataCalculator();
 
   /**
+   * Register this type.
+   * \return The TypeId.
+   */
+  static TypeId GetTypeId (void);
+  
+  /**
    * Returns whether the DataCalculator is enabled
    * \return true if DataCalculator is enabled
    */
diff -Naur ns-3.23/src/stats/model/data-collector.cc ns-3.24/src/stats/model/data-collector.cc
--- ns-3.23/src/stats/model/data-collector.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/stats/model/data-collector.cc	2015-09-15 11:18:44.000000000 -0700
@@ -40,6 +40,18 @@
   // end DataCollector::~DataCollector
 }
 
+/* static */
+TypeId
+DataCollector::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::DataCollector")
+    .SetParent<Object> ()
+    .SetGroupName ("Stats")
+    .AddConstructor<DataCollector> ()
+    ;
+  return tid;
+}
+  
 void DataCollector::DoDispose () {
   NS_LOG_FUNCTION (this);
 
diff -Naur ns-3.23/src/stats/model/data-collector.h ns-3.24/src/stats/model/data-collector.h
--- ns-3.23/src/stats/model/data-collector.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/stats/model/data-collector.h	2015-09-15 11:18:44.000000000 -0700
@@ -52,6 +52,12 @@
   virtual ~DataCollector();
 
   /**
+   * Register this type.
+   * \return The TypeId.
+   */
+  static TypeId GetTypeId (void);
+  
+  /**
    * Provide specific parameters to the DataCollector
    * \param experiment Label for the experiment
    * \param strategy Label for the strategy
diff -Naur ns-3.23/src/stats/model/data-output-interface.cc ns-3.24/src/stats/model/data-output-interface.cc
--- ns-3.23/src/stats/model/data-output-interface.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/stats/model/data-output-interface.cc	2015-09-15 11:18:44.000000000 -0700
@@ -36,6 +36,18 @@
 {
   NS_LOG_FUNCTION (this);
 }
+/* static */
+TypeId
+DataOutputInterface::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::DataOutputInterface")
+    .SetParent<Object> ()
+    .SetGroupName ("Stats")
+    // No AddConstructor because this is an abstract class.
+    ;
+  return tid;
+}
+  
 void
 DataOutputInterface::DoDispose ()
 {
diff -Naur ns-3.23/src/stats/model/data-output-interface.h ns-3.24/src/stats/model/data-output-interface.h
--- ns-3.23/src/stats/model/data-output-interface.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/stats/model/data-output-interface.h	2015-09-15 11:18:44.000000000 -0700
@@ -42,6 +42,12 @@
   virtual ~DataOutputInterface();
 
   /**
+   * Register this type.
+   * \return The TypeId.
+   */
+  static TypeId GetTypeId (void);
+  
+  /**
    * Outputs information from the provided DataCollector
    * \param dc DataCollector object
    */
diff -Naur ns-3.23/src/stats/model/double-probe.cc ns-3.24/src/stats/model/double-probe.cc
--- ns-3.23/src/stats/model/double-probe.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/stats/model/double-probe.cc	2015-09-15 11:18:44.000000000 -0700
@@ -44,7 +44,7 @@
     .AddTraceSource ( "Output",
                       "The double that serves as output for this probe",
                       MakeTraceSourceAccessor (&DoubleProbe::m_output),
-                     "ns3::TracedValue::DoubleCallback")
+                     "ns3::TracedValueCallback::Double")
   ;
   return tid;
 }
diff -Naur ns-3.23/src/stats/model/omnet-data-output.cc ns-3.24/src/stats/model/omnet-data-output.cc
--- ns-3.23/src/stats/model/omnet-data-output.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/stats/model/omnet-data-output.cc	2015-09-15 11:18:44.000000000 -0700
@@ -44,6 +44,18 @@
 {
   NS_LOG_FUNCTION (this);
 }
+/* static */
+TypeId
+OmnetDataOutput::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::OmnetDataOutput")
+    .SetParent<DataOutputInterface> ()
+    .SetGroupName ("Stats")
+    .AddConstructor<OmnetDataOutput> ()
+    ;
+  return tid;
+}
+  
 void
 OmnetDataOutput::DoDispose ()
 {
diff -Naur ns-3.23/src/stats/model/omnet-data-output.h ns-3.24/src/stats/model/omnet-data-output.h
--- ns-3.23/src/stats/model/omnet-data-output.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/stats/model/omnet-data-output.h	2015-09-15 11:18:44.000000000 -0700
@@ -41,6 +41,12 @@
   OmnetDataOutput();
   virtual ~OmnetDataOutput();
 
+  /**
+   * Register this type.
+   * \return The TypeId.
+   */
+  static TypeId GetTypeId (void);
+  
   virtual void Output (DataCollector &dc);
 
 protected:
diff -Naur ns-3.23/src/stats/model/sqlite-data-output.cc ns-3.24/src/stats/model/sqlite-data-output.cc
--- ns-3.23/src/stats/model/sqlite-data-output.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/stats/model/sqlite-data-output.cc	2015-09-15 11:18:44.000000000 -0700
@@ -45,6 +45,17 @@
 {
   NS_LOG_FUNCTION (this);
 }
+/* static */
+TypeId
+SqliteDataOutput::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::SqliteDataOutput")
+    .SetParent<DataOutputInterface> ()
+    .SetGroupName ("Stats")
+    .AddConstructor<SqliteDataOutput> ();
+  return tid;
+}
+  
 void
 SqliteDataOutput::DoDispose ()
 {
diff -Naur ns-3.23/src/stats/model/sqlite-data-output.h ns-3.24/src/stats/model/sqlite-data-output.h
--- ns-3.23/src/stats/model/sqlite-data-output.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/stats/model/sqlite-data-output.h	2015-09-15 11:18:44.000000000 -0700
@@ -43,6 +43,12 @@
   SqliteDataOutput();
   virtual ~SqliteDataOutput();
 
+  /**
+   * Register this type.
+   * \return The TypeId.
+   */
+  static TypeId GetTypeId (void);
+  
   virtual void Output (DataCollector &dc);
 
 protected:
diff -Naur ns-3.23/src/stats/model/time-data-calculators.cc ns-3.24/src/stats/model/time-data-calculators.cc
--- ns-3.23/src/stats/model/time-data-calculators.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/stats/model/time-data-calculators.cc	2015-09-15 11:18:44.000000000 -0700
@@ -39,6 +39,17 @@
 {
   NS_LOG_FUNCTION (this);
 }
+/* static */
+TypeId
+TimeMinMaxAvgTotalCalculator::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::TimeMinMaxAvgTotalCalculator")
+    .SetParent<DataCalculator> ()
+    .SetGroupName ("Stats")
+    .AddConstructor<TimeMinMaxAvgTotalCalculator> ();
+  return tid;
+}
+  
 void
 TimeMinMaxAvgTotalCalculator::DoDispose (void)
 {
diff -Naur ns-3.23/src/stats/model/time-data-calculators.h ns-3.24/src/stats/model/time-data-calculators.h
--- ns-3.23/src/stats/model/time-data-calculators.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/stats/model/time-data-calculators.h	2015-09-15 11:18:44.000000000 -0700
@@ -45,6 +45,12 @@
   virtual ~TimeMinMaxAvgTotalCalculator();
 
   /**
+   * Register this type.
+   * \return The TypeId.
+   */
+  static TypeId GetTypeId (void);
+  
+  /**
    * Updates all variables of TimeMinMaxAvgTotalCalculator
    * \param i value of type Time to use for updating the calculator
    */
diff -Naur ns-3.23/src/stats/model/time-probe.cc ns-3.24/src/stats/model/time-probe.cc
--- ns-3.23/src/stats/model/time-probe.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/stats/model/time-probe.cc	2015-09-15 11:18:44.000000000 -0700
@@ -45,7 +45,7 @@
     .AddTraceSource ("Output",
                      "The double valued (units of seconds) probe output",
                      MakeTraceSourceAccessor (&TimeProbe::m_output),
-                     "ns3::TracedValue::DoubleCallback")
+                     "ns3::TracedValueCallback::Double")
   ;
   return tid;
 }
diff -Naur ns-3.23/src/stats/model/time-series-adaptor.h ns-3.24/src/stats/model/time-series-adaptor.h
--- ns-3.23/src/stats/model/time-series-adaptor.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/stats/model/time-series-adaptor.h	2015-09-15 11:18:44.000000000 -0700
@@ -115,7 +115,7 @@
   /**
    * TracedCallback signature for output trace.
    *
-   * \param [in] now The current Time.
+   * \param [in] now The current time, in seconds.
    * \param [in] data The new data value.
    */
   typedef void (* OutputTracedCallback) (const double now, const double data);
diff -Naur ns-3.23/src/stats/model/uinteger-16-probe.cc ns-3.24/src/stats/model/uinteger-16-probe.cc
--- ns-3.23/src/stats/model/uinteger-16-probe.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/stats/model/uinteger-16-probe.cc	2015-09-15 11:18:44.000000000 -0700
@@ -43,7 +43,7 @@
     .AddTraceSource ( "Output",
                       "The uint16_t that serves as output for this probe",
                       MakeTraceSourceAccessor (&Uinteger16Probe::m_output),
-                     "ns3::TracedValue::Uint16Callback")
+                     "ns3::TracedValueCallback::Uint16")
   ;
   return tid;
 }
diff -Naur ns-3.23/src/stats/model/uinteger-32-probe.cc ns-3.24/src/stats/model/uinteger-32-probe.cc
--- ns-3.23/src/stats/model/uinteger-32-probe.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/stats/model/uinteger-32-probe.cc	2015-09-15 11:18:44.000000000 -0700
@@ -43,7 +43,7 @@
     .AddTraceSource ( "Output",
                       "The uint32_t that serves as output for this probe",
                       MakeTraceSourceAccessor (&Uinteger32Probe::m_output),
-                     "ns3::TracedValue::Uint32Callback")
+                     "ns3::TracedValueCallback::Uint32")
   ;
   return tid;
 }
diff -Naur ns-3.23/src/stats/model/uinteger-8-probe.cc ns-3.24/src/stats/model/uinteger-8-probe.cc
--- ns-3.23/src/stats/model/uinteger-8-probe.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/stats/model/uinteger-8-probe.cc	2015-09-15 11:18:44.000000000 -0700
@@ -43,7 +43,7 @@
     .AddTraceSource ( "Output",
                       "The uint8_t that serves as output for this probe",
                       MakeTraceSourceAccessor (&Uinteger8Probe::m_output),
-                     "ns3::TracedValue::Uint8Callback")
+                     "ns3::TracedValueCallback::Uint8")
   ;
   return tid;
 }
diff -Naur ns-3.23/src/stats/test/double-probe-test-suite.cc ns-3.24/src/stats/test/double-probe-test-suite.cc
--- ns-3.23/src/stats/test/double-probe-test-suite.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/stats/test/double-probe-test-suite.cc	2015-09-15 11:18:44.000000000 -0700
@@ -64,7 +64,7 @@
     .SetParent<Object> ()
     .AddTraceSource ("Emitter", "XX",
                      MakeTraceSourceAccessor (&SampleEmitter::m_trace),
-                     "ns3::TracedValue::DoubleCallback")
+                     "ns3::TracedValueCallback::Double")
   ;
   return tid;
 }
diff -Naur ns-3.23/src/tap-bridge/bindings/modulegen__gcc_ILP32.py ns-3.24/src/tap-bridge/bindings/modulegen__gcc_ILP32.py
--- ns-3.23/src/tap-bridge/bindings/modulegen__gcc_ILP32.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/tap-bridge/bindings/modulegen__gcc_ILP32.py	2015-09-15 11:18:44.000000000 -0700
@@ -242,6 +242,12 @@
     nested_module = module.add_cpp_namespace('Hash')
     register_types_ns3_Hash(nested_module)
     
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -277,6 +283,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -496,17 +509,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -528,11 +541,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -542,16 +550,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -789,14 +787,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -857,11 +859,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3DataRate_methods(root_module, cls):
@@ -1814,7 +1811,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -2887,11 +2884,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -4117,6 +4124,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -4129,6 +4137,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.23/src/tap-bridge/bindings/modulegen__gcc_LP64.py ns-3.24/src/tap-bridge/bindings/modulegen__gcc_LP64.py
--- ns-3.23/src/tap-bridge/bindings/modulegen__gcc_LP64.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/tap-bridge/bindings/modulegen__gcc_LP64.py	2015-09-15 11:18:44.000000000 -0700
@@ -242,6 +242,12 @@
     nested_module = module.add_cpp_namespace('Hash')
     register_types_ns3_Hash(nested_module)
     
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -277,6 +283,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -496,17 +509,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -528,11 +541,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -542,16 +550,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -789,14 +787,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -857,11 +859,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3DataRate_methods(root_module, cls):
@@ -1814,7 +1811,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -2887,11 +2884,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -4117,6 +4124,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -4129,6 +4137,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.23/src/tap-bridge/model/tap-bridge.h ns-3.24/src/tap-bridge/model/tap-bridge.h
--- ns-3.23/src/tap-bridge/model/tap-bridge.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/tap-bridge/model/tap-bridge.h	2015-09-15 11:18:44.000000000 -0700
@@ -35,6 +35,10 @@
 
 namespace ns3 {
 
+/**
+ * \ingroup tap-bridge
+ * Class to perform the actual reading from a socket
+ */
 class TapBridgeFdReader : public FdReader
 {
 private:
@@ -103,6 +107,10 @@
 class TapBridge : public NetDevice
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   /**
@@ -217,10 +225,29 @@
    */
   virtual void DoDispose (void);
 
+  /**
+   * Receives a packet from a bridged Device
+   * \param device the originating port
+   * \param packet the received packet
+   * \param protocol the packet protocol (e.g., Ethertype)
+   * \param src the packet source
+   * \param dst the packet destination
+   * \param packetType the packet type (e.g., host, broadcast, etc.)
+   * \returns true on success
+   */
   bool ReceiveFromBridgedDevice (Ptr<NetDevice> device, Ptr<const Packet> packet, uint16_t protocol,
                                  Address const &src, Address const &dst, PacketType packetType);
 
-  bool DiscardFromBridgedDevice (Ptr<NetDevice> device, Ptr<const Packet> packet, uint16_t protocol, Address const &src);
+  /**
+   * Receives a packet from a bridged Device
+   * \param device the originating port
+   * \param packet the received packet
+   * \param protocol the packet protocol (e.g., Ethertype)
+   * \param src the packet source
+   * \returns true on success
+   */
+  bool DiscardFromBridgedDevice (Ptr<NetDevice> device, Ptr<const Packet> packet, uint16_t protocol,
+                                 Address const &src);
 
 private:
 
@@ -247,13 +274,13 @@
    */
   void ReadCallback (uint8_t *buf, ssize_t len);
 
-  /*
+  /**
    * Forward a packet received from the tap device to the bridged ns-3 
    * device
    *
    * \param buf A character buffer containing the actual packet bits that were
    *            received from the host.
-   * \param buf The length of the buffer.
+   * \param len The length of the buffer.
    */
   void ForwardToBridgedDevice (uint8_t *buf, ssize_t len);
 
@@ -274,9 +301,13 @@
    *               either the Ethernet header in the case of type interpretation
    *               (DIX framing) or from the 802.2 LLC header in the case of 
    *               length interpretation (802.3 framing).
+   * \returns the packet, or null if the packet has been filtered.
    */
   Ptr<Packet> Filter (Ptr<Packet> packet, Address *src, Address *dst, uint16_t *type);
 
+  /**
+   * Notifies that the link is up and ready.
+   */
   void NotifyLinkUp (void);
 
   /**
@@ -405,7 +436,7 @@
    */
   uint8_t *m_packetBuffer;
 
-  /*
+  /**
    * a copy of the node id so the read thread doesn't have to GetNode() in
    * in order to find the node ID.  Thread unsafe reference counting in 
    * multithreaded apps is not a good thing.
diff -Naur ns-3.23/src/test/ns3tcp/ns3tcp-cwnd-test-suite.cc ns-3.24/src/test/ns3tcp/ns3tcp-cwnd-test-suite.cc
--- ns-3.23/src/test/ns3tcp/ns3tcp-cwnd-test-suite.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/test/ns3tcp/ns3tcp-cwnd-test-suite.cc	2015-09-15 11:18:44.000000000 -0700
@@ -79,6 +79,12 @@
   SimpleSource ();
   virtual ~SimpleSource();
 
+  /**
+   * Register this type.
+   * \return The TypeId.
+   */
+  static TypeId GetTypeId (void);
+  
   void Setup (Ptr<Socket> socket, Address address, uint32_t packetSize, uint32_t nPackets, DataRate dataRate);
 
 private:
@@ -115,6 +121,18 @@
   m_socket = 0;
 }
 
+/* static */
+TypeId
+SimpleSource::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("SimpleSource")
+    .SetParent<Application> ()
+    .SetGroupName ("Stats")
+    .AddConstructor<SimpleSource> ()
+    ;
+  return tid;
+}
+  
 void
 SimpleSource::Setup (Ptr<Socket> socket, Address address, uint32_t packetSize, uint32_t nPackets, DataRate dataRate)
 {
diff -Naur ns-3.23/src/test/ns3tcp/ns3tcp-interop-test-suite.cc ns-3.24/src/test/ns3tcp/ns3tcp-interop-test-suite.cc
--- ns-3.23/src/test/ns3tcp/ns3tcp-interop-test-suite.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/test/ns3tcp/ns3tcp-interop-test-suite.cc	2015-09-15 11:18:44.000000000 -0700
@@ -110,10 +110,9 @@
 {
   //
   // We expect there to be a file called tcp-interop-response-vectors.pcap in
-  // response-vectors/ of this directory
+  // the data directory
   //
-  m_pcapFilename = static_cast<std::string> (NS_TEST_SOURCEDIR) + 
-    static_cast<std::string> ("/response-vectors/ns3tcp-interop-response-vectors.pcap");
+  m_pcapFilename = CreateDataDirFilename ("ns3tcp-interop-response-vectors.pcap");
 
   if (m_writeVectors)
     {
@@ -157,15 +156,10 @@
       Time tNow = Simulator::Now ();
       int64_t tMicroSeconds = tNow.GetMicroSeconds ();
 
-      uint32_t size = p->GetSize ();
-      uint8_t *buf = new uint8_t[size];
-      p->CopyData (buf, size);
-
       m_pcapFile.Write (uint32_t (tMicroSeconds / 1000000), 
                         uint32_t (tMicroSeconds % 1000000), 
-                        buf, 
-                        size);
-      delete [] buf;
+                        p
+                        );
     }
   else
     {
@@ -311,6 +305,9 @@
 Ns3TcpInteroperabilityTestSuite::Ns3TcpInteroperabilityTestSuite ()
   : TestSuite ("ns3-tcp-interoperability", SYSTEM)
 {
+  // We can't use NS_TEST_SOURCEDIR variable here because we use subdirectories
+  SetDataDir ("src/test/ns3tcp/response-vectors");
+  
   AddTestCase (new Ns3TcpInteroperabilityTestCase, TestCase::QUICK);
 }
 
diff -Naur ns-3.23/src/test/ns3tcp/ns3tcp-loss-test-suite.cc ns-3.24/src/test/ns3tcp/ns3tcp-loss-test-suite.cc
--- ns-3.23/src/test/ns3tcp/ns3tcp-loss-test-suite.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/test/ns3tcp/ns3tcp-loss-test-suite.cc	2015-09-15 11:18:44.000000000 -0700
@@ -118,10 +118,10 @@
 {
   //
   // We expect there to be a file called ns3tcp-state-response-vectors.pcap in
-  // response-vectors/ of this directory
+  // the data directory
   //
   std::ostringstream oss;
-  oss << "/response-vectors/ns3tcp-loss-" << m_tcpModel << m_testCase << "-response-vectors.pcap";
+  oss << "ns3tcp-loss-" << m_tcpModel << m_testCase << "-response-vectors.pcap";
   m_pcapFilename = CreateDataDirFilename(oss.str ());
 
   if (m_writeVectors)
@@ -132,7 +132,9 @@
   else
     {
       m_pcapFile.Open (m_pcapFilename, std::ios::in|std::ios::binary);
-      NS_ABORT_MSG_UNLESS (m_pcapFile.GetDataLinkType () == PCAP_LINK_TYPE, "Wrong response vectors in directory");
+      NS_ABORT_MSG_UNLESS (m_pcapFile.GetDataLinkType () == PCAP_LINK_TYPE,
+                           "Wrong response vectors in directory: opening " <<
+                           m_pcapFilename);
     }
 }
 
@@ -166,15 +168,11 @@
       Time tNow = Simulator::Now ();
       int64_t tMicroSeconds = tNow.GetMicroSeconds ();
 
-      uint32_t size = p->GetSize ();
-      uint8_t *buf = new uint8_t[size];
-      p->CopyData (buf, size);
 
       m_pcapFile.Write (uint32_t (tMicroSeconds / 1000000), 
                         uint32_t (tMicroSeconds % 1000000), 
-                        buf, 
-                        size);
-      delete [] buf;
+                        p
+                        );
     }
   else
     {
@@ -457,7 +455,8 @@
 Ns3TcpLossTestSuite::Ns3TcpLossTestSuite ()
   : TestSuite ("ns3-tcp-loss", SYSTEM)
 {
-  SetDataDir (NS_TEST_SOURCEDIR);
+  // We can't use NS_TEST_SOURCEDIR variable here because we use subdirectories
+  SetDataDir ("src/test/ns3tcp/response-vectors");
   Packet::EnablePrinting ();  // Enable packet metadata for all test cases
 
   AddTestCase (new Ns3TcpLossTestCase ("Tahoe", 0), TestCase::QUICK);
diff -Naur ns-3.23/src/test/ns3tcp/ns3tcp-socket-writer.cc ns-3.24/src/test/ns3tcp/ns3tcp-socket-writer.cc
--- ns-3.23/src/test/ns3tcp/ns3tcp-socket-writer.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/test/ns3tcp/ns3tcp-socket-writer.cc	2015-09-15 11:18:44.000000000 -0700
@@ -33,6 +33,18 @@
   m_node = 0;
 }
 
+/* static */
+TypeId
+SocketWriter::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::SocketWriter")
+    .SetParent<Application> ()
+    .SetGroupName ("Stats")
+    .AddConstructor<SocketWriter> ()
+    ;
+  return tid;
+}
+  
 void
 SocketWriter::StartApplication ()
 {
diff -Naur ns-3.23/src/test/ns3tcp/ns3tcp-socket-writer.h ns-3.24/src/test/ns3tcp/ns3tcp-socket-writer.h
--- ns-3.23/src/test/ns3tcp/ns3tcp-socket-writer.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/test/ns3tcp/ns3tcp-socket-writer.h	2015-09-15 11:18:44.000000000 -0700
@@ -30,6 +30,12 @@
 public:
   SocketWriter ();
   virtual ~SocketWriter ();
+  /**
+   * Register this type.
+   * \return The TypeId.
+   */
+  static TypeId GetTypeId (void);
+  
   void Setup (Ptr<Node> node, Address peer);
   void Connect ();
   void Write (uint32_t numBytes);
diff -Naur ns-3.23/src/test/ns3tcp/ns3tcp-state-test-suite.cc ns-3.24/src/test/ns3tcp/ns3tcp-state-test-suite.cc
--- ns-3.23/src/test/ns3tcp/ns3tcp-state-test-suite.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/test/ns3tcp/ns3tcp-state-test-suite.cc	2015-09-15 11:18:44.000000000 -0700
@@ -115,11 +115,12 @@
 {
   //
   // We expect there to be a file called ns3tcp-state-response-vectors.pcap in
-  // response-vectors/ of this directory
+  // the data directory
   //
   std::ostringstream oss;
-  oss << "/response-vectors/ns3tcp-state" << m_testCase << "-response-vectors.pcap";
-  m_pcapFilename = static_cast<std::string> (NS_TEST_SOURCEDIR) + oss.str ();
+  oss << "ns3tcp-state" << m_testCase << "-response-vectors.pcap";
+  m_pcapFilename = CreateDataDirFilename (oss.str ());
+  std::cout << "m_pcapFilename=" << m_pcapFilename << std::endl;
 
   if (m_writeVectors)
     {
@@ -129,7 +130,9 @@
   else
     {
       m_pcapFile.Open (m_pcapFilename, std::ios::in|std::ios::binary);
-      NS_ABORT_MSG_UNLESS (m_pcapFile.GetDataLinkType () == PCAP_LINK_TYPE, "Wrong response vectors in directory");
+      NS_ABORT_MSG_UNLESS (m_pcapFile.GetDataLinkType () == PCAP_LINK_TYPE,
+                           "Wrong response vectors in directory: opening " <<
+                           m_pcapFilename);
     }
 }
 
@@ -170,15 +173,9 @@
       Time tNow = Simulator::Now ();
       int64_t tMicroSeconds = tNow.GetMicroSeconds ();
 
-      uint32_t size = p->GetSize ();
-      uint8_t *buf = new uint8_t[size];
-      p->CopyData (buf, size);
-
       m_pcapFile.Write (uint32_t (tMicroSeconds / 1000000), 
                         uint32_t (tMicroSeconds % 1000000), 
-                        buf, 
-                        size);
-      delete [] buf;
+                        p);
     }
   else
     {
@@ -457,7 +454,10 @@
 Ns3TcpStateTestSuite::Ns3TcpStateTestSuite ()
   : TestSuite ("ns3-tcp-state", SYSTEM)
 {
+  // We can't use NS_TEST_SOURCEDIR variable here because we use subdirectories
+  SetDataDir ("src/test/ns3tcp/response-vectors");
   Packet::EnablePrinting ();  // Enable packet metadata for all test cases
+  
   AddTestCase (new Ns3TcpStateTestCase (0), TestCase::QUICK);
   AddTestCase (new Ns3TcpStateTestCase (1), TestCase::QUICK);
   AddTestCase (new Ns3TcpStateTestCase (2), TestCase::QUICK);
diff -Naur ns-3.23/src/test/ns3wifi/wifi-interference-test-suite.cc ns-3.24/src/test/ns3wifi/wifi-interference-test-suite.cc
--- ns-3.23/src/test/ns3wifi/wifi-interference-test-suite.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/test/ns3wifi/wifi-interference-test-suite.cc	2015-09-15 11:18:44.000000000 -0700
@@ -1,3 +1,4 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
  * Copyright (c) 2009 University of Washington
  *
diff -Naur ns-3.23/src/test/traced/traced-callback-typedef-test-suite.cc ns-3.24/src/test/traced/traced-callback-typedef-test-suite.cc
--- ns-3.23/src/test/traced/traced-callback-typedef-test-suite.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.24/src/test/traced/traced-callback-typedef-test-suite.cc	2015-09-15 11:18:44.000000000 -0700
@@ -0,0 +1,647 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 Lawrence Livermore National Laboratory
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author:  Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
+ */
+
+#include "ns3/test.h"
+#include "ns3/core-module.h"
+
+#include "ns3/dsr-module.h"       // DsrOPtionSRHeader
+#include "ns3/internet-module.h"  // Ipv4, Ipv4L3Protocol, Ipv4PacketProbe
+                                  // Ipv6L3Protocol, Ipv6PacketProbe
+#include "ns3/lr-wpan-mac.h"      // LrWpanMac
+#include "ns3/lte-module.h"       // PhyReceptionStatParameters,
+                                  // PhyTransmissionStatParameters,
+                                  // LteUePowerControl
+#include "ns3/mesh-module.h"      // PeerManagementProtocol
+#include "ns3/mobility-module.h"  // MobilityModel
+#include "ns3/network-module.h"   // Packet, PacketBurst
+#include "ns3/olsr-module.h"      // olsr::RoutingProtocol
+#include "ns3/sixlowpan-module.h" // SixLowPanNetDevice
+#include "ns3/spectrum-module.h"  // SpectrumValue
+#include "ns3/stats-module.h"     // TimeSeriesAdapter
+#include "ns3/uan-module.h"       // UanPhy
+#include "ns3/wifi-module.h"      // WifiMacHeader, WifiPhyStateHelper
+
+
+#include <iostream>
+#include <sstream>
+#include <set>
+#include <string>
+
+using namespace ns3;
+
+namespace {
+
+/**
+ * Stringify the known TracedCallback type names.
+ *
+ * \tparam T \explicit The typedef name.
+ * \param [in] N The number of arguments expected.
+ * \returns The \c TracedCallback type name.
+ */
+template <typename T> inline
+std::string TypeName (int N) { return "unknown"; }
+
+#define TYPENAME(T)		  \
+  template <> inline std::string  \
+  TypeName < T >     (int N)	  \
+  {				  \
+    std::stringstream ss;	  \
+    ss << # T << "(" << N << ")"; \
+    return ss.str ();		  \
+  }
+
+/**
+ * \name Stringify known typename.
+ * @{
+ */
+TYPENAME (dsr::DsrOptionSRHeader::TracedCallback);
+TYPENAME (EpcUeNas::StateTracedCallback);
+TYPENAME (Ipv4L3Protocol::DropTracedCallback);
+TYPENAME (Ipv4L3Protocol::SentTracedCallback);
+TYPENAME (Ipv4L3Protocol::TxRxTracedCallback);
+TYPENAME (Ipv6L3Protocol::DropTracedCallback);
+TYPENAME (Ipv6L3Protocol::SentTracedCallback);
+TYPENAME (Ipv6L3Protocol::TxRxTracedCallback);
+TYPENAME (LrWpanMac::SentTracedCallback);
+TYPENAME (LrWpanMac::StateTracedCallback);
+TYPENAME (LrWpanPhy::StateTracedCallback);
+// TYPENAME (LteEnbMac::DlSchedulingTracedCallback);
+TYPENAME (LteEnbMac::UlSchedulingTracedCallback);
+TYPENAME (LteEnbPhy::ReportInterferenceTracedCallback);
+TYPENAME (LteEnbPhy::ReportUeSinrTracedCallback);
+TYPENAME (LteEnbRrc::ConnectionHandoverTracedCallback);
+TYPENAME (LteEnbRrc::HandoverStartTracedCallback);
+TYPENAME (LteEnbRrc::NewUeContextTracedCallback);
+TYPENAME (LteEnbRrc::ReceiveReportTracedCallback);
+TYPENAME (LtePdcp::PduRxTracedCallback);  
+TYPENAME (LtePdcp::PduTxTracedCallback);
+TYPENAME (LteUePhy::StateTracedCallback);
+TYPENAME (LteUePhy::RsrpSinrTracedCallback);  
+TYPENAME (LteUePhy::RsrpRsrqTracedCallback);
+TYPENAME (LteUeRrc::CellSelectionTracedCallback);
+TYPENAME (LteUeRrc::StateTracedCallback);  
+TYPENAME (Mac48Address::TracedCallback);
+TYPENAME (MobilityModel::TracedCallback);
+TYPENAME (olsr::RoutingProtocol::PacketTxRxTracedCallback);
+TYPENAME (olsr::RoutingProtocol::TableChangeTracedCallback);
+TYPENAME (Packet::AddressTracedCallback);
+TYPENAME (Packet::Mac48AddressTracedCallback);
+TYPENAME (Packet::SinrTracedCallback);
+TYPENAME (Packet::SizeTracedCallback);
+TYPENAME (Packet::TracedCallback);
+TYPENAME (PacketBurst::TracedCallback);
+TYPENAME (dot11s::PeerManagementProtocol::LinkOpenCloseTracedCallback);
+TYPENAME (PhyReceptionStatParameters::TracedCallback);
+TYPENAME (PhyTransmissionStatParameters::TracedCallback);
+TYPENAME (SixLowPanNetDevice::DropTracedCallback);
+TYPENAME (SixLowPanNetDevice::RxTxTracedCallback);
+TYPENAME (SpectrumChannel::LossTracedCallback);
+TYPENAME (SpectrumValue::TracedCallback);
+TYPENAME (TimeSeriesAdaptor::OutputTracedCallback);
+TYPENAME (UanMac::PacketModeTracedCallback);
+TYPENAME (UanMacCw::QueueTracedCallback);
+TYPENAME (UanMacRc::QueueTracedCallback);
+TYPENAME (UanNetDevice::RxTxTracedCallback);
+TYPENAME (UanPhy::TracedCallback);
+TYPENAME (UeManager::StateTracedCallback);
+TYPENAME (WifiMacHeader::TracedCallback);
+TYPENAME (WifiPhyStateHelper::RxOkTracedCallback);
+TYPENAME (WifiPhyStateHelper::StateTracedCallback);
+TYPENAME (WifiPhyStateHelper::TxTracedCallback);
+TYPENAME (WifiRemoteStationManager::PowerChangeTracedCallback);
+TYPENAME (WifiRemoteStationManager::RateChangeTracedCallback);
+/** @} */
+#undef TYPENAME
+
+
+/** Record typedefs which are identical to previously declared. */
+std::set<std::string>
+Duplicates (void)
+{
+  std::set<std::string> dupes;
+
+#define dupename(T)    dupes.insert (# T)
+  
+  dupename (LteRlc::NotifyTxTracedCallback);
+  dupename (LteRlc::ReceiveTracedCallback);
+  dupename (LteUeRrc::ImsiCidRntiTracedCallback);
+  dupename (LteUeRrc::MibSibHandoverTracedCallback);
+  dupename (WifiPhyStateHelper::RxEndErrorTracedCallback);
+
+#undef dupename
+  
+  return dupes;
+}
+  
+/**
+ * Container for duplicate types.
+ */
+std::set<std::string> g_dupes = Duplicates ();
+
+  
+/**
+ * Number of arguments passed to callback.
+ *
+ * Since the sink function is outside the invoking class,
+ * which in this case is TracedCallbackTestCase, we can't use
+ * the test macros directly.  Instead, we cache success
+ * in the \c g_NArgs global value, then inspect it
+ * in the TracedValueCallbackTestCase::CheckType method.
+ */
+int g_NArgs = 0;
+
+
+/**
+ * Log that a callback was invoked.
+ *
+ * We can't actually do anything with any of the arguments,
+ * but the fact we got called is what's important.
+ *
+ * \param [in] N The number of arguments passed to the callback.
+ */
+void SinkIt (unsigned int N)
+{
+  std::cout << "with " << N << " args." << std::endl;
+  g_NArgs = N;
+}
+
+/**
+ * Sink functions.
+ * @{
+ */
+template <typename T1, typename T2, typename T3, typename T4, typename T5>
+class TracedCbSink
+{
+public:
+  static void Sink (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) { SinkIt (5); }
+};
+
+template <typename T1, typename T2, typename T3, typename T4>
+class TracedCbSink<T1, T2, T3, T4, empty>
+{
+public:
+  static void Sink (T1 a1, T2 a2, T3 a3, T4 a4) { SinkIt (4); }
+};
+
+template <typename T1, typename T2, typename T3>
+class TracedCbSink<T1, T2, T3, empty, empty>
+{
+public:
+  static void Sink (T1 a1, T2 a2, T3 a3) { SinkIt (3); }
+};
+
+template <typename T1, typename T2>
+class TracedCbSink<T1, T2, empty, empty, empty>
+{
+public:
+  static void Sink (T1 a1, T2 a2) { SinkIt (2); }
+};
+
+template <typename T1>
+class TracedCbSink< T1, empty, empty, empty, empty>
+{
+public:
+  static void Sink (T1 a1) { SinkIt (1); }
+};
+/** @} */
+
+/** Non-const non-reference type. */
+template <typename T>
+struct NonConstReferenced
+{
+  typedef typename TypeTraits< typename TypeTraits<T>::ReferencedType >::NonConstType Type;
+};
+
+}  // anonymous namespace
+
+
+class TracedCallbackTypedefTestCase : public TestCase
+{
+public:
+  TracedCallbackTypedefTestCase ();
+  virtual ~TracedCallbackTypedefTestCase () {}
+  
+private:
+  
+  /** Invoker boilerplate. */
+  template <typename T1, typename T2, typename T3, typename T4, typename T5>
+  class CheckerBase : public Object
+  {
+  public:
+    typename TypeTraits<T1>::BaseType m1;
+    typename TypeTraits<T2>::BaseType m2;
+    typename TypeTraits<T3>::BaseType m3;
+    typename TypeTraits<T4>::BaseType m4;
+    typename TypeTraits<T5>::BaseType m5;
+    
+    void Cleanup (int N)
+    {
+      if (g_NArgs == 0) std::cout << std::endl;
+      NS_ASSERT_MSG (g_NArgs && g_NArgs == N, "failed.");
+      g_NArgs = 0;
+    }
+  };  // CheckerBase
+  
+  /** Callback checkers. */
+  template <typename T1, typename T2, typename T3, typename T4, typename T5>
+  class Checker : public CheckerBase<T1, T2, T3, T4, T5>
+  {
+    TracedCallback<T1, T2, T3, T4, T5> m_cb;
+    
+  public:
+    template <typename U>
+    void Invoke (void)
+    {
+      const int N = 5;
+      U sink = TracedCbSink<T1, T2, T3, T4, T5>::Sink;
+      Callback<void, T1, T2, T3, T4, T5> cb = MakeCallback (sink);
+      
+      std::cout << TypeName<U> (N) << " invoked ";
+      m_cb.ConnectWithoutContext (cb);
+      m_cb (this->m1, this->m2, this->m3, this->m4, this->m5);
+      this->Cleanup (N);
+    }
+  };  // Checker<5>
+    
+  template <typename T1, typename T2, typename T3, typename T4>
+  class Checker<T1, T2, T3, T4, empty>
+    : public CheckerBase<T1, T2, T3, T4, empty>
+  {
+    TracedCallback<T1, T2, T3, T4> m_cb;
+    
+  public:
+    template <typename U>
+    void Invoke (void)
+    {
+      const int N = 4;
+      U sink = TracedCbSink<T1, T2, T3, T4, empty>::Sink;
+      Callback<void, T1, T2, T3, T4> cb = MakeCallback (sink);
+      
+      std::cout << TypeName<U> (N) << " invoked ";
+      m_cb.ConnectWithoutContext (cb);
+      m_cb (this->m1, this->m2, this->m3, this->m4);
+      this->Cleanup (N);
+    }
+  };  // Checker <4>
+    
+
+  template <typename T1, typename T2, typename T3>
+  class Checker<T1, T2, T3, empty, empty>
+    : public CheckerBase<T1, T2, T3, empty, empty>
+  {
+    TracedCallback<T1, T2, T3> m_cb;
+    
+  public:
+    template <typename U>
+    void Invoke (void)
+    {
+      const int N = 3;
+      U sink = TracedCbSink<T1, T2, T3, empty, empty>::Sink;
+      Callback<void, T1, T2, T3> cb = MakeCallback (sink);
+      
+      std::cout << TypeName<U> (N) << " invoked ";
+      m_cb.ConnectWithoutContext (cb);
+      m_cb (this->m1, this->m2, this->m3);
+      this->Cleanup (N);
+    }
+  };  // Checker<3>
+    
+  template <typename T1, typename T2>
+  class Checker<T1, T2, empty, empty, empty>
+    : public CheckerBase<T1, T2, empty, empty, empty>
+  {
+    TracedCallback<T1, T2> m_cb;
+    
+  public:
+    template <typename U>
+    void Invoke (void)
+    {
+      const int N = 2;
+      U sink = TracedCbSink<T1, T2, empty, empty, empty>::Sink;
+      Callback<void, T1, T2> cb = MakeCallback (sink);
+      
+      std::cout << TypeName<U> (N) << " invoked ";
+      m_cb.ConnectWithoutContext (cb);
+      m_cb (this->m1, this->m2);
+      this->Cleanup (N);
+    }
+  };  // Checker<2>
+
+  template <typename T1>
+  class Checker<T1, empty, empty, empty, empty>
+    : public CheckerBase<T1, empty, empty, empty, empty>
+  {
+    TracedCallback<T1> m_cb;
+    
+  public:
+    template <typename U>
+    void Invoke (void)
+    {
+      const int N = 1;
+      U sink = TracedCbSink<T1, empty, empty, empty, empty>::Sink;
+      Callback<void, T1> cb = MakeCallback (sink);
+      
+      std::cout << TypeName<U> (N) << " invoked ";
+      m_cb.ConnectWithoutContext (cb);
+      m_cb (this->m1);
+      this->Cleanup (N);
+    }
+  };  // Checker<1>
+
+  virtual void DoRun (void);
+
+};  // TracedCallbackTypedefTestCase
+
+TracedCallbackTypedefTestCase::TracedCallbackTypedefTestCase ()
+  : TestCase ("Check basic TracedCallback operation")
+{
+}
+
+void
+TracedCallbackTypedefTestCase::DoRun (void)
+{
+
+#define DUPE(U, T1)                                                     \
+  if (g_dupes.find ( # U ) == g_dupes.end ())                           \
+    NS_TEST_ASSERT_MSG_NE (0, 1,                                        \
+                         "expected to find " <<  # U << " in dupes.");  \
+  if (TypeName<U> (0) == TypeName<T1> (0))                              \
+    std::cout << # U << " matches " << # T1  << std::endl;              \
+  else                                                                  \
+    NS_TEST_ASSERT_MSG_EQ                                               \
+      (TypeName<U> (0), TypeName<T1> (0),                               \
+       "the typedef " << # U <<                                         \
+       " used to match the typedef " << # T1 <<                         \
+       " but no longer does.  Please add a new CHECK call.")
+
+#define CHECK(U, T1, T2, T3, T4, T5)                                    \
+    CreateObject< Checker<T1, T2, T3, T4, T5> > () -> Invoke<U> ()
+
+  CHECK (dsr::DsrOptionSRHeader::TracedCallback,
+         const dsr::DsrOptionSRHeader &,
+         empty, empty, empty, empty);
+
+  CHECK (EpcUeNas::StateTracedCallback,
+         EpcUeNas::State, EpcUeNas::State,
+         empty, empty, empty);
+
+  CHECK (Ipv4L3Protocol::DropTracedCallback,
+         const Ipv4Header &, Ptr<const Packet>,
+         Ipv4L3Protocol::DropReason, Ptr<Ipv4>, uint32_t );
+
+  CHECK (Ipv4L3Protocol::SentTracedCallback,
+         const Ipv4Header &, Ptr<const Packet>, uint32_t,
+         empty, empty);
+
+  CHECK (Ipv4L3Protocol::TxRxTracedCallback,
+         Ptr<const Packet>, Ptr<Ipv4>, uint32_t,
+         empty, empty);
+  
+  CHECK (Ipv6L3Protocol::DropTracedCallback,
+         const Ipv6Header &, Ptr<const Packet>,
+         Ipv6L3Protocol::DropReason, Ptr<Ipv6>, uint32_t
+        );
+
+  CHECK (Ipv6L3Protocol::SentTracedCallback,
+         const Ipv6Header &, Ptr<const Packet>, uint32_t,
+         empty, empty);
+
+  CHECK (Ipv6L3Protocol::TxRxTracedCallback,
+         Ptr<const Packet>, Ptr<Ipv6>, uint32_t,
+         empty, empty);
+
+  CHECK (LrWpanMac::SentTracedCallback,
+         Ptr<const Packet>, uint8_t, uint8_t,
+         empty, empty);
+
+  CHECK (LrWpanMac::StateTracedCallback,
+         LrWpanMacState, LrWpanMacState,
+         empty, empty, empty);
+
+  CHECK (LrWpanPhy::StateTracedCallback,
+         Time, LrWpanPhyEnumeration, LrWpanPhyEnumeration,
+         empty, empty);
+
+  
+  /*  Too many args :(
+  CHECK (LteEnbMac::DlSchedulingTracedCallback,
+         uint32_t, uint32_t, uint16_t,
+         uint8_t, uint16_t, uint8_t, uint16_t);
+  */
+
+  CHECK (LteEnbMac::UlSchedulingTracedCallback,
+         uint32_t, uint32_t, uint16_t, uint8_t, uint16_t);
+
+  CHECK (LteEnbPhy::ReportUeSinrTracedCallback,
+         uint16_t, uint16_t, double,
+         empty, empty);
+
+  CHECK (LteEnbPhy::ReportInterferenceTracedCallback,
+         uint16_t, Ptr<SpectrumValue>,
+         empty, empty, empty);
+
+  CHECK (LteEnbRrc::ConnectionHandoverTracedCallback,
+         uint64_t, uint16_t, uint16_t,
+         empty, empty);
+
+  CHECK (LteEnbRrc::HandoverStartTracedCallback,
+         uint64_t, uint16_t, uint16_t, uint16_t,
+         empty);
+  
+  CHECK (LteEnbRrc::NewUeContextTracedCallback,
+         uint16_t, uint16_t,
+         empty, empty, empty);
+
+  CHECK (LteEnbRrc::ReceiveReportTracedCallback,
+         uint64_t, uint16_t, uint16_t, LteRrcSap::MeasurementReport,
+         empty);
+
+  CHECK (LtePdcp::PduRxTracedCallback,
+         uint16_t, uint8_t, uint32_t, uint64_t,
+         empty);
+
+  CHECK (LtePdcp::PduTxTracedCallback,
+         uint16_t, uint8_t, uint32_t,
+         empty, empty);
+
+  DUPE  (LteRlc::NotifyTxTracedCallback, LtePdcp::PduTxTracedCallback);
+
+  DUPE  (LteRlc::ReceiveTracedCallback, LtePdcp::PduRxTracedCallback);
+
+  CHECK (LteUePhy::RsrpSinrTracedCallback,
+         uint16_t, uint16_t, double, double,
+         empty);
+         
+  CHECK (LteUePhy::RsrpRsrqTracedCallback,
+         uint16_t, uint16_t, double, double, bool);
+         
+  CHECK (LteUePhy::StateTracedCallback,
+         uint16_t, uint16_t, LteUePhy::State, LteUePhy::State,
+         empty);
+
+  DUPE   (LteUePowerControl::TxPowerTracedCallback, LteEnbPhy::ReportUeSinrTracedCallback);
+
+  CHECK (LteUeRrc::CellSelectionTracedCallback,
+         uint64_t, uint16_t,
+         empty, empty, empty);
+
+  DUPE  (LteUeRrc::ImsiCidRntiTracedCallback, LteEnbRrc::ConnectionHandoverTracedCallback);
+
+  DUPE   (LteUeRrc::MibSibHandoverTracedCallback, LteEnbRrc::HandoverStartTracedCallback);
+
+  CHECK (LteUeRrc::StateTracedCallback,
+         uint64_t, uint16_t, uint16_t, LteUeRrc::State, LteUeRrc::State);
+         
+  CHECK (Mac48Address::TracedCallback,
+         Mac48Address,
+         empty, empty, empty, empty);
+
+  CHECK (MobilityModel::TracedCallback,
+         Ptr<const MobilityModel>,
+         empty, empty, empty, empty);
+
+  CHECK (olsr::RoutingProtocol::PacketTxRxTracedCallback,
+         const olsr::PacketHeader &, const olsr::MessageList &,
+         empty, empty, empty);
+
+  CHECK (olsr::RoutingProtocol::TableChangeTracedCallback,
+         uint32_t,
+         empty, empty, empty, empty);
+
+  CHECK (Packet::AddressTracedCallback,
+         Ptr<const Packet>, const Address &,
+         empty, empty, empty);
+
+  CHECK (Packet::Mac48AddressTracedCallback,
+         Ptr<const Packet>, Mac48Address,
+         empty, empty, empty);
+
+  CHECK (Packet::SinrTracedCallback,
+         Ptr<const Packet>, double,
+         empty, empty, empty);
+
+  CHECK (Packet::SizeTracedCallback,
+         uint32_t, uint32_t,
+         empty, empty, empty);
+
+  CHECK (Packet::TracedCallback,
+         Ptr<const Packet>,
+         empty, empty, empty, empty);
+
+  CHECK (PacketBurst::TracedCallback,
+         Ptr<const PacketBurst>,
+         empty, empty, empty, empty);
+
+  CHECK (dot11s::PeerManagementProtocol::LinkOpenCloseTracedCallback,
+         Mac48Address, Mac48Address,
+         empty, empty, empty);
+         
+  CHECK (PhyReceptionStatParameters::TracedCallback,
+         PhyReceptionStatParameters,
+         empty, empty, empty, empty);
+
+  CHECK (PhyTransmissionStatParameters::TracedCallback,
+         PhyTransmissionStatParameters,
+         empty, empty, empty, empty);
+
+  CHECK (SixLowPanNetDevice::DropTracedCallback,
+         SixLowPanNetDevice::DropReason, Ptr<const Packet>,
+         Ptr<SixLowPanNetDevice>, uint32_t,
+         empty);
+
+  CHECK (SixLowPanNetDevice::RxTxTracedCallback,
+         Ptr<const Packet>, Ptr<SixLowPanNetDevice>, uint32_t,
+         empty, empty);
+
+  CHECK (SpectrumChannel::LossTracedCallback,
+         Ptr<SpectrumPhy>, Ptr<SpectrumPhy>, double,
+         empty, empty);
+  
+  CHECK (SpectrumValue::TracedCallback,
+         Ptr<SpectrumValue>,
+         empty, empty, empty, empty);
+
+  CHECK (TimeSeriesAdaptor::OutputTracedCallback,
+         double, double,
+         empty, empty, empty);
+
+  CHECK (UanMac::PacketModeTracedCallback,
+         Ptr<const Packet>, UanTxMode,
+         empty, empty, empty);
+         
+  CHECK (UanMacCw::QueueTracedCallback,
+         Ptr<const Packet>, uint16_t,
+         empty, empty, empty);
+         
+  CHECK (UanMacRc::QueueTracedCallback,
+         Ptr<const Packet>, uint32_t,
+         empty, empty, empty);
+
+  CHECK (UanNetDevice::RxTxTracedCallback,
+         Ptr<const Packet>, UanAddress,
+         empty, empty, empty);
+         
+  CHECK (UanPhy::TracedCallback,
+         Ptr<const Packet>, double, UanTxMode,
+         empty, empty);
+
+  CHECK (UeManager::StateTracedCallback,
+         uint64_t, uint16_t, uint16_t, UeManager::State, UeManager::State);
+  
+  CHECK (WifiMacHeader::TracedCallback,
+         const WifiMacHeader &,
+         empty, empty, empty, empty);
+
+  DUPE   (WifiPhyStateHelper::RxEndErrorTracedCallback, Packet::SinrTracedCallback);
+
+  CHECK (WifiPhyStateHelper::RxOkTracedCallback,
+         Ptr<const Packet>, double, WifiMode, WifiPreamble,
+         empty);
+
+  CHECK (WifiPhyStateHelper::StateTracedCallback,
+         Time, Time, WifiPhy::State,
+         empty, empty);
+
+  CHECK (WifiPhyStateHelper::TxTracedCallback,
+         Ptr<const Packet>, WifiMode, WifiPreamble, uint8_t,
+         empty);
+
+  CHECK (WifiRemoteStationManager::PowerChangeTracedCallback,
+         uint8_t, Mac48Address,
+         empty, empty, empty);
+
+  CHECK (WifiRemoteStationManager::RateChangeTracedCallback,
+         uint32_t, Mac48Address,
+         empty, empty, empty);
+}
+
+class TracedCallbackTypedefTestSuite : public TestSuite
+{
+public:
+  TracedCallbackTypedefTestSuite ();
+};
+
+TracedCallbackTypedefTestSuite::TracedCallbackTypedefTestSuite ()
+  : TestSuite ("traced-callback-typedef", SYSTEM)
+{
+  AddTestCase (new TracedCallbackTypedefTestCase, TestCase::QUICK);
+}
+
+static TracedCallbackTypedefTestSuite tracedCallbackTypedefTestSuite;
diff -Naur ns-3.23/src/test/traced/traced-value-callback-typedef-test-suite.cc ns-3.24/src/test/traced/traced-value-callback-typedef-test-suite.cc
--- ns-3.23/src/test/traced/traced-value-callback-typedef-test-suite.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.24/src/test/traced/traced-value-callback-typedef-test-suite.cc	2015-09-15 11:18:44.000000000 -0700
@@ -0,0 +1,240 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 Lawrence Livermore National Laboratory
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author:  Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
+ */
+
+#include "ns3/test.h"
+#include "ns3/core-module.h"
+#include "ns3/network-module.h"  // SequenceNumber32
+
+using namespace ns3;
+
+namespace {
+
+/**
+ * \name Stringify the known TracedValue type names.
+ *
+ * \returns The \c TracedValueCallback type name.
+ * @{
+ */
+template <typename T> inline
+std::string TypeName (void) { return "unknown"; }
+
+template <> inline std::string TypeName <bool>     (void) { return "Bool"    ; }
+template <> inline std::string TypeName <int8_t>   (void) { return "Int8_t"  ; }
+template <> inline std::string TypeName <int16_t>  (void) { return "Int16_t" ; }
+template <> inline std::string TypeName <int32_t>  (void) { return "Int32_t" ; }
+template <> inline std::string TypeName <uint8_t>  (void) { return "Uint8_t" ; }
+template <> inline std::string TypeName <uint16_t> (void) { return "Uint16_t"; }
+template <> inline std::string TypeName <uint32_t> (void) { return "Uint32_t"; }
+template <> inline std::string TypeName <double>   (void) { return "Double"  ; }
+template <> inline std::string TypeName <Time>     (void) { return "Time"    ; }
+template <> inline std::string TypeName <SequenceNumber32> (void) { return "SequenceNumber32" ; }
+/** @} */
+
+
+/**
+ * Result of callback test.
+ *
+ * Since the sink function is outside the invoking class,
+ * which in this case is TracedValueCallbackTestCase, we can't use
+ * the test macros directly.  Instead, we cache the result
+ * in the \c g_Result global value, then inspect it
+ * in the TracedValueCallbackTestCase::CheckType method.
+ */
+std::string g_Result = "";
+  
+
+/**
+ * Template for TracedValue sink functions.
+ *
+ * This generates a sink function for any underlying type.
+ *
+ * \tparam T \explicit The type of the value being traced.
+ *        Since the point of this template is to create a
+ *        sink function, the template type must be given explicitly.
+ * \param [in] oldValue The original value.
+ * \param [in] newValue The new value.
+ */
+template <typename T>
+void TracedValueCbSink (T oldValue, T newValue)
+{
+  std::cout << ": "
+            << (int64_t)oldValue << " -> "
+            << (int64_t)newValue
+            << std::endl;
+  if (oldValue != 0)
+    g_Result = "oldValue should be 0";
+  else if (newValue != 1)
+    g_Result = "newValue should be 1";
+
+}  // TracedValueCbSink<>()
+  
+/**
+ * TracedValueCbSink specialization for Time.
+ */
+template <>
+void TracedValueCbSink<Time> (Time oldValue, Time newValue)
+{
+  TracedValueCbSink <int64_t> (oldValue.GetInteger (),
+                               newValue.GetInteger ());
+}
+/**
+ * TracedValueCbSink specialization for SequenceNumber32.
+ */
+template <>  
+void TracedValueCbSink<SequenceNumber32> (SequenceNumber32 oldValue,
+                                          SequenceNumber32 newValue)
+{
+  TracedValueCbSink <int64_t> (oldValue.GetValue (), newValue.GetValue ());
+}
+
+
+}  // anonymous namespace
+
+  
+class TracedValueCallbackTestCase : public TestCase
+{
+public:
+  TracedValueCallbackTestCase ();
+  virtual ~TracedValueCallbackTestCase () {}
+
+private:
+
+  /**
+   * A class to check that the callback function typedef will
+   * actually connect to the TracedValue.
+   */
+  template <typename T>
+  class CheckTvCb : public Object
+  {
+    TracedValue<T> m_value;
+
+  public:
+    /** Constructor. */
+    CheckTvCb (void)  : m_value (0)  { }
+    
+    /** Register this type. */
+    static TypeId GetTypeId (void)
+    {
+      static TypeId tid =
+        TypeId ( ("CheckTvCb<" + TypeName<T>() + ">").c_str ())
+        .SetParent <Object> ()
+        .AddTraceSource ("value",
+                         "A value being traced.",
+                         MakeTraceSourceAccessor (&CheckTvCb<T>::m_value),
+                         ("ns3::TracedValueCallback::" + TypeName<T>()).c_str () )
+        ;
+      return tid;
+    }  // GetTypeId ()
+
+    /**
+     * Check the sink function against the actual TracedValue invocation.
+     *
+     * We connect the TracedValue to the sink.  If the types
+     * aren't compatible, the connection will fail.
+     *
+     * Just to make sure, we increment the TracedValue,
+     * which calls the sink..
+     */
+    template <typename U>
+    void Invoke (U cb)
+    {
+      bool ok = TraceConnectWithoutContext ("value", MakeCallback (cb));
+      std::cout << GetTypeId () << ": "
+                << (ok ? "connected " : "failed to connect ")
+                << GetTypeId ().GetTraceSource (0).callback
+        ;
+      // The endl is in the sink function.
+      
+      if (ok)
+        // Odd form here is to accomodate the uneven operator support
+        // of Time and SequenceNumber32.
+        m_value = m_value + (T) 1; 
+      else
+        {
+          // finish the line started above
+          std::cout << std::endl;
+
+          // and log the error
+          g_Result = "failed to connect callback";
+        }
+
+    }  // Invoke()
+
+  };  // class CheckTvCb<T>
+  
+
+  /**
+   * Check the TracedValue typedef against TracedValueCbSink<T>.
+   *
+   * We instantiate a sink function of type \c U, initialized to
+   * TracedValueCbSink<T>.  If this compiles, we've proved the
+   * sink function and the typedef agree.
+   *
+   * \tparam T \explicit The base type.
+   * \tparam U \explicit The TracedValueCallback sink typedef type.
+   */
+  template <typename T, typename U>
+  void CheckType (void)
+  {
+    U sink = TracedValueCbSink<T>;
+    CreateObject<CheckTvCb<T> > ()->Invoke (sink);
+
+    NS_TEST_ASSERT_MSG_EQ (g_Result, "", g_Result);
+    g_Result = "";
+    
+  }  // CheckType<>()
+    
+  virtual void DoRun (void);
+
+};
+
+TracedValueCallbackTestCase::TracedValueCallbackTestCase ()
+  : TestCase ("Check basic TracedValue callback operation")
+{
+}
+
+void
+TracedValueCallbackTestCase::DoRun (void)
+{
+  CheckType< bool,     TracedValueCallback::Bool   > ();
+  CheckType< int8_t,   TracedValueCallback::Int8   > ();
+  CheckType< int16_t,  TracedValueCallback::Int16  > ();
+  CheckType< int32_t,  TracedValueCallback::Int32  > ();
+  CheckType< uint8_t,  TracedValueCallback::Uint8  > ();
+  CheckType< uint16_t, TracedValueCallback::Uint16 > ();
+  CheckType< uint32_t, TracedValueCallback::Uint32 > ();
+  CheckType< double,   TracedValueCallback::Double > ();
+  CheckType< Time,     TracedValueCallback::Time   > ();
+  CheckType< SequenceNumber32, TracedValueCallback::SequenceNumber32 > ();
+}
+
+class TracedValueCallbackTestSuite : public TestSuite
+{
+public:
+  TracedValueCallbackTestSuite ();
+};
+
+TracedValueCallbackTestSuite::TracedValueCallbackTestSuite ()
+  : TestSuite ("traced-value-callback", UNIT)
+{
+  AddTestCase (new TracedValueCallbackTestCase, TestCase::QUICK);
+}
+
+static TracedValueCallbackTestSuite tracedValueCallbackTestSuite;
diff -Naur ns-3.23/src/test/wscript ns-3.24/src/test/wscript
--- ns-3.23/src/test/wscript	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/test/wscript	2015-09-15 11:18:44.000000000 -0700
@@ -15,15 +15,20 @@
     if 'test' in bld.env['MODULES_NOT_BUILT']:
         return
 
-    test = bld.create_ns3_module('test', ['internet', 'mobility', 'applications', 'csma', 'bridge', 'config-store', 'point-to-point', 'csma-layout', 'flow-monitor', 'wifi'])
+    test = bld.create_ns3_module('test',
+                                 ['applications', 'bridge', 'config-store',
+                                  'csma', 'csma-layout', 'dsr',
+                                  'flow-monitor', 'internet', 'lr-wpan',
+                                  'lte', 'mesh', 'mobility', 'olsr',
+                                  'point-to-point', 'sixlowpan', 'stats',
+                                  'uan', 'wifi'])
+
     headers = bld(features='ns3header')
     headers.module = 'test'
 
     test_test = bld.create_ns3_module_test_library('test')
     test_test.source = [
         'csma-system-test-suite.cc',
-        'ns3wifi/wifi-interference-test-suite.cc',
-        'ns3wifi/wifi-msdu-aggregator-test-suite.cc',
         'ns3tcp/ns3tcp-cwnd-test-suite.cc',
         'ns3tcp/ns3tcp-interop-test-suite.cc',
         'ns3tcp/ns3tcp-loss-test-suite.cc',
@@ -32,5 +37,9 @@
         'ns3tcp/ns3tcp-state-test-suite.cc',
         'ns3tcp/nsctcp-loss-test-suite.cc',
         'ns3tcp/ns3tcp-socket-writer.cc',
+        'ns3wifi/wifi-interference-test-suite.cc',
+        'ns3wifi/wifi-msdu-aggregator-test-suite.cc',
+        'traced/traced-callback-typedef-test-suite.cc',
+        'traced/traced-value-callback-typedef-test-suite.cc',
         ]
 
diff -Naur ns-3.23/src/topology-read/bindings/modulegen__gcc_ILP32.py ns-3.24/src/topology-read/bindings/modulegen__gcc_ILP32.py
--- ns-3.23/src/topology-read/bindings/modulegen__gcc_ILP32.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/topology-read/bindings/modulegen__gcc_ILP32.py	2015-09-15 11:18:44.000000000 -0700
@@ -165,6 +165,12 @@
     nested_module = module.add_cpp_namespace('Hash')
     register_types_ns3_Hash(nested_module)
     
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -200,6 +206,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -388,11 +401,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3Hasher_methods(root_module, cls):
@@ -1935,11 +1943,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -2634,6 +2652,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -2646,6 +2665,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.23/src/topology-read/bindings/modulegen__gcc_LP64.py ns-3.24/src/topology-read/bindings/modulegen__gcc_LP64.py
--- ns-3.23/src/topology-read/bindings/modulegen__gcc_LP64.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/topology-read/bindings/modulegen__gcc_LP64.py	2015-09-15 11:18:44.000000000 -0700
@@ -165,6 +165,12 @@
     nested_module = module.add_cpp_namespace('Hash')
     register_types_ns3_Hash(nested_module)
     
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -200,6 +206,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -388,11 +401,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3Hasher_methods(root_module, cls):
@@ -1935,11 +1943,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -2634,6 +2652,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -2646,6 +2665,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.23/src/topology-read/helper/topology-reader-helper.h ns-3.24/src/topology-read/helper/topology-reader-helper.h
--- ns-3.23/src/topology-read/helper/topology-reader-helper.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/topology-read/helper/topology-reader-helper.h	2015-09-15 11:18:44.000000000 -0700
@@ -39,25 +39,25 @@
 
   /**
    * \brief Sets the input file name.
-   * \param fileName the input file name.
+   * \param [in] fileName The input file name.
    */
   void SetFileName (const std::string fileName);
 
   /**
    * \brief Sets the input file type. Supported file types are "Orbis", "Inet", "Rocketfuel".
-   * \param fileType the input file type.
+   * \param [in] fileType The input file type.
    */
   void SetFileType (const std::string fileType);
 
   /**
    * \brief Gets a Ptr<TopologyReader> to the actual TopologyReader.
-   * \return the created Topology Reader (or null if there was an error).
+   * \return The created Topology Reader (or null if there was an error).
    */
   Ptr<TopologyReader> GetTopologyReader ();
 
 private:
-  Ptr<TopologyReader> m_inputModel;  //!< Smart pointer to the actual topology model
-  std::string m_fileName;  //!< Name of the input file
+  Ptr<TopologyReader> m_inputModel;  //!< Smart pointer to the actual topology model.
+  std::string m_fileName;  //!< Name of the input file.
   std::string m_fileType;  //!< Type of the input file (e.g., "Inet", "Orbis", etc.).
 };
 
diff -Naur ns-3.23/src/topology-read/model/inet-topology-reader.cc ns-3.24/src/topology-read/model/inet-topology-reader.cc
--- ns-3.23/src/topology-read/model/inet-topology-reader.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/topology-read/model/inet-topology-reader.cc	2015-09-15 11:18:44.000000000 -0700
@@ -37,8 +37,9 @@
 TypeId InetTopologyReader::GetTypeId (void)
 {
   static TypeId tid = TypeId ("ns3::InetTopologyReader")
-    .SetParent<Object> ()
+    .SetParent<TopologyReader> ()
     .SetGroupName ("TopologyReader")
+    .AddConstructor<InetTopologyReader> ()
   ;
   return tid;
 }
diff -Naur ns-3.23/src/topology-read/model/inet-topology-reader.h ns-3.24/src/topology-read/model/inet-topology-reader.h
--- ns-3.23/src/topology-read/model/inet-topology-reader.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/topology-read/model/inet-topology-reader.h	2015-09-15 11:18:44.000000000 -0700
@@ -49,7 +49,7 @@
 public:
   /**
    * \brief Get the type ID.
-   * \return the object TypeId
+   * \return the object TypeId.
    */
   static TypeId GetTypeId (void);
 
@@ -66,7 +66,7 @@
    * Then reads until the end of the file (total links number rows) and saves
    * the structure of every single link in the topology.
    *
-   * \return the container of the nodes created (or empty container if there was an error)
+   * \return The container of the nodes created (or empty container if there was an error)
    */
   virtual NodeContainer Read (void);
 
@@ -74,13 +74,13 @@
   /**
    * \brief Copy constructor
    *
-   * Defined and unimplemented to avoid misuse
+   * Defined and unimplemented to avoid misuse.
    */
   InetTopologyReader (const InetTopologyReader&);
   /**
    * \brief Copy constructor
    *
-   * Defined and unimplemented to avoid misuse
+   * Defined and unimplemented to avoid misuse.
    * \returns
    */
   InetTopologyReader& operator= (const InetTopologyReader&);
diff -Naur ns-3.23/src/topology-read/model/orbis-topology-reader.cc ns-3.24/src/topology-read/model/orbis-topology-reader.cc
--- ns-3.23/src/topology-read/model/orbis-topology-reader.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/topology-read/model/orbis-topology-reader.cc	2015-09-15 11:18:44.000000000 -0700
@@ -37,8 +37,9 @@
 TypeId OrbisTopologyReader::GetTypeId (void)
 {
   static TypeId tid = TypeId ("ns3::OrbisTopologyReader")
-    .SetParent<Object> ()
+    .SetParent<TopologyReader> ()
     .SetGroupName ("TopologyReader")
+    .AddConstructor<OrbisTopologyReader> ()
   ;
   return tid;
 }
diff -Naur ns-3.23/src/topology-read/model/orbis-topology-reader.h ns-3.24/src/topology-read/model/orbis-topology-reader.h
--- ns-3.23/src/topology-read/model/orbis-topology-reader.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/topology-read/model/orbis-topology-reader.h	2015-09-15 11:18:44.000000000 -0700
@@ -46,7 +46,7 @@
 public:
   /**
    * \brief Get the type ID.
-   * \return the object TypeId
+   * \return the object TypeId.
    */
   static TypeId GetTypeId (void);
 
@@ -61,7 +61,7 @@
    * so the input file is read line by line to figure out how many links
    * and nodes are in the topology.
    *
-   * \return the container of the nodes created (or empty container if there was an error)
+   * \return The container of the nodes created (or empty container if there was an error)
    */
   virtual NodeContainer Read (void);
 
@@ -70,13 +70,13 @@
   /**
    * \brief Copy constructor
    *
-   * Defined and unimplemented to avoid misuse
+   * Defined and unimplemented to avoid misuse.
    */
   OrbisTopologyReader (const OrbisTopologyReader&);
   /**
    * \brief Copy constructor
    *
-   * Defined and unimplemented to avoid misuse
+   * Defined and unimplemented to avoid misuse.
    * \returns
    */
   OrbisTopologyReader& operator= (const OrbisTopologyReader&);
diff -Naur ns-3.23/src/topology-read/model/rocketfuel-topology-reader.cc ns-3.24/src/topology-read/model/rocketfuel-topology-reader.cc
--- ns-3.23/src/topology-read/model/rocketfuel-topology-reader.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/topology-read/model/rocketfuel-topology-reader.cc	2015-09-15 11:18:44.000000000 -0700
@@ -37,8 +37,9 @@
 TypeId RocketfuelTopologyReader::GetTypeId (void)
 {
   static TypeId tid = TypeId ("ns3::RocketfuelTopologyReader")
-    .SetParent<Object> ()
+    .SetParent<TopologyReader> ()
     .SetGroupName ("TopologyReader")
+    .AddConstructor<RocketfuelTopologyReader> ()
   ;
   return tid;
 }
diff -Naur ns-3.23/src/topology-read/model/rocketfuel-topology-reader.h ns-3.24/src/topology-read/model/rocketfuel-topology-reader.h
--- ns-3.23/src/topology-read/model/rocketfuel-topology-reader.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/topology-read/model/rocketfuel-topology-reader.h	2015-09-15 11:18:44.000000000 -0700
@@ -45,7 +45,7 @@
 public:
   /**
    * \brief Get the type ID.
-   * \return the object TypeId
+   * \return The object TypeId
    */
   static TypeId GetTypeId (void);
 
@@ -60,7 +60,7 @@
    * so the input file is read line by line to figure out how many links
    * and nodes are in the topology.
    *
-   * \return the container of the nodes created (or empty container if there was an error)
+   * \return The container of the nodes created (or empty container if there was an error)
    */
   virtual NodeContainer Read (void);
 
@@ -71,9 +71,9 @@
    * Parser for the *.cch file available at:
    * http://www.cs.washington.edu/research/networking/rocketfuel/maps/rocketfuel_maps_cch.tar.gz
    *
-   * \param argc argument counter
-   * \param argv argument vector
-   * \return the container of the nodes created (or empty container if there was an error)
+   * \param [in] argc Argument counter.
+   * \param [in] argv Argument vector.
+   * \return The container of the nodes created (or empty container if there was an error).
    */
   NodeContainer GenerateFromMapsFile (int argc, char *argv[]);
 
@@ -83,9 +83,9 @@
    * Parser for the weights.* file available at:
    * http://www.cs.washington.edu/research/networking/rocketfuel/maps/weights-dist.tar.gz
    *
-   * \param argc argument counter
-   * \param argv argument vector
-   * \return the container of the nodes created (or empty container if there was an error)
+   * \param [in] argc Argument counter.
+   * \param [in] argv Argument vector.
+   * \return The container of the nodes created (or empty container if there was an error).
    */
   NodeContainer GenerateFromWeightsFile (int argc, char *argv[]);
 
@@ -103,25 +103,25 @@
   /**
    * \brief Classifies the file type according to its content.
    *
-   * \return the file type (RF_MAPS, RF_WEIGHTS, or RF_UNKNOWN)
+   * \return The file type (RF_MAPS, RF_WEIGHTS, or RF_UNKNOWN)
    */
   enum RF_FileType GetFileType (const char *);
 
-  int m_linksNumber; //!< number of links
-  int m_nodesNumber; //!< number of nodes
-  std::map<std::string, Ptr<Node> > m_nodeMap; //!< map of the nodes (name, node)
+  int m_linksNumber; //!< Number of links.
+  int m_nodesNumber; //!< Number of nodes.
+  std::map<std::string, Ptr<Node> > m_nodeMap; //!< Map of the nodes (name, node).
 
 private:
   /**
    * \brief Copy constructor
    *
-   * Defined and unimplemented to avoid misuse
+   * Defined and unimplemented to avoid misuse.
    */
   RocketfuelTopologyReader (const RocketfuelTopologyReader&);
   /**
    * \brief Copy constructor
    *
-   * Defined and unimplemented to avoid misuse
+   * Defined and unimplemented to avoid misuse.
    * \returns
    */
   RocketfuelTopologyReader& operator= (const RocketfuelTopologyReader&);
diff -Naur ns-3.23/src/topology-read/model/topology-reader.h ns-3.24/src/topology-read/model/topology-reader.h
--- ns-3.23/src/topology-read/model/topology-reader.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/topology-read/model/topology-reader.h	2015-09-15 11:18:44.000000000 -0700
@@ -60,74 +60,72 @@
     typedef std::map<std::string, std::string>::const_iterator ConstAttributesIterator;
 
     /**
-     * \brief Constructor
-     * \param fromPtr Ptr to the node the link is orginating from
-     * \param fromName name of the node the link is orginating from
-     * \param toPtr Ptr to the node the link is directed to
-     * \param toName name of the node the link is directed to
+     * \brief Constructor.
+     * \param [in] fromPtr Ptr to the node the link is originating from.
+     * \param [in] fromName Name of the node the link is originating from.
+     * \param [in] toPtr Ptr to the node the link is directed to.
+     * \param [in] toName Name of the node the link is directed to.
      */
     Link ( Ptr<Node> fromPtr, const std::string &fromName, Ptr<Node> toPtr, const std::string &toName );
 
     /**
-     * \brief Returns a Ptr<Node> to the "from" node of the link
-     * \return a Ptr<Node> to the "from" node of the link
+     * \brief Returns a Ptr<Node> to the "from" node of the link.
+     * \return A Ptr<Node> to the "from" node of the link.
      */
     Ptr<Node> GetFromNode (void) const;
     /**
-     * \brief Returns the name of the "from" node of the link
-     * \return the name of the "from" node of the link
+     * \brief Returns the name of the "from" node of the link.
+     * \return The name of the "from" node of the link.
      */
     std::string GetFromNodeName (void) const;
     /**
-     * \brief Returns a Ptr<Node> to the "to" node of the link
-     * \return a Ptr<Node> to the "to" node of the link
+     * \brief Returns a Ptr<Node> to the "to" node of the link.
+     * \return A Ptr<Node> to the "to" node of the link.
      */
     Ptr<Node> GetToNode (void) const;
     /**
-     * \brief Returns the name of the "to" node of the link
-     * \return the name of the "to" node of the link
+     * \brief Returns the name of the "to" node of the link.
+     * \return The name of the "to" node of the link.
      */
     std::string GetToNodeName (void) const;
     /**
      * \brief Returns the value of a link attribute. The attribute must exist.
-     *
-     * \param name the name of the attribute
-     *
-     * \return the value of the attribute
+     * \param [in] Name the name of the attribute.
+     * \return The value of the attribute.
      */
     std::string GetAttribute (const std::string &name) const;
     /**
      * \brief Returns the value of a link attribute.
-     * \param name the name of the attribute
-     * \param value the value of the attribute
+     * \param [in] name The name of the attribute.
+     * \param [out] value The value of the attribute.
      *
-     * \return true if the attribute was defined, false otherwise.
+     * \return True if the attribute was defined, false otherwise.
      */
     bool GetAttributeFailSafe (const std::string &name, std::string &value) const;
     /**
      * \brief Sets an arbitrary link attribute.
-     * \param name the name of the attribute
-     * \param value the value of the attribute
+     * \param [in] name The name of the attribute.
+     * \param [in] value The value of the attribute.
      */
     void SetAttribute (const std::string &name, const std::string &value);
     /**
      * \brief Returns an iterator to the begin of the attributes.
-     * \return a const iterator to the first attribute of a link.
+     * \return A const iterator to the first attribute of a link.
      */
     ConstAttributesIterator AttributesBegin (void) const;
     /**
      * \brief Returns an iterator to the end of the attributes.
-     * \return a const iterator to the last attribute of a link.
+     * \return A const iterator to the last attribute of a link.
      */
     ConstAttributesIterator AttributesEnd (void) const;
 
 private:
     Link ();
-    std::string m_fromName; //!< Name of the node the links originates from
-    Ptr< Node > m_fromPtr;  //!< The node the links originates from
-    std::string m_toName;   //!< Name of the node the links is directed to
-    Ptr< Node > m_toPtr;    //!< The node the links is directed to
-    std::map<std::string, std::string> m_linkAttr;  ///< Container of the link attributes (if any)
+    std::string m_fromName; //!< Name of the node the links originates from.
+    Ptr< Node > m_fromPtr;  //!< The node the links originates from.
+    std::string m_toName;   //!< Name of the node the links is directed to.
+    Ptr< Node > m_toPtr;    //!< The node the links is directed to.
+    std::map<std::string, std::string> m_linkAttr;  //!< Container of the link attributes (if any).
   };
 
   /**
@@ -137,7 +135,7 @@
 
   /**
    * \brief Get the type ID.
-   * \return the object TypeId
+   * \return The object TypeId.
    */
   static TypeId GetTypeId (void);
 
@@ -153,49 +151,49 @@
    * reader from the choices about actual IP number assignment and
    * kind of links between nodes.
    *
-   * \return the container of the nodes created (or null if there was an error)
+   * \return The container of the nodes created (or null if there was an error).
    */
   virtual NodeContainer Read (void) = 0;
 
   /**
    * \brief Sets the input file name.
-   * \param fileName the input file name.
+   * \param [in] fileName The input file name.
    */
   void SetFileName (const std::string &fileName);
 
   /**
    * \brief Returns the input file name.
-   * \return the input file name.
+   * \return The input file name.
    */
   std::string GetFileName (void) const;
 
   /**
    * \brief Returns an iterator to the the first link in this block.
-   * \return a const iterator to the first link in this block.
+   * \return A const iterator to the first link in this block.
    */
   ConstLinksIterator LinksBegin (void) const;
 
   /**
    * \brief Returns an iterator to the the last link in this block.
-   * \return a const iterator to the last link in this block.
+   * \return A const iterator to the last link in this block.
    */
   ConstLinksIterator LinksEnd (void) const;
 
   /**
    * \brief Returns the number of links in this block.
-   * \return the number of links in this block.
+   * \return The number of links in this block.
    */
   int LinksSize (void) const;
 
   /**
    * \brief Checks if the block contains any links.
-   * \return true if there are no links in this block, false otherwise.
+   * \return True if there are no links in this block, false otherwise.
    */
   bool LinksEmpty (void) const;
 
   /**
    * \brief Adds a link to the topology.
-   * \param link the link to be added.
+   * \param link [in] The link to be added.
    */
   void AddLink (Link link);
 
@@ -204,24 +202,24 @@
   /**
    * \brief Copy constructor
    *
-   * Defined and unimplemented to avoid misuse
+   * Defined and unimplemented to avoid misuse.
    */
   TopologyReader (const TopologyReader&);
   /**
    * \brief Copy constructor
    *
-   * Defined and unimplemented to avoid misuse
+   * Defined and unimplemented to avoid misuse.
    * \returns
    */
   TopologyReader& operator= (const TopologyReader&);
 
   /**
-   * the name of the input file
+   * The name of the input file.
    */
   std::string m_fileName;
 
   /**
-   * the container of the links between the nodes
+   * The container of the links between the nodes.
    */
   std::list<Link> m_linksList;
 
diff -Naur ns-3.23/src/uan/bindings/modulegen__gcc_ILP32.py ns-3.24/src/uan/bindings/modulegen__gcc_ILP32.py
--- ns-3.23/src/uan/bindings/modulegen__gcc_ILP32.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/uan/bindings/modulegen__gcc_ILP32.py	2015-09-15 11:18:44.000000000 -0700
@@ -66,6 +66,10 @@
     root_module['ns3::Ipv6Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix [class]
     module.add_class('Ipv6Prefix', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    module.add_class('Mac48Address', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    root_module['ns3::Mac48Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## net-device-container.h (module 'network'): ns3::NetDeviceContainer [class]
     module.add_class('NetDeviceContainer', import_from_module='ns.network')
     ## node-container.h (module 'network'): ns3::NodeContainer [class]
@@ -330,6 +334,10 @@
     module.add_class('Ipv6PrefixValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## random-variable-stream.h (module 'core'): ns3::LogNormalRandomVariable [class]
     module.add_class('LogNormalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker [class]
+    module.add_class('Mac48AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue [class]
+    module.add_class('Mac48AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## mobility-model.h (module 'mobility'): ns3::MobilityModel [class]
     module.add_class('MobilityModel', import_from_module='ns.mobility', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
@@ -418,6 +426,12 @@
     register_types_ns3_Hash(nested_module)
     
     
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
+    
     ## Register a nested module for the namespace internal
     
     nested_module = module.add_cpp_namespace('internal')
@@ -458,6 +472,37 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *', u'ns3::TracedValueCallback::Int8')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) **', u'ns3::TracedValueCallback::Int8*')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *&', u'ns3::TracedValueCallback::Int8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *', u'ns3::TracedValueCallback::Uint8')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) **', u'ns3::TracedValueCallback::Uint8*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *&', u'ns3::TracedValueCallback::Uint8&')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *', u'ns3::TracedValueCallback::Double')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) **', u'ns3::TracedValueCallback::Double*')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *&', u'ns3::TracedValueCallback::Double&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *', u'ns3::TracedValueCallback::Uint32')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) **', u'ns3::TracedValueCallback::Uint32*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *&', u'ns3::TracedValueCallback::Uint32&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *', u'ns3::TracedValueCallback::Bool')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) **', u'ns3::TracedValueCallback::Bool*')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *&', u'ns3::TracedValueCallback::Bool&')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *', u'ns3::TracedValueCallback::Int16')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) **', u'ns3::TracedValueCallback::Int16*')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *&', u'ns3::TracedValueCallback::Int16&')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *', u'ns3::TracedValueCallback::Int32')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) **', u'ns3::TracedValueCallback::Int32*')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *&', u'ns3::TracedValueCallback::Int32&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *', u'ns3::TracedValueCallback::Uint16')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) **', u'ns3::TracedValueCallback::Uint16*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *&', u'ns3::TracedValueCallback::Uint16&')
+
 def register_types_ns3_internal(module):
     root_module = module.get_root()
     
@@ -483,6 +528,7 @@
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
     register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
+    register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
     register_Ns3NetDeviceContainer_methods(root_module, root_module['ns3::NetDeviceContainer'])
     register_Ns3NodeContainer_methods(root_module, root_module['ns3::NodeContainer'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
@@ -604,6 +650,8 @@
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
     register_Ns3LogNormalRandomVariable_methods(root_module, root_module['ns3::LogNormalRandomVariable'])
+    register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
+    register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3MobilityModel_methods(root_module, root_module['ns3::MobilityModel'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
@@ -755,17 +803,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -787,11 +835,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -801,16 +844,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -1048,14 +1081,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -1116,11 +1153,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3DeviceEnergyModelContainer_methods(root_module, cls):
@@ -1738,6 +1770,78 @@
                    is_const=True)
     return
 
+def register_Ns3Mac48Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(ns3::Mac48Address const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetBroadcast() [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv4Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv4Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv6Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast6Prefix() [member function]
+    cls.add_method('GetMulticast6Prefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticastPrefix() [member function]
+    cls.add_method('GetMulticastPrefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsBroadcast() const [member function]
+    cls.add_method('IsBroadcast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsGroup() const [member function]
+    cls.add_method('IsGroup', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static bool ns3::Mac48Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
 def register_Ns3NetDeviceContainer_methods(root_module, cls):
     ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer(ns3::NetDeviceContainer const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDeviceContainer const &', 'arg0')])
@@ -2140,7 +2244,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -2292,10 +2396,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -4570,11 +4674,11 @@
                    'ns3::Ptr< ns3::UanChannel >', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## uan-phy.h (module 'uan'): ns3::Ptr<ns3::UanNetDevice> ns3::UanPhy::GetDevice() [member function]
+    ## uan-phy.h (module 'uan'): ns3::Ptr<ns3::UanNetDevice> ns3::UanPhy::GetDevice() const [member function]
     cls.add_method('GetDevice', 
                    'ns3::Ptr< ns3::UanNetDevice >', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## uan-phy.h (module 'uan'): ns3::UanTxMode ns3::UanPhy::GetMode(uint32_t n) [member function]
     cls.add_method('GetMode', 
                    'ns3::UanTxMode', 
@@ -4884,11 +4988,11 @@
                    'ns3::Ptr< ns3::UanChannel >', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## uan-phy-dual.h (module 'uan'): ns3::Ptr<ns3::UanNetDevice> ns3::UanPhyDual::GetDevice() [member function]
+    ## uan-phy-dual.h (module 'uan'): ns3::Ptr<ns3::UanNetDevice> ns3::UanPhyDual::GetDevice() const [member function]
     cls.add_method('GetDevice', 
                    'ns3::Ptr< ns3::UanNetDevice >', 
                    [], 
-                   is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## uan-phy-dual.h (module 'uan'): ns3::UanTxMode ns3::UanPhyDual::GetMode(uint32_t n) [member function]
     cls.add_method('GetMode', 
                    'ns3::UanTxMode', 
@@ -5218,11 +5322,11 @@
                    'ns3::UanModesList', 
                    [], 
                    is_static=True)
-    ## uan-phy-gen.h (module 'uan'): ns3::Ptr<ns3::UanNetDevice> ns3::UanPhyGen::GetDevice() [member function]
+    ## uan-phy-gen.h (module 'uan'): ns3::Ptr<ns3::UanNetDevice> ns3::UanPhyGen::GetDevice() const [member function]
     cls.add_method('GetDevice', 
                    'ns3::Ptr< ns3::UanNetDevice >', 
                    [], 
-                   is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## uan-phy-gen.h (module 'uan'): ns3::UanTxMode ns3::UanPhyGen::GetMode(uint32_t n) [member function]
     cls.add_method('GetMode', 
                    'ns3::UanTxMode', 
@@ -5972,11 +6076,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -6193,10 +6307,10 @@
                    'double', 
                    [], 
                    is_virtual=True)
-    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
     cls.add_method('Interpolate', 
                    'double', 
-                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
                    visibility='private', is_virtual=True)
     ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
     cls.add_method('Validate', 
@@ -6874,6 +6988,46 @@
                    is_virtual=True)
     return
 
+def register_Ns3Mac48AddressChecker_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker(ns3::Mac48AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac48AddressValue_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressValue const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'value')])
+    ## mac48-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac48AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## mac48-address.h (module 'network'): ns3::Mac48Address ns3::Mac48AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): std::string ns3::Mac48AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48AddressValue::Set(ns3::Mac48Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac48Address const &', 'value')])
+    return
+
 def register_Ns3MobilityModel_methods(root_module, cls):
     ## mobility-model.h (module 'mobility'): ns3::MobilityModel::MobilityModel(ns3::MobilityModel const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::MobilityModel const &', 'arg0')])
@@ -8269,6 +8423,7 @@
                         [])
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
@@ -8282,6 +8437,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def register_functions_ns3_internal(module, root_module):
     return
 
diff -Naur ns-3.23/src/uan/bindings/modulegen__gcc_LP64.py ns-3.24/src/uan/bindings/modulegen__gcc_LP64.py
--- ns-3.23/src/uan/bindings/modulegen__gcc_LP64.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/uan/bindings/modulegen__gcc_LP64.py	2015-09-15 11:18:44.000000000 -0700
@@ -66,6 +66,10 @@
     root_module['ns3::Ipv6Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix [class]
     module.add_class('Ipv6Prefix', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    module.add_class('Mac48Address', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    root_module['ns3::Mac48Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## net-device-container.h (module 'network'): ns3::NetDeviceContainer [class]
     module.add_class('NetDeviceContainer', import_from_module='ns.network')
     ## node-container.h (module 'network'): ns3::NodeContainer [class]
@@ -330,6 +334,10 @@
     module.add_class('Ipv6PrefixValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## random-variable-stream.h (module 'core'): ns3::LogNormalRandomVariable [class]
     module.add_class('LogNormalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker [class]
+    module.add_class('Mac48AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue [class]
+    module.add_class('Mac48AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## mobility-model.h (module 'mobility'): ns3::MobilityModel [class]
     module.add_class('MobilityModel', import_from_module='ns.mobility', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
@@ -418,6 +426,12 @@
     register_types_ns3_Hash(nested_module)
     
     
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
+    
     ## Register a nested module for the namespace internal
     
     nested_module = module.add_cpp_namespace('internal')
@@ -458,6 +472,37 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *', u'ns3::TracedValueCallback::Int8')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) **', u'ns3::TracedValueCallback::Int8*')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *&', u'ns3::TracedValueCallback::Int8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *', u'ns3::TracedValueCallback::Uint8')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) **', u'ns3::TracedValueCallback::Uint8*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *&', u'ns3::TracedValueCallback::Uint8&')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *', u'ns3::TracedValueCallback::Double')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) **', u'ns3::TracedValueCallback::Double*')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *&', u'ns3::TracedValueCallback::Double&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *', u'ns3::TracedValueCallback::Uint32')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) **', u'ns3::TracedValueCallback::Uint32*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *&', u'ns3::TracedValueCallback::Uint32&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *', u'ns3::TracedValueCallback::Bool')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) **', u'ns3::TracedValueCallback::Bool*')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *&', u'ns3::TracedValueCallback::Bool&')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *', u'ns3::TracedValueCallback::Int16')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) **', u'ns3::TracedValueCallback::Int16*')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *&', u'ns3::TracedValueCallback::Int16&')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *', u'ns3::TracedValueCallback::Int32')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) **', u'ns3::TracedValueCallback::Int32*')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *&', u'ns3::TracedValueCallback::Int32&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *', u'ns3::TracedValueCallback::Uint16')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) **', u'ns3::TracedValueCallback::Uint16*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *&', u'ns3::TracedValueCallback::Uint16&')
+
 def register_types_ns3_internal(module):
     root_module = module.get_root()
     
@@ -483,6 +528,7 @@
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
     register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
+    register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
     register_Ns3NetDeviceContainer_methods(root_module, root_module['ns3::NetDeviceContainer'])
     register_Ns3NodeContainer_methods(root_module, root_module['ns3::NodeContainer'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
@@ -604,6 +650,8 @@
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
     register_Ns3LogNormalRandomVariable_methods(root_module, root_module['ns3::LogNormalRandomVariable'])
+    register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
+    register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3MobilityModel_methods(root_module, root_module['ns3::MobilityModel'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
@@ -755,17 +803,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -787,11 +835,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -801,16 +844,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -1048,14 +1081,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -1116,11 +1153,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3DeviceEnergyModelContainer_methods(root_module, cls):
@@ -1738,6 +1770,78 @@
                    is_const=True)
     return
 
+def register_Ns3Mac48Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(ns3::Mac48Address const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetBroadcast() [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv4Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv4Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv6Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast6Prefix() [member function]
+    cls.add_method('GetMulticast6Prefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticastPrefix() [member function]
+    cls.add_method('GetMulticastPrefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsBroadcast() const [member function]
+    cls.add_method('IsBroadcast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsGroup() const [member function]
+    cls.add_method('IsGroup', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static bool ns3::Mac48Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
 def register_Ns3NetDeviceContainer_methods(root_module, cls):
     ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer(ns3::NetDeviceContainer const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDeviceContainer const &', 'arg0')])
@@ -2140,7 +2244,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -2292,10 +2396,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -4570,11 +4674,11 @@
                    'ns3::Ptr< ns3::UanChannel >', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## uan-phy.h (module 'uan'): ns3::Ptr<ns3::UanNetDevice> ns3::UanPhy::GetDevice() [member function]
+    ## uan-phy.h (module 'uan'): ns3::Ptr<ns3::UanNetDevice> ns3::UanPhy::GetDevice() const [member function]
     cls.add_method('GetDevice', 
                    'ns3::Ptr< ns3::UanNetDevice >', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## uan-phy.h (module 'uan'): ns3::UanTxMode ns3::UanPhy::GetMode(uint32_t n) [member function]
     cls.add_method('GetMode', 
                    'ns3::UanTxMode', 
@@ -4884,11 +4988,11 @@
                    'ns3::Ptr< ns3::UanChannel >', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## uan-phy-dual.h (module 'uan'): ns3::Ptr<ns3::UanNetDevice> ns3::UanPhyDual::GetDevice() [member function]
+    ## uan-phy-dual.h (module 'uan'): ns3::Ptr<ns3::UanNetDevice> ns3::UanPhyDual::GetDevice() const [member function]
     cls.add_method('GetDevice', 
                    'ns3::Ptr< ns3::UanNetDevice >', 
                    [], 
-                   is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## uan-phy-dual.h (module 'uan'): ns3::UanTxMode ns3::UanPhyDual::GetMode(uint32_t n) [member function]
     cls.add_method('GetMode', 
                    'ns3::UanTxMode', 
@@ -5218,11 +5322,11 @@
                    'ns3::UanModesList', 
                    [], 
                    is_static=True)
-    ## uan-phy-gen.h (module 'uan'): ns3::Ptr<ns3::UanNetDevice> ns3::UanPhyGen::GetDevice() [member function]
+    ## uan-phy-gen.h (module 'uan'): ns3::Ptr<ns3::UanNetDevice> ns3::UanPhyGen::GetDevice() const [member function]
     cls.add_method('GetDevice', 
                    'ns3::Ptr< ns3::UanNetDevice >', 
                    [], 
-                   is_virtual=True)
+                   is_const=True, is_virtual=True)
     ## uan-phy-gen.h (module 'uan'): ns3::UanTxMode ns3::UanPhyGen::GetMode(uint32_t n) [member function]
     cls.add_method('GetMode', 
                    'ns3::UanTxMode', 
@@ -5972,11 +6076,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -6193,10 +6307,10 @@
                    'double', 
                    [], 
                    is_virtual=True)
-    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double arg0, double arg1, double arg2, double arg3, double arg4) [member function]
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
     cls.add_method('Interpolate', 
                    'double', 
-                   [param('double', 'arg0'), param('double', 'arg1'), param('double', 'arg2'), param('double', 'arg3'), param('double', 'arg4')], 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
                    visibility='private', is_virtual=True)
     ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
     cls.add_method('Validate', 
@@ -6874,6 +6988,46 @@
                    is_virtual=True)
     return
 
+def register_Ns3Mac48AddressChecker_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker(ns3::Mac48AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac48AddressValue_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressValue const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'value')])
+    ## mac48-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac48AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## mac48-address.h (module 'network'): ns3::Mac48Address ns3::Mac48AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): std::string ns3::Mac48AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48AddressValue::Set(ns3::Mac48Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac48Address const &', 'value')])
+    return
+
 def register_Ns3MobilityModel_methods(root_module, cls):
     ## mobility-model.h (module 'mobility'): ns3::MobilityModel::MobilityModel(ns3::MobilityModel const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::MobilityModel const &', 'arg0')])
@@ -8269,6 +8423,7 @@
                         [])
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
@@ -8282,6 +8437,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def register_functions_ns3_internal(module, root_module):
     return
 
diff -Naur ns-3.23/src/uan/helper/uan-helper.cc ns-3.24/src/uan/helper/uan-helper.cc
--- ns-3.23/src/uan/helper/uan-helper.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/uan/helper/uan-helper.cc	2015-09-15 11:18:44.000000000 -0700
@@ -1,3 +1,4 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
  * uan-helper.cc
  *
diff -Naur ns-3.23/src/uan/helper/uan-helper.h ns-3.24/src/uan/helper/uan-helper.h
--- ns-3.23/src/uan/helper/uan-helper.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/uan/helper/uan-helper.h	2015-09-15 11:18:44.000000000 -0700
@@ -1,3 +1,4 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
  * Copyright (c) 2008 University of Washington
  *
diff -Naur ns-3.23/src/uan/model/acoustic-modem-energy-model.cc ns-3.24/src/uan/model/acoustic-modem-energy-model.cc
--- ns-3.23/src/uan/model/acoustic-modem-energy-model.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/uan/model/acoustic-modem-energy-model.cc	2015-09-15 11:18:44.000000000 -0700
@@ -66,7 +66,7 @@
     .AddTraceSource ("TotalEnergyConsumption",
                      "Total energy consumption of the modem device.",
                      MakeTraceSourceAccessor (&AcousticModemEnergyModel::m_totalEnergyConsumption),
-                     "ns3::TracedValue::DoubleCallback")
+                     "ns3::TracedValueCallback::Double")
   ;
   return tid;
 }
diff -Naur ns-3.23/src/uan/model/uan-mac-aloha.cc ns-3.24/src/uan/model/uan-mac-aloha.cc
--- ns-3.23/src/uan/model/uan-mac-aloha.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/uan/model/uan-mac-aloha.cc	2015-09-15 11:18:44.000000000 -0700
@@ -70,7 +70,7 @@
 UanMacAloha::GetTypeId (void)
 {
   static TypeId tid = TypeId ("ns3::UanMacAloha")
-    .SetParent<Object> ()
+    .SetParent<UanMac> ()
     .SetGroupName ("Uan")
     .AddConstructor<UanMacAloha> ()
   ;
diff -Naur ns-3.23/src/uan/model/uan-mac-cw.cc ns-3.24/src/uan/model/uan-mac-cw.cc
--- ns-3.23/src/uan/model/uan-mac-cw.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/uan/model/uan-mac-cw.cc	2015-09-15 11:18:44.000000000 -0700
@@ -77,7 +77,7 @@
 UanMacCw::GetTypeId (void)
 {
   static TypeId tid = TypeId ("ns3::UanMacCw")
-    .SetParent<Object> ()
+    .SetParent<UanMac> ()
     .SetGroupName ("Uan")
     .AddConstructor<UanMacCw> ()
     .AddAttribute ("CW",
diff -Naur ns-3.23/src/uan/model/uan-mac-cw.h ns-3.24/src/uan/model/uan-mac-cw.h
--- ns-3.23/src/uan/model/uan-mac-cw.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/uan/model/uan-mac-cw.h	2015-09-15 11:18:44.000000000 -0700
@@ -107,7 +107,7 @@
    * \param [in] proto The protocol number.
    */
   typedef void (* QueueTracedCallback)
-    (const Ptr<const Packet> packet, const uint16_t proto);
+    (Ptr<const Packet> packet, uint16_t proto);
 
 private:
   /** Enum defining possible Phy states. */
diff -Naur ns-3.23/src/uan/model/uan-mac.h ns-3.24/src/uan/model/uan-mac.h
--- ns-3.23/src/uan/model/uan-mac.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/uan/model/uan-mac.h	2015-09-15 11:18:44.000000000 -0700
@@ -123,7 +123,7 @@
    * \param [in] mode The UanTxMode.
    */
   typedef void (* PacketModeTracedCallback)
-    (const Ptr<const Packet> packet, const UanTxMode & mode);
+    (Ptr<const Packet> packet, UanTxMode mode);
 
 };  // class UanMac
 
diff -Naur ns-3.23/src/uan/model/uan-mac-rc.cc ns-3.24/src/uan/model/uan-mac-rc.cc
--- ns-3.23/src/uan/model/uan-mac-rc.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/uan/model/uan-mac-rc.cc	2015-09-15 11:18:44.000000000 -0700
@@ -254,11 +254,11 @@
     .AddTraceSource ("Enqueue",
                      "A  (data) packet arrived at MAC for transmission.",
                      MakeTraceSourceAccessor (&UanMacRc::m_enqueueLogger),
-                     "ns3::UanMac::PacketModeTracedCallback")
+                     "ns3::UanMacRc::QueueTracedCallback")
     .AddTraceSource ("Dequeue",
                      "A  (data) packet was passed down to PHY from MAC.",
                      MakeTraceSourceAccessor (&UanMacRc::m_dequeueLogger),
-                     "ns3::UanMac::PacketModeTracedCallback")
+                     "ns3::UanMacRc::QueueTracedCallback")
     .AddTraceSource ("RX",
                      "A packet was destined for and received at this MAC layer.",
                      MakeTraceSourceAccessor (&UanMacRc::m_rxLogger),
diff -Naur ns-3.23/src/uan/model/uan-mac-rc-gw.h ns-3.24/src/uan/model/uan-mac-rc-gw.h
--- ns-3.23/src/uan/model/uan-mac-rc-gw.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/uan/model/uan-mac-rc-gw.h	2015-09-15 11:18:44.000000000 -0700
@@ -89,10 +89,8 @@
    * \param [in] actualX Current retry rate.
    */
   typedef void (* CycleCallback)
-    (const Time now, const Time delay,
-     const uint32_t numRts, const uint32_t totalBytes,
-     const double secs, const uint32_t ctlRate,
-     const double actualX);
+    (Time now, Time delay, uint32_t numRts, uint32_t totalBytes,
+     double secs, uint32_t ctlRate, double actualX);
 
   
 private:
diff -Naur ns-3.23/src/uan/model/uan-mac-rc.h ns-3.24/src/uan/model/uan-mac-rc.h
--- ns-3.23/src/uan/model/uan-mac-rc.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/uan/model/uan-mac-rc.h	2015-09-15 11:18:44.000000000 -0700
@@ -192,6 +192,15 @@
   virtual void Clear (void);
   int64_t AssignStreams (int64_t stream);
 
+  /**
+   *  TracedCallback signature for dequeue of a packet.
+   *
+   * \param [in] packet The Packet being received.
+   * \param [in] proto The protocol number.
+   */
+  typedef void (* QueueTracedCallback)
+    (Ptr<const Packet> packet, uint32_t proto);
+  
 private:
   /** MAC state. */
   enum State {
@@ -235,11 +244,11 @@
   Callback<void, Ptr<Packet>, const UanAddress& > m_forwardUpCb;
 
   /** A packet was destined for and received at this MAC layer. */
-  TracedCallback<Ptr<const Packet>, UanTxMode &> m_rxLogger;
+  TracedCallback<Ptr<const Packet>, UanTxMode > m_rxLogger;
   /** A packet arrived at the MAC for transmission. */
-  TracedCallback<Ptr<const Packet>, uint16_t > m_enqueueLogger;
+  TracedCallback<Ptr<const Packet>, uint32_t > m_enqueueLogger;
   /** A was passed down to the PHY from the MAC. */
-  TracedCallback<Ptr<const Packet>, uint16_t > m_dequeueLogger;
+  TracedCallback<Ptr<const Packet>, uint32_t > m_dequeueLogger;
 
   /** The RTS event. */
   EventId m_rtsEvent;
diff -Naur ns-3.23/src/uan/model/uan-net-device.h ns-3.24/src/uan/model/uan-net-device.h
--- ns-3.23/src/uan/model/uan-net-device.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/uan/model/uan-net-device.h	2015-09-15 11:18:44.000000000 -0700
@@ -154,7 +154,7 @@
    * \param [in] address The source address.
    */
   typedef void (* RxTxTracedCallback)
-    (const Ptr<const Packet> packet, const UanAddress address);
+    (Ptr<const Packet> packet, UanAddress address);
   
 private:
   /**
diff -Naur ns-3.23/src/uan/model/uan-noise-model-default.cc ns-3.24/src/uan/model/uan-noise-model-default.cc
--- ns-3.23/src/uan/model/uan-noise-model-default.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/uan/model/uan-noise-model-default.cc	2015-09-15 11:18:44.000000000 -0700
@@ -40,7 +40,7 @@
 UanNoiseModelDefault::GetTypeId (void)
 {
   static TypeId tid = TypeId ("ns3::UanNoiseModelDefault")
-    .SetParent<Object> ()
+    .SetParent<UanNoiseModel> ()
     .SetGroupName ("Uan")
     .AddConstructor<UanNoiseModelDefault> ()
     .AddAttribute ("Wind", "Wind speed in m/s.",
diff -Naur ns-3.23/src/uan/model/uan-phy-dual.cc ns-3.24/src/uan/model/uan-phy-dual.cc
--- ns-3.23/src/uan/model/uan-phy-dual.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/uan/model/uan-phy-dual.cc	2015-09-15 11:18:44.000000000 -0700
@@ -58,7 +58,7 @@
 UanPhyCalcSinrDual::GetTypeId (void)
 {
   static TypeId tid = TypeId ("ns3::UanPhyCalcSinrDual")
-    .SetParent<Object> ()
+    .SetParent<UanPhyCalcSinr> ()
     .SetGroupName ("Uan")
     .AddConstructor<UanPhyCalcSinrDual> ()
   ;
@@ -498,7 +498,7 @@
   return m_phy1->GetChannel ();
 }
 Ptr<UanNetDevice>
-UanPhyDual::GetDevice (void)
+UanPhyDual::GetDevice (void) const
 {
   return m_phy1->GetDevice ();
 }
diff -Naur ns-3.23/src/uan/model/uan-phy-dual.h ns-3.24/src/uan/model/uan-phy-dual.h
--- ns-3.23/src/uan/model/uan-phy-dual.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/uan/model/uan-phy-dual.h	2015-09-15 11:18:44.000000000 -0700
@@ -126,7 +126,7 @@
   virtual bool IsStateTx (void);
   virtual bool IsStateCcaBusy (void);
   virtual Ptr<UanChannel> GetChannel (void) const;
-  virtual Ptr<UanNetDevice> GetDevice (void);
+  virtual Ptr<UanNetDevice> GetDevice (void) const;
   virtual void SetChannel (Ptr<UanChannel> channel);
   virtual void SetDevice (Ptr<UanNetDevice> device);
   virtual void SetMac (Ptr<UanMac> mac);
diff -Naur ns-3.23/src/uan/model/uan-phy-gen.cc ns-3.24/src/uan/model/uan-phy-gen.cc
--- ns-3.23/src/uan/model/uan-phy-gen.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/uan/model/uan-phy-gen.cc	2015-09-15 11:18:44.000000000 -0700
@@ -62,7 +62,7 @@
 UanPhyCalcSinrDefault::GetTypeId (void)
 {
   static TypeId tid = TypeId ("ns3::UanPhyCalcSinrDefault")
-    .SetParent<Object> ()
+    .SetParent<UanPhyCalcSinr> ()
     .SetGroupName ("Uan")
     .AddConstructor<UanPhyCalcSinrDefault> ()
   ;
@@ -110,7 +110,7 @@
 UanPhyCalcSinrFhFsk::GetTypeId (void)
 {
   static TypeId tid = TypeId ("ns3::UanPhyCalcSinrFhFsk")
-    .SetParent<Object> ()
+    .SetParent<UanPhyCalcSinr> ()
     .SetGroupName ("Uan")
     .AddConstructor<UanPhyCalcSinrFhFsk> ()
     .AddAttribute ("NumberOfHops",
@@ -217,7 +217,7 @@
 UanPhyPerGenDefault::GetTypeId (void)
 {
   static TypeId tid = TypeId ("ns3::UanPhyPerGenDefault")
-    .SetParent<Object> ()
+    .SetParent<UanPhyPer> ()
     .SetGroupName ("Uan")
     .AddConstructor<UanPhyPerGenDefault> ()
     .AddAttribute ("Threshold", "SINR cutoff for good packet reception.",
@@ -256,7 +256,7 @@
 TypeId UanPhyPerUmodem::GetTypeId (void)
 {
   static TypeId tid = TypeId ("ns3::UanPhyPerUmodem")
-    .SetParent<Object> ()
+    .SetParent<UanPhyPer> ()
     .SetGroupName ("Uan")
     .AddConstructor<UanPhyPerUmodem> ()
   ;
@@ -809,7 +809,7 @@
 }
 
 Ptr<UanNetDevice>
-UanPhyGen::GetDevice (void)
+UanPhyGen::GetDevice (void) const
 {
   return m_device;
 }
diff -Naur ns-3.23/src/uan/model/uan-phy-gen.h ns-3.24/src/uan/model/uan-phy-gen.h
--- ns-3.23/src/uan/model/uan-phy-gen.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/uan/model/uan-phy-gen.h	2015-09-15 11:18:44.000000000 -0700
@@ -260,7 +260,7 @@
   virtual double GetRxThresholdDb (void);
   virtual double GetCcaThresholdDb (void);
   virtual Ptr<UanChannel> GetChannel (void) const;
-  virtual Ptr<UanNetDevice> GetDevice (void);
+  virtual Ptr<UanNetDevice> GetDevice (void) const;
   virtual Ptr<UanTransducer> GetTransducer (void);
   virtual void SetChannel (Ptr<UanChannel> channel);
   virtual void SetDevice (Ptr<UanNetDevice> device);
diff -Naur ns-3.23/src/uan/model/uan-phy.h ns-3.24/src/uan/model/uan-phy.h
--- ns-3.23/src/uan/model/uan-phy.h	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/uan/model/uan-phy.h	2015-09-15 11:18:44.000000000 -0700
@@ -210,7 +210,7 @@
    * \param [in] mode The channel mode.
    */
   typedef void (* TracedCallback)
-    (const Ptr<const Packet> pkt, const double sinr, const UanTxMode mode);
+    (Ptr<const Packet> pkt, double sinr, UanTxMode mode);
 
   
   /**
@@ -345,7 +345,7 @@
    *
    * \return The net device.
    */
-  virtual Ptr<UanNetDevice> GetDevice (void) = 0;
+  virtual Ptr<UanNetDevice> GetDevice (void) const = 0;
 
   /**
    * Attach to a channel.
diff -Naur ns-3.23/src/uan/model/uan-prop-model-thorp.cc ns-3.24/src/uan/model/uan-prop-model-thorp.cc
--- ns-3.23/src/uan/model/uan-prop-model-thorp.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/uan/model/uan-prop-model-thorp.cc	2015-09-15 11:18:44.000000000 -0700
@@ -40,7 +40,7 @@
 UanPropModelThorp::GetTypeId (void)
 {
   static TypeId tid = TypeId ("ns3::UanPropModelThorp")
-    .SetParent<Object> ()
+    .SetParent<UanPropModel> ()
     .SetGroupName ("Uan")
     .AddConstructor<UanPropModelThorp> ()
     .AddAttribute ("SpreadCoef",
diff -Naur ns-3.23/src/uan/model/uan-transducer-hd.cc ns-3.24/src/uan/model/uan-transducer-hd.cc
--- ns-3.23/src/uan/model/uan-transducer-hd.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/uan/model/uan-transducer-hd.cc	2015-09-15 11:18:44.000000000 -0700
@@ -88,7 +88,7 @@
 UanTransducerHd::GetTypeId ()
 {
   static TypeId tid = TypeId ("ns3::UanTransducerHd")
-    .SetParent<Object> ()
+    .SetParent<UanTransducer> ()
     .SetGroupName ("Uan")
     .AddConstructor<UanTransducerHd> ()
   ;
diff -Naur ns-3.23/src/uan/wscript ns-3.24/src/uan/wscript
--- ns-3.23/src/uan/wscript	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/uan/wscript	2015-09-15 11:18:44.000000000 -0700
@@ -1,7 +1,7 @@
 ## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
 
 def build(bld):
-    module = bld.create_ns3_module('uan', ['network', 'energy'])
+    module = bld.create_ns3_module('uan', ['network', 'energy', 'mobility'])
     module.source = [
         'model/uan-channel.cc',
         'model/uan-phy-gen.cc',
diff -Naur ns-3.23/src/virtual-net-device/bindings/modulegen__gcc_ILP32.py ns-3.24/src/virtual-net-device/bindings/modulegen__gcc_ILP32.py
--- ns-3.23/src/virtual-net-device/bindings/modulegen__gcc_ILP32.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/virtual-net-device/bindings/modulegen__gcc_ILP32.py	2015-09-15 11:18:44.000000000 -0700
@@ -58,6 +58,10 @@
     root_module['ns3::Ipv6Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix [class]
     module.add_class('Ipv6Prefix', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    module.add_class('Mac48Address', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    root_module['ns3::Mac48Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## object-base.h (module 'core'): ns3::ObjectBase [class]
     module.add_class('ObjectBase', allow_subclassing=True, import_from_module='ns.core')
     ## object.h (module 'core'): ns3::ObjectDeleter [struct]
@@ -154,6 +158,10 @@
     module.add_class('Ipv6PrefixChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue [class]
     module.add_class('Ipv6PrefixValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker [class]
+    module.add_class('Mac48AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue [class]
+    module.add_class('Mac48AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
     module.add_class('NetDevice', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice::PacketType [enumeration]
@@ -238,6 +246,7 @@
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
     register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
+    register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
     register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
     register_Ns3PacketMetadata_methods(root_module, root_module['ns3::PacketMetadata'])
@@ -283,6 +292,8 @@
     register_Ns3Ipv6AddressValue_methods(root_module, root_module['ns3::Ipv6AddressValue'])
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
+    register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
+    register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
@@ -417,17 +428,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -449,11 +460,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -463,16 +469,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -710,14 +706,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -778,11 +778,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3Hasher_methods(root_module, cls):
@@ -1242,6 +1237,78 @@
                    is_const=True)
     return
 
+def register_Ns3Mac48Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(ns3::Mac48Address const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetBroadcast() [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv4Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv4Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv6Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast6Prefix() [member function]
+    cls.add_method('GetMulticast6Prefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticastPrefix() [member function]
+    cls.add_method('GetMulticastPrefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsBroadcast() const [member function]
+    cls.add_method('IsBroadcast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsGroup() const [member function]
+    cls.add_method('IsGroup', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static bool ns3::Mac48Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
 def register_Ns3ObjectBase_methods(root_module, cls):
     ## object-base.h (module 'core'): ns3::ObjectBase::ObjectBase() [constructor]
     cls.add_constructor([])
@@ -1499,7 +1566,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -2205,11 +2272,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -2422,6 +2499,46 @@
                    [param('ns3::Ipv6Prefix const &', 'value')])
     return
 
+def register_Ns3Mac48AddressChecker_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker(ns3::Mac48AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac48AddressValue_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressValue const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'value')])
+    ## mac48-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac48AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## mac48-address.h (module 'network'): ns3::Mac48Address ns3::Mac48AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): std::string ns3::Mac48AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48AddressValue::Set(ns3::Mac48Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac48Address const &', 'value')])
+    return
+
 def register_Ns3NetDevice_methods(root_module, cls):
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
     cls.add_constructor([])
diff -Naur ns-3.23/src/virtual-net-device/bindings/modulegen__gcc_LP64.py ns-3.24/src/virtual-net-device/bindings/modulegen__gcc_LP64.py
--- ns-3.23/src/virtual-net-device/bindings/modulegen__gcc_LP64.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/virtual-net-device/bindings/modulegen__gcc_LP64.py	2015-09-15 11:18:44.000000000 -0700
@@ -58,6 +58,10 @@
     root_module['ns3::Ipv6Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix [class]
     module.add_class('Ipv6Prefix', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    module.add_class('Mac48Address', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    root_module['ns3::Mac48Address'].implicitly_converts_to(root_module['ns3::Address'])
     ## object-base.h (module 'core'): ns3::ObjectBase [class]
     module.add_class('ObjectBase', allow_subclassing=True, import_from_module='ns.core')
     ## object.h (module 'core'): ns3::ObjectDeleter [struct]
@@ -154,6 +158,10 @@
     module.add_class('Ipv6PrefixChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue [class]
     module.add_class('Ipv6PrefixValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker [class]
+    module.add_class('Mac48AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue [class]
+    module.add_class('Mac48AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
     module.add_class('NetDevice', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice::PacketType [enumeration]
@@ -238,6 +246,7 @@
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
     register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
+    register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
     register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
     register_Ns3PacketMetadata_methods(root_module, root_module['ns3::PacketMetadata'])
@@ -283,6 +292,8 @@
     register_Ns3Ipv6AddressValue_methods(root_module, root_module['ns3::Ipv6AddressValue'])
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
+    register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
+    register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
@@ -417,17 +428,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -449,11 +460,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -463,16 +469,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -710,14 +706,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -778,11 +778,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3Hasher_methods(root_module, cls):
@@ -1242,6 +1237,78 @@
                    is_const=True)
     return
 
+def register_Ns3Mac48Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(ns3::Mac48Address const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetBroadcast() [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv4Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv4Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv6Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast6Prefix() [member function]
+    cls.add_method('GetMulticast6Prefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticastPrefix() [member function]
+    cls.add_method('GetMulticastPrefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsBroadcast() const [member function]
+    cls.add_method('IsBroadcast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsGroup() const [member function]
+    cls.add_method('IsGroup', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static bool ns3::Mac48Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
 def register_Ns3ObjectBase_methods(root_module, cls):
     ## object-base.h (module 'core'): ns3::ObjectBase::ObjectBase() [constructor]
     cls.add_constructor([])
@@ -1499,7 +1566,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -2205,11 +2272,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -2422,6 +2499,46 @@
                    [param('ns3::Ipv6Prefix const &', 'value')])
     return
 
+def register_Ns3Mac48AddressChecker_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker(ns3::Mac48AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac48AddressValue_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressValue const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'value')])
+    ## mac48-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac48AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## mac48-address.h (module 'network'): ns3::Mac48Address ns3::Mac48AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): std::string ns3::Mac48AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48AddressValue::Set(ns3::Mac48Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac48Address const &', 'value')])
+    return
+
 def register_Ns3NetDevice_methods(root_module, cls):
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
     cls.add_constructor([])
diff -Naur ns-3.23/src/visualizer/bindings/modulegen__gcc_ILP32.py ns-3.24/src/visualizer/bindings/modulegen__gcc_ILP32.py
--- ns-3.23/src/visualizer/bindings/modulegen__gcc_ILP32.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/visualizer/bindings/modulegen__gcc_ILP32.py	2015-09-15 11:18:44.000000000 -0700
@@ -130,6 +130,8 @@
     module.add_class('Tag', import_from_module='ns.network', parent=root_module['ns3::ObjectBase'])
     ## tag-buffer.h (module 'network'): ns3::TagBuffer [class]
     module.add_class('TagBuffer', import_from_module='ns.network')
+    ## nstime.h (module 'core'): ns3::TimeWithUnit [class]
+    module.add_class('TimeWithUnit', import_from_module='ns.core')
     ## type-id.h (module 'core'): ns3::TypeId [class]
     module.add_class('TypeId', import_from_module='ns.core')
     ## type-id.h (module 'core'): ns3::TypeId::AttributeFlag [enumeration]
@@ -142,6 +144,8 @@
     module.add_class('empty', import_from_module='ns.core')
     ## int64x64-double.h (module 'core'): ns3::int64x64_t [class]
     module.add_class('int64x64_t', import_from_module='ns.core')
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::impl_type [enumeration]
+    module.add_enum('impl_type', ['int128_impl', 'cairo_impl', 'ld_impl'], outer_class=root_module['ns3::int64x64_t'], import_from_module='ns.core')
     ## chunk.h (module 'network'): ns3::Chunk [class]
     module.add_class('Chunk', import_from_module='ns.network', parent=root_module['ns3::ObjectBase'])
     ## header.h (module 'network'): ns3::Header [class]
@@ -284,17 +288,17 @@
     module.add_class('AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## address.h (module 'network'): ns3::AddressValue [class]
     module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
-    module.add_container('std::vector< ns3::PyViz::RxPacketSample >', 'ns3::PyViz::RxPacketSample', container_type='vector')
-    module.add_container('std::vector< ns3::PyViz::TxPacketSample >', 'ns3::PyViz::TxPacketSample', container_type='vector')
-    module.add_container('std::vector< ns3::PyViz::PacketSample >', 'ns3::PyViz::PacketSample', container_type='vector')
-    module.add_container('std::set< ns3::TypeId >', 'ns3::TypeId', container_type='set')
-    module.add_container('std::vector< ns3::PyViz::TransmissionSample >', 'ns3::PyViz::TransmissionSample', container_type='vector')
-    module.add_container('std::vector< ns3::PyViz::PacketDropSample >', 'ns3::PyViz::PacketDropSample', container_type='vector')
-    module.add_container('std::vector< ns3::PyViz::NetDeviceStatistics >', 'ns3::PyViz::NetDeviceStatistics', container_type='vector')
-    module.add_container('std::vector< std::string >', 'std::string', container_type='vector')
-    module.add_container('std::set< unsigned int >', 'unsigned int', container_type='set')
-    module.add_container('std::vector< ns3::PyViz::NodeStatistics >', 'ns3::PyViz::NodeStatistics', container_type='vector')
-    module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type='map')
+    module.add_container('std::vector< ns3::PyViz::RxPacketSample >', 'ns3::PyViz::RxPacketSample', container_type=u'vector')
+    module.add_container('std::vector< ns3::PyViz::TxPacketSample >', 'ns3::PyViz::TxPacketSample', container_type=u'vector')
+    module.add_container('std::vector< ns3::PyViz::PacketSample >', 'ns3::PyViz::PacketSample', container_type=u'vector')
+    module.add_container('std::set< ns3::TypeId >', 'ns3::TypeId', container_type=u'set')
+    module.add_container('std::vector< ns3::PyViz::TransmissionSample >', 'ns3::PyViz::TransmissionSample', container_type=u'vector')
+    module.add_container('std::vector< ns3::PyViz::PacketDropSample >', 'ns3::PyViz::PacketDropSample', container_type=u'vector')
+    module.add_container('std::vector< ns3::PyViz::NetDeviceStatistics >', 'ns3::PyViz::NetDeviceStatistics', container_type=u'vector')
+    module.add_container('std::vector< std::string >', 'std::string', container_type=u'vector')
+    module.add_container('std::set< unsigned int >', 'unsigned int', container_type=u'set')
+    module.add_container('std::vector< ns3::PyViz::NodeStatistics >', 'ns3::PyViz::NodeStatistics', container_type=u'vector')
+    module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type=u'map')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -307,6 +311,12 @@
     nested_module = module.add_cpp_namespace('Hash')
     register_types_ns3_Hash(nested_module)
     
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -317,12 +327,12 @@
     
     ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
     module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
-    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
-    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
-    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
-    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
-    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
-    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    typehandlers.add_type_alias(u'uint32_t ( * ) ( char const *, size_t ) *', u'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias(u'uint32_t ( * ) ( char const *, size_t ) **', u'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias(u'uint32_t ( * ) ( char const *, size_t ) *&', u'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias(u'uint64_t ( * ) ( char const *, size_t ) *', u'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias(u'uint64_t ( * ) ( char const *, size_t ) **', u'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias(u'uint64_t ( * ) ( char const *, size_t ) *&', u'ns3::Hash::Hash64Function_ptr&')
     
     ## Register a nested module for the namespace Function
     
@@ -342,6 +352,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -388,6 +405,7 @@
     register_Ns3Simulator_methods(root_module, root_module['ns3::Simulator'])
     register_Ns3Tag_methods(root_module, root_module['ns3::Tag'])
     register_Ns3TagBuffer_methods(root_module, root_module['ns3::TagBuffer'])
+    register_Ns3TimeWithUnit_methods(root_module, root_module['ns3::TimeWithUnit'])
     register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
     register_Ns3TypeIdAttributeInformation_methods(root_module, root_module['ns3::TypeId::AttributeInformation'])
     register_Ns3TypeIdTraceSourceInformation_methods(root_module, root_module['ns3::TypeId::TraceSourceInformation'])
@@ -581,17 +599,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -613,11 +631,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -627,16 +640,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -708,6 +711,10 @@
     cls.add_method('Next', 
                    'void', 
                    [param('uint32_t', 'delta')])
+    ## buffer.h (module 'network'): uint8_t ns3::Buffer::Iterator::PeekU8() [member function]
+    cls.add_method('PeekU8', 
+                   'uint8_t', 
+                   [])
     ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Prev() [member function]
     cls.add_method('Prev', 
                    'void', 
@@ -720,6 +727,10 @@
     cls.add_method('Read', 
                    'void', 
                    [param('uint8_t *', 'buffer'), param('uint32_t', 'size')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Read(ns3::Buffer::Iterator start, uint32_t size) [member function]
+    cls.add_method('Read', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start'), param('uint32_t', 'size')])
     ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::ReadLsbtohU16() [member function]
     cls.add_method('ReadLsbtohU16', 
                    'uint16_t', 
@@ -866,14 +877,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -934,11 +949,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3EventId_methods(root_module, cls):
@@ -1672,10 +1682,10 @@
                    'void', 
                    [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
-    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & attribute) const [member function]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -1955,7 +1965,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -2226,10 +2236,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -2328,6 +2338,14 @@
                    [param('uint8_t', 'v')])
     return
 
+def register_Ns3TimeWithUnit_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## nstime.h (module 'core'): ns3::TimeWithUnit::TimeWithUnit(ns3::TimeWithUnit const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::TimeWithUnit const &', 'arg0')])
+    ## nstime.h (module 'core'): ns3::TimeWithUnit::TimeWithUnit(ns3::Time const time, ns3::Time::Unit const unit) [constructor]
+    cls.add_constructor([param('ns3::Time const', 'time'), param('ns3::Time::Unit const', 'unit')])
+    return
+
 def register_Ns3TypeId_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -2350,7 +2368,12 @@
     ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor) [member function]
     cls.add_method('AddTraceSource', 
                    'ns3::TypeId', 
-                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2401,6 +2424,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation ns3::TypeId::GetTraceSource(uint32_t i) const [member function]
     cls.add_method('GetTraceSource', 
                    'ns3::TypeId::TraceSourceInformation', 
@@ -2477,6 +2505,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -2511,6 +2543,8 @@
     cls.add_constructor([param('ns3::TypeId::TraceSourceInformation const &', 'arg0')])
     ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::accessor [variable]
     cls.add_instance_attribute('accessor', 'ns3::Ptr< ns3::TraceSourceAccessor const >', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', is_const=False)
     ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::help [variable]
     cls.add_instance_attribute('help', 'std::string', is_const=False)
     ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::name [variable]
@@ -2525,62 +2559,18 @@
     return
 
 def register_Ns3Int64x64_t_methods(root_module, cls):
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned char const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long int const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long int const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('int const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short int const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('signed char const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('double const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned char const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long int const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long int const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('int const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short int const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('signed char const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('double const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned char const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('signed char const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('double const', 'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
     cls.add_unary_numeric_operator('-')
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned char const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long int const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long int const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('int const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short int const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('signed char const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('double const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', 'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('>')
     cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('*=', param('ns3::int64x64_t const &', 'right'))
-    cls.add_inplace_numeric_operator('+=', param('ns3::int64x64_t const &', 'right'))
-    cls.add_inplace_numeric_operator('-=', param('ns3::int64x64_t const &', 'right'))
-    cls.add_inplace_numeric_operator('/=', param('ns3::int64x64_t const &', 'right'))
+    cls.add_inplace_numeric_operator('*=', param('ns3::int64x64_t const &', u'right'))
+    cls.add_inplace_numeric_operator('+=', param('ns3::int64x64_t const &', u'right'))
+    cls.add_inplace_numeric_operator('-=', param('ns3::int64x64_t const &', u'right'))
+    cls.add_inplace_numeric_operator('/=', param('ns3::int64x64_t const &', u'right'))
     cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('==')
@@ -2589,6 +2579,8 @@
     cls.add_constructor([])
     ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(double v) [constructor]
     cls.add_constructor([param('double', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long double v) [constructor]
+    cls.add_constructor([param('long double', 'v')])
     ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(int v) [constructor]
     cls.add_constructor([param('int', 'v')])
     ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long int v) [constructor]
@@ -2629,6 +2621,8 @@
     cls.add_method('MulByInvert', 
                    'void', 
                    [param('ns3::int64x64_t const &', 'o')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::implementation [variable]
+    cls.add_static_attribute('implementation', 'ns3::int64x64_t::impl_type const', is_const=True)
     return
 
 def register_Ns3Chunk_methods(root_module, cls):
@@ -3680,13 +3674,15 @@
     return
 
 def register_Ns3Time_methods(root_module, cls):
-    cls.add_binary_numeric_operator('+', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', 'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::Time'], root_module['ns3::Time'], param('int64_t const &', u'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', u'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', u'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::Time'], root_module['ns3::Time'], param('int64_t const &', u'right'))
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('>')
     cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('+=', param('ns3::Time const &', 'right'))
-    cls.add_inplace_numeric_operator('-=', param('ns3::Time const &', 'right'))
+    cls.add_inplace_numeric_operator('+=', param('ns3::Time const &', u'right'))
+    cls.add_inplace_numeric_operator('-=', param('ns3::Time const &', u'right'))
     cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('==')
@@ -3709,34 +3705,39 @@
     cls.add_constructor([param('long unsigned int', 'v')])
     ## nstime.h (module 'core'): ns3::Time::Time(long long unsigned int v) [constructor]
     cls.add_constructor([param('long long unsigned int', 'v')])
+    ## nstime.h (module 'core'): ns3::Time::Time(ns3::int64x64_t const & v) [constructor]
+    cls.add_constructor([param('ns3::int64x64_t const &', 'v')])
     ## nstime.h (module 'core'): ns3::Time::Time(std::string const & s) [constructor]
     cls.add_constructor([param('std::string const &', 's')])
-    ## nstime.h (module 'core'): ns3::Time::Time(ns3::int64x64_t const & value) [constructor]
-    cls.add_constructor([param('ns3::int64x64_t const &', 'value')])
+    ## nstime.h (module 'core'): ns3::TimeWithUnit ns3::Time::As(ns3::Time::Unit const unit) const [member function]
+    cls.add_method('As', 
+                   'ns3::TimeWithUnit', 
+                   [param('ns3::Time::Unit const', 'unit')], 
+                   is_const=True)
     ## nstime.h (module 'core'): int ns3::Time::Compare(ns3::Time const & o) const [member function]
     cls.add_method('Compare', 
                    'int', 
                    [param('ns3::Time const &', 'o')], 
                    is_const=True)
-    ## nstime.h (module 'core'): static ns3::Time ns3::Time::From(ns3::int64x64_t const & from, ns3::Time::Unit timeUnit) [member function]
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::From(ns3::int64x64_t const & value) [member function]
     cls.add_method('From', 
                    'ns3::Time', 
-                   [param('ns3::int64x64_t const &', 'from'), param('ns3::Time::Unit', 'timeUnit')], 
+                   [param('ns3::int64x64_t const &', 'value')], 
                    is_static=True)
-    ## nstime.h (module 'core'): static ns3::Time ns3::Time::From(ns3::int64x64_t const & value) [member function]
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::From(ns3::int64x64_t const & value, ns3::Time::Unit unit) [member function]
     cls.add_method('From', 
                    'ns3::Time', 
-                   [param('ns3::int64x64_t const &', 'value')], 
+                   [param('ns3::int64x64_t const &', 'value'), param('ns3::Time::Unit', 'unit')], 
                    is_static=True)
-    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromDouble(double value, ns3::Time::Unit timeUnit) [member function]
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromDouble(double value, ns3::Time::Unit unit) [member function]
     cls.add_method('FromDouble', 
                    'ns3::Time', 
-                   [param('double', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
+                   [param('double', 'value'), param('ns3::Time::Unit', 'unit')], 
                    is_static=True)
-    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromInteger(uint64_t value, ns3::Time::Unit timeUnit) [member function]
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromInteger(uint64_t value, ns3::Time::Unit unit) [member function]
     cls.add_method('FromInteger', 
                    'ns3::Time', 
-                   [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
+                   [param('uint64_t', 'value'), param('ns3::Time::Unit', 'unit')], 
                    is_static=True)
     ## nstime.h (module 'core'): double ns3::Time::GetDays() const [member function]
     cls.add_method('GetDays', 
@@ -3853,20 +3854,20 @@
                    'bool', 
                    [], 
                    is_static=True)
-    ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
+    ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit unit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
-                   [param('ns3::Time::Unit', 'timeUnit')], 
+                   [param('ns3::Time::Unit', 'unit')], 
                    is_const=True)
-    ## nstime.h (module 'core'): double ns3::Time::ToDouble(ns3::Time::Unit timeUnit) const [member function]
+    ## nstime.h (module 'core'): double ns3::Time::ToDouble(ns3::Time::Unit unit) const [member function]
     cls.add_method('ToDouble', 
                    'double', 
-                   [param('ns3::Time::Unit', 'timeUnit')], 
+                   [param('ns3::Time::Unit', 'unit')], 
                    is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::ToInteger(ns3::Time::Unit timeUnit) const [member function]
+    ## nstime.h (module 'core'): int64_t ns3::Time::ToInteger(ns3::Time::Unit unit) const [member function]
     cls.add_method('ToInteger', 
                    'int64_t', 
-                   [param('ns3::Time::Unit', 'timeUnit')], 
+                   [param('ns3::Time::Unit', 'unit')], 
                    is_const=True)
     return
 
@@ -4033,11 +4034,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -4463,6 +4474,11 @@
                    'bool', 
                    [param('uint32_t', 'i')], 
                    is_const=True, is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::IsUnicast(ns3::Ipv4Address ad) const [member function]
+    cls.add_method('IsUnicast', 
+                   'bool', 
+                   [param('ns3::Ipv4Address', 'ad')], 
+                   is_const=True)
     ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::IsUp(uint32_t i) const [member function]
     cls.add_method('IsUp', 
                    'bool', 
@@ -4623,11 +4639,6 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## ipv4-route.h (module 'internet'): uint32_t ns3::Ipv4MulticastRoute::GetOutputTtl(uint32_t oif) [member function]
-    cls.add_method('GetOutputTtl', 
-                   'uint32_t', 
-                   [param('uint32_t', 'oif')], 
-                   deprecated=True)
     ## ipv4-route.h (module 'internet'): std::map<unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > > ns3::Ipv4MulticastRoute::GetOutputTtlMap() const [member function]
     cls.add_method('GetOutputTtlMap', 
                    'std::map< unsigned int, unsigned int >', 
@@ -5296,11 +5307,6 @@
                    'uint64_t', 
                    [], 
                    is_const=True)
-    ## packet.h (module 'network'): uint8_t const * ns3::Packet::PeekData() const [member function]
-    cls.add_method('PeekData', 
-                   'uint8_t const *', 
-                   [], 
-                   deprecated=True, is_const=True)
     ## packet.h (module 'network'): uint32_t ns3::Packet::PeekHeader(ns3::Header & header) const [member function]
     cls.add_method('PeekHeader', 
                    'uint32_t', 
@@ -5367,10 +5373,15 @@
                    'uint32_t', 
                    [param('uint8_t *', 'buffer'), param('uint32_t', 'maxSize')], 
                    is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::SetNixVector(ns3::Ptr<ns3::NixVector> arg0) [member function]
+    ## packet.h (module 'network'): void ns3::Packet::SetNixVector(ns3::Ptr<ns3::NixVector> nixVector) [member function]
     cls.add_method('SetNixVector', 
                    'void', 
-                   [param('ns3::Ptr< ns3::NixVector >', 'arg0')])
+                   [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3TimeValue_methods(root_module, cls):
@@ -5595,6 +5606,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -5607,6 +5619,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.23/src/visualizer/bindings/modulegen__gcc_LP64.py ns-3.24/src/visualizer/bindings/modulegen__gcc_LP64.py
--- ns-3.23/src/visualizer/bindings/modulegen__gcc_LP64.py	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/visualizer/bindings/modulegen__gcc_LP64.py	2015-09-15 11:18:44.000000000 -0700
@@ -130,6 +130,8 @@
     module.add_class('Tag', import_from_module='ns.network', parent=root_module['ns3::ObjectBase'])
     ## tag-buffer.h (module 'network'): ns3::TagBuffer [class]
     module.add_class('TagBuffer', import_from_module='ns.network')
+    ## nstime.h (module 'core'): ns3::TimeWithUnit [class]
+    module.add_class('TimeWithUnit', import_from_module='ns.core')
     ## type-id.h (module 'core'): ns3::TypeId [class]
     module.add_class('TypeId', import_from_module='ns.core')
     ## type-id.h (module 'core'): ns3::TypeId::AttributeFlag [enumeration]
@@ -142,6 +144,8 @@
     module.add_class('empty', import_from_module='ns.core')
     ## int64x64-double.h (module 'core'): ns3::int64x64_t [class]
     module.add_class('int64x64_t', import_from_module='ns.core')
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::impl_type [enumeration]
+    module.add_enum('impl_type', ['int128_impl', 'cairo_impl', 'ld_impl'], outer_class=root_module['ns3::int64x64_t'], import_from_module='ns.core')
     ## chunk.h (module 'network'): ns3::Chunk [class]
     module.add_class('Chunk', import_from_module='ns.network', parent=root_module['ns3::ObjectBase'])
     ## header.h (module 'network'): ns3::Header [class]
@@ -284,17 +288,17 @@
     module.add_class('AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## address.h (module 'network'): ns3::AddressValue [class]
     module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
-    module.add_container('std::vector< ns3::PyViz::RxPacketSample >', 'ns3::PyViz::RxPacketSample', container_type='vector')
-    module.add_container('std::vector< ns3::PyViz::TxPacketSample >', 'ns3::PyViz::TxPacketSample', container_type='vector')
-    module.add_container('std::vector< ns3::PyViz::PacketSample >', 'ns3::PyViz::PacketSample', container_type='vector')
-    module.add_container('std::set< ns3::TypeId >', 'ns3::TypeId', container_type='set')
-    module.add_container('std::vector< ns3::PyViz::TransmissionSample >', 'ns3::PyViz::TransmissionSample', container_type='vector')
-    module.add_container('std::vector< ns3::PyViz::PacketDropSample >', 'ns3::PyViz::PacketDropSample', container_type='vector')
-    module.add_container('std::vector< ns3::PyViz::NetDeviceStatistics >', 'ns3::PyViz::NetDeviceStatistics', container_type='vector')
-    module.add_container('std::vector< std::string >', 'std::string', container_type='vector')
-    module.add_container('std::set< unsigned int >', 'unsigned int', container_type='set')
-    module.add_container('std::vector< ns3::PyViz::NodeStatistics >', 'ns3::PyViz::NodeStatistics', container_type='vector')
-    module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type='map')
+    module.add_container('std::vector< ns3::PyViz::RxPacketSample >', 'ns3::PyViz::RxPacketSample', container_type=u'vector')
+    module.add_container('std::vector< ns3::PyViz::TxPacketSample >', 'ns3::PyViz::TxPacketSample', container_type=u'vector')
+    module.add_container('std::vector< ns3::PyViz::PacketSample >', 'ns3::PyViz::PacketSample', container_type=u'vector')
+    module.add_container('std::set< ns3::TypeId >', 'ns3::TypeId', container_type=u'set')
+    module.add_container('std::vector< ns3::PyViz::TransmissionSample >', 'ns3::PyViz::TransmissionSample', container_type=u'vector')
+    module.add_container('std::vector< ns3::PyViz::PacketDropSample >', 'ns3::PyViz::PacketDropSample', container_type=u'vector')
+    module.add_container('std::vector< ns3::PyViz::NetDeviceStatistics >', 'ns3::PyViz::NetDeviceStatistics', container_type=u'vector')
+    module.add_container('std::vector< std::string >', 'std::string', container_type=u'vector')
+    module.add_container('std::set< unsigned int >', 'unsigned int', container_type=u'set')
+    module.add_container('std::vector< ns3::PyViz::NodeStatistics >', 'ns3::PyViz::NodeStatistics', container_type=u'vector')
+    module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type=u'map')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -307,6 +311,12 @@
     nested_module = module.add_cpp_namespace('Hash')
     register_types_ns3_Hash(nested_module)
     
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -317,12 +327,12 @@
     
     ## hash-function.h (module 'core'): ns3::Hash::Implementation [class]
     module.add_class('Implementation', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Hash::Implementation, ns3::empty, ns3::DefaultDeleter<ns3::Hash::Implementation> >'])
-    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash32Function_ptr')
-    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash32Function_ptr*')
-    typehandlers.add_type_alias('uint32_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash32Function_ptr&')
-    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *', 'ns3::Hash::Hash64Function_ptr')
-    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) **', 'ns3::Hash::Hash64Function_ptr*')
-    typehandlers.add_type_alias('uint64_t ( * ) ( char const *, size_t ) *&', 'ns3::Hash::Hash64Function_ptr&')
+    typehandlers.add_type_alias(u'uint32_t ( * ) ( char const *, size_t ) *', u'ns3::Hash::Hash32Function_ptr')
+    typehandlers.add_type_alias(u'uint32_t ( * ) ( char const *, size_t ) **', u'ns3::Hash::Hash32Function_ptr*')
+    typehandlers.add_type_alias(u'uint32_t ( * ) ( char const *, size_t ) *&', u'ns3::Hash::Hash32Function_ptr&')
+    typehandlers.add_type_alias(u'uint64_t ( * ) ( char const *, size_t ) *', u'ns3::Hash::Hash64Function_ptr')
+    typehandlers.add_type_alias(u'uint64_t ( * ) ( char const *, size_t ) **', u'ns3::Hash::Hash64Function_ptr*')
+    typehandlers.add_type_alias(u'uint64_t ( * ) ( char const *, size_t ) *&', u'ns3::Hash::Hash64Function_ptr&')
     
     ## Register a nested module for the namespace Function
     
@@ -342,6 +352,13 @@
     ## hash-murmur3.h (module 'core'): ns3::Hash::Function::Murmur3 [class]
     module.add_class('Murmur3', import_from_module='ns.core', parent=root_module['ns3::Hash::Implementation'])
 
+def register_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -388,6 +405,7 @@
     register_Ns3Simulator_methods(root_module, root_module['ns3::Simulator'])
     register_Ns3Tag_methods(root_module, root_module['ns3::Tag'])
     register_Ns3TagBuffer_methods(root_module, root_module['ns3::TagBuffer'])
+    register_Ns3TimeWithUnit_methods(root_module, root_module['ns3::TimeWithUnit'])
     register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
     register_Ns3TypeIdAttributeInformation_methods(root_module, root_module['ns3::TypeId::AttributeInformation'])
     register_Ns3TypeIdTraceSourceInformation_methods(root_module, root_module['ns3::TypeId::TraceSourceInformation'])
@@ -581,17 +599,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -613,11 +631,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -627,16 +640,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -708,6 +711,10 @@
     cls.add_method('Next', 
                    'void', 
                    [param('uint32_t', 'delta')])
+    ## buffer.h (module 'network'): uint8_t ns3::Buffer::Iterator::PeekU8() [member function]
+    cls.add_method('PeekU8', 
+                   'uint8_t', 
+                   [])
     ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Prev() [member function]
     cls.add_method('Prev', 
                    'void', 
@@ -720,6 +727,10 @@
     cls.add_method('Read', 
                    'void', 
                    [param('uint8_t *', 'buffer'), param('uint32_t', 'size')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Read(ns3::Buffer::Iterator start, uint32_t size) [member function]
+    cls.add_method('Read', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start'), param('uint32_t', 'size')])
     ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::ReadLsbtohU16() [member function]
     cls.add_method('ReadLsbtohU16', 
                    'uint16_t', 
@@ -866,14 +877,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -934,11 +949,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3EventId_methods(root_module, cls):
@@ -1672,10 +1682,10 @@
                    'void', 
                    [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
-    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & attribute) const [member function]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -1955,7 +1965,7 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
@@ -2226,10 +2236,10 @@
                    'void', 
                    [], 
                    is_static=True)
-    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & time) [member function]
+    ## simulator.h (module 'core'): static void ns3::Simulator::Stop(ns3::Time const & delay) [member function]
     cls.add_method('Stop', 
                    'void', 
-                   [param('ns3::Time const &', 'time')], 
+                   [param('ns3::Time const &', 'delay')], 
                    is_static=True)
     return
 
@@ -2328,6 +2338,14 @@
                    [param('uint8_t', 'v')])
     return
 
+def register_Ns3TimeWithUnit_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## nstime.h (module 'core'): ns3::TimeWithUnit::TimeWithUnit(ns3::TimeWithUnit const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::TimeWithUnit const &', 'arg0')])
+    ## nstime.h (module 'core'): ns3::TimeWithUnit::TimeWithUnit(ns3::Time const time, ns3::Time::Unit const unit) [constructor]
+    cls.add_constructor([param('ns3::Time const', 'time'), param('ns3::Time::Unit const', 'unit')])
+    return
+
 def register_Ns3TypeId_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -2350,7 +2368,12 @@
     ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor) [member function]
     cls.add_method('AddTraceSource', 
                    'ns3::TypeId', 
-                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -2401,6 +2424,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation ns3::TypeId::GetTraceSource(uint32_t i) const [member function]
     cls.add_method('GetTraceSource', 
                    'ns3::TypeId::TraceSourceInformation', 
@@ -2477,6 +2505,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -2511,6 +2543,8 @@
     cls.add_constructor([param('ns3::TypeId::TraceSourceInformation const &', 'arg0')])
     ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::accessor [variable]
     cls.add_instance_attribute('accessor', 'ns3::Ptr< ns3::TraceSourceAccessor const >', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', is_const=False)
     ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::help [variable]
     cls.add_instance_attribute('help', 'std::string', is_const=False)
     ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::name [variable]
@@ -2525,62 +2559,18 @@
     return
 
 def register_Ns3Int64x64_t_methods(root_module, cls):
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned char const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long int const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long int const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('int const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short int const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('signed char const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('double const', 'right'))
-    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned char const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long int const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long int const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('int const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short int const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('signed char const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('double const', 'right'))
-    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned char const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short int const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('signed char const', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('double const', 'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
     cls.add_unary_numeric_operator('-')
-    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short unsigned int const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('unsigned char const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long long int const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('long int const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('int const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('short int const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('signed char const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('double const', 'right'))
-    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', 'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('>')
     cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('*=', param('ns3::int64x64_t const &', 'right'))
-    cls.add_inplace_numeric_operator('+=', param('ns3::int64x64_t const &', 'right'))
-    cls.add_inplace_numeric_operator('-=', param('ns3::int64x64_t const &', 'right'))
-    cls.add_inplace_numeric_operator('/=', param('ns3::int64x64_t const &', 'right'))
+    cls.add_inplace_numeric_operator('*=', param('ns3::int64x64_t const &', u'right'))
+    cls.add_inplace_numeric_operator('+=', param('ns3::int64x64_t const &', u'right'))
+    cls.add_inplace_numeric_operator('-=', param('ns3::int64x64_t const &', u'right'))
+    cls.add_inplace_numeric_operator('/=', param('ns3::int64x64_t const &', u'right'))
     cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('==')
@@ -2589,6 +2579,8 @@
     cls.add_constructor([])
     ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(double v) [constructor]
     cls.add_constructor([param('double', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long double v) [constructor]
+    cls.add_constructor([param('long double', 'v')])
     ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(int v) [constructor]
     cls.add_constructor([param('int', 'v')])
     ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long int v) [constructor]
@@ -2629,6 +2621,8 @@
     cls.add_method('MulByInvert', 
                    'void', 
                    [param('ns3::int64x64_t const &', 'o')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::implementation [variable]
+    cls.add_static_attribute('implementation', 'ns3::int64x64_t::impl_type const', is_const=True)
     return
 
 def register_Ns3Chunk_methods(root_module, cls):
@@ -3680,13 +3674,15 @@
     return
 
 def register_Ns3Time_methods(root_module, cls):
-    cls.add_binary_numeric_operator('+', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', 'right'))
-    cls.add_binary_numeric_operator('-', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', 'right'))
+    cls.add_binary_numeric_operator('*', root_module['ns3::Time'], root_module['ns3::Time'], param('int64_t const &', u'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', u'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', u'right'))
+    cls.add_binary_numeric_operator('/', root_module['ns3::Time'], root_module['ns3::Time'], param('int64_t const &', u'right'))
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('>')
     cls.add_binary_comparison_operator('!=')
-    cls.add_inplace_numeric_operator('+=', param('ns3::Time const &', 'right'))
-    cls.add_inplace_numeric_operator('-=', param('ns3::Time const &', 'right'))
+    cls.add_inplace_numeric_operator('+=', param('ns3::Time const &', u'right'))
+    cls.add_inplace_numeric_operator('-=', param('ns3::Time const &', u'right'))
     cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('==')
@@ -3709,34 +3705,39 @@
     cls.add_constructor([param('long unsigned int', 'v')])
     ## nstime.h (module 'core'): ns3::Time::Time(long long unsigned int v) [constructor]
     cls.add_constructor([param('long long unsigned int', 'v')])
+    ## nstime.h (module 'core'): ns3::Time::Time(ns3::int64x64_t const & v) [constructor]
+    cls.add_constructor([param('ns3::int64x64_t const &', 'v')])
     ## nstime.h (module 'core'): ns3::Time::Time(std::string const & s) [constructor]
     cls.add_constructor([param('std::string const &', 's')])
-    ## nstime.h (module 'core'): ns3::Time::Time(ns3::int64x64_t const & value) [constructor]
-    cls.add_constructor([param('ns3::int64x64_t const &', 'value')])
+    ## nstime.h (module 'core'): ns3::TimeWithUnit ns3::Time::As(ns3::Time::Unit const unit) const [member function]
+    cls.add_method('As', 
+                   'ns3::TimeWithUnit', 
+                   [param('ns3::Time::Unit const', 'unit')], 
+                   is_const=True)
     ## nstime.h (module 'core'): int ns3::Time::Compare(ns3::Time const & o) const [member function]
     cls.add_method('Compare', 
                    'int', 
                    [param('ns3::Time const &', 'o')], 
                    is_const=True)
-    ## nstime.h (module 'core'): static ns3::Time ns3::Time::From(ns3::int64x64_t const & from, ns3::Time::Unit timeUnit) [member function]
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::From(ns3::int64x64_t const & value) [member function]
     cls.add_method('From', 
                    'ns3::Time', 
-                   [param('ns3::int64x64_t const &', 'from'), param('ns3::Time::Unit', 'timeUnit')], 
+                   [param('ns3::int64x64_t const &', 'value')], 
                    is_static=True)
-    ## nstime.h (module 'core'): static ns3::Time ns3::Time::From(ns3::int64x64_t const & value) [member function]
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::From(ns3::int64x64_t const & value, ns3::Time::Unit unit) [member function]
     cls.add_method('From', 
                    'ns3::Time', 
-                   [param('ns3::int64x64_t const &', 'value')], 
+                   [param('ns3::int64x64_t const &', 'value'), param('ns3::Time::Unit', 'unit')], 
                    is_static=True)
-    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromDouble(double value, ns3::Time::Unit timeUnit) [member function]
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromDouble(double value, ns3::Time::Unit unit) [member function]
     cls.add_method('FromDouble', 
                    'ns3::Time', 
-                   [param('double', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
+                   [param('double', 'value'), param('ns3::Time::Unit', 'unit')], 
                    is_static=True)
-    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromInteger(uint64_t value, ns3::Time::Unit timeUnit) [member function]
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromInteger(uint64_t value, ns3::Time::Unit unit) [member function]
     cls.add_method('FromInteger', 
                    'ns3::Time', 
-                   [param('uint64_t', 'value'), param('ns3::Time::Unit', 'timeUnit')], 
+                   [param('uint64_t', 'value'), param('ns3::Time::Unit', 'unit')], 
                    is_static=True)
     ## nstime.h (module 'core'): double ns3::Time::GetDays() const [member function]
     cls.add_method('GetDays', 
@@ -3853,20 +3854,20 @@
                    'bool', 
                    [], 
                    is_static=True)
-    ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit timeUnit) const [member function]
+    ## nstime.h (module 'core'): ns3::int64x64_t ns3::Time::To(ns3::Time::Unit unit) const [member function]
     cls.add_method('To', 
                    'ns3::int64x64_t', 
-                   [param('ns3::Time::Unit', 'timeUnit')], 
+                   [param('ns3::Time::Unit', 'unit')], 
                    is_const=True)
-    ## nstime.h (module 'core'): double ns3::Time::ToDouble(ns3::Time::Unit timeUnit) const [member function]
+    ## nstime.h (module 'core'): double ns3::Time::ToDouble(ns3::Time::Unit unit) const [member function]
     cls.add_method('ToDouble', 
                    'double', 
-                   [param('ns3::Time::Unit', 'timeUnit')], 
+                   [param('ns3::Time::Unit', 'unit')], 
                    is_const=True)
-    ## nstime.h (module 'core'): int64_t ns3::Time::ToInteger(ns3::Time::Unit timeUnit) const [member function]
+    ## nstime.h (module 'core'): int64_t ns3::Time::ToInteger(ns3::Time::Unit unit) const [member function]
     cls.add_method('ToInteger', 
                    'int64_t', 
-                   [param('ns3::Time::Unit', 'timeUnit')], 
+                   [param('ns3::Time::Unit', 'unit')], 
                    is_const=True)
     return
 
@@ -4033,11 +4034,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -4463,6 +4474,11 @@
                    'bool', 
                    [param('uint32_t', 'i')], 
                    is_const=True, is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::IsUnicast(ns3::Ipv4Address ad) const [member function]
+    cls.add_method('IsUnicast', 
+                   'bool', 
+                   [param('ns3::Ipv4Address', 'ad')], 
+                   is_const=True)
     ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::IsUp(uint32_t i) const [member function]
     cls.add_method('IsUp', 
                    'bool', 
@@ -4623,11 +4639,6 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## ipv4-route.h (module 'internet'): uint32_t ns3::Ipv4MulticastRoute::GetOutputTtl(uint32_t oif) [member function]
-    cls.add_method('GetOutputTtl', 
-                   'uint32_t', 
-                   [param('uint32_t', 'oif')], 
-                   deprecated=True)
     ## ipv4-route.h (module 'internet'): std::map<unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > > ns3::Ipv4MulticastRoute::GetOutputTtlMap() const [member function]
     cls.add_method('GetOutputTtlMap', 
                    'std::map< unsigned int, unsigned int >', 
@@ -5296,11 +5307,6 @@
                    'uint64_t', 
                    [], 
                    is_const=True)
-    ## packet.h (module 'network'): uint8_t const * ns3::Packet::PeekData() const [member function]
-    cls.add_method('PeekData', 
-                   'uint8_t const *', 
-                   [], 
-                   deprecated=True, is_const=True)
     ## packet.h (module 'network'): uint32_t ns3::Packet::PeekHeader(ns3::Header & header) const [member function]
     cls.add_method('PeekHeader', 
                    'uint32_t', 
@@ -5367,10 +5373,15 @@
                    'uint32_t', 
                    [param('uint8_t *', 'buffer'), param('uint32_t', 'maxSize')], 
                    is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::SetNixVector(ns3::Ptr<ns3::NixVector> arg0) [member function]
+    ## packet.h (module 'network'): void ns3::Packet::SetNixVector(ns3::Ptr<ns3::NixVector> nixVector) [member function]
     cls.add_method('SetNixVector', 
                    'void', 
-                   [param('ns3::Ptr< ns3::NixVector >', 'arg0')])
+                   [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3TimeValue_methods(root_module, cls):
@@ -5595,6 +5606,7 @@
     module = root_module
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -5607,6 +5619,9 @@
 def register_functions_ns3_Hash_Function(module, root_module):
     return
 
+def register_functions_ns3_TracedValueCallback(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.23/src/visualizer/model/visual-simulator-impl.cc ns-3.24/src/visualizer/model/visual-simulator-impl.cc
--- ns-3.23/src/visualizer/model/visual-simulator-impl.cc	2015-05-13 11:05:27.000000000 -0700
+++ ns-3.24/src/visualizer/model/visual-simulator-impl.cc	2015-09-15 11:18:44.000000000 -0700
@@ -141,24 +141,24 @@
 }
 
 void 
-VisualSimulatorImpl::Stop (Time const &time)
+VisualSimulatorImpl::Stop (Time const &delay)
 {
-  m_simulator->Stop (time);
+  m_simulator->Stop (delay);
 }
 
 //
 // Schedule an event for a _relative_ time in the future.
 //
 EventId
-VisualSimulatorImpl::Schedule (Time const &time, EventImpl *event)
+VisualSimulatorImpl::Schedule (Time const &delay, EventImpl *event)
 {
-  return m_simulator->Schedule (time, event);
+  return m_simulator->Schedule (delay, event);
 }
 
 void
-VisualSimulatorImpl::ScheduleWithContext (uint32_t context, Time const &time, EventImpl *event)
+VisualSimulatorImpl::ScheduleWithContext (uint32_t context, Time const &delay, EventImpl *event)
 {
-  m_simulator->ScheduleWithContext (context, time, event);
+  m_simulator->ScheduleWithContext (context, delay, event);
 }
 
 EventId
diff -Naur ns-3.23/src